Auto Deploy Docker Container บน VPS ด้วย GitHub Actions เป็นกระบวนการสำคัญในการพัฒนาแอปพลิเคชันแบบ DevOps สมัยใหม่ ช่วยให้การปรับใช้โค้ดใหม่เป็นอัตโนมัติและรวดเร็ว ลดเวลาการปรับใช้และลดความเสี่ยงจากการดำเนินการด้วยมือ
ประโยชน์ของ Auto Deploy Docker Container
- ลดเวลาการปรับใช้: ไม่ต้องปรับใช้ด้วยมือซ้ำซ้อน
- ความสอดคล้องกันของสภาพแวดล้อม: Docker Container ทำให้การ Deploy มีความสอดคล้องทุก Environment
- ลดความเสี่ยง: ลดความผิดพลาดจากการดำเนินการด้วยมือ
- ความโปร่งใส: ติดตามเวอร์ชันโค้ดและการปรับใช้ได้อย่างชัดเจน
ขั้นตอนที่ 1: เตรียม VPS
sudo apt update
sudo apt install -y docker.io docker-compose
sudo usermod -aG docker $USER
# สร้าง SSH Key สำหรับ Deploy
ssh-keygen -t rsa -b 4096 -f ~/.ssh/deploy_key -N ""
cat ~/.ssh/deploy_key.pub >> ~/.ssh/authorized_keys
ขั้นตอนที่ 2: ตั้งค่า GitHub Repository Secrets
เพิ่ม Secrets ใน Repository → Settings → Secrets and variables → Actions:
VPS_HOST— IP Address หรือ Domain ของ VPSVPS_USER— Username SSHVPS_SSH_KEY— SSH Private KeyDOCKER_USERNAME— Docker Hub UsernameDOCKER_PASSWORD— Docker Hub Password หรือ Token
ขั้นตอนที่ 3: Dockerfile ตัวอย่าง
FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
EXPOSE 3000
HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
CMD node -e "require('http').get('http://localhost:3000', (r) => {if (r.statusCode !== 200) throw new Error(r.statusCode)})"
CMD ["node", "index.js"]
ขั้นตอนที่ 4: GitHub Actions Workflow สมบูรณ์
name: Auto Deploy Docker Container
on:
push:
branches:
- main
env:
REGISTRY: ghcr.io
IMAGE_NAME: ${{ github.repository }}
jobs:
build:
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Log in to GitHub Container Registry
uses: docker/login-action@v3
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Build and push Docker image
uses: docker/build-push-action@v5
with:
context: .
push: true
tags: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ github.sha }}
cache-from: type=gha
cache-to: type=gha,mode=max
deploy:
needs: build
runs-on: ubuntu-latest
steps:
- name: Setup SSH
run: |
mkdir -p ~/.ssh
echo "${{ secrets.VPS_SSH_KEY }}" > ~/.ssh/deploy_key
chmod 600 ~/.ssh/deploy_key
ssh-keyscan -H ${{ secrets.VPS_HOST }} >> ~/.ssh/known_hosts
- name: Deploy to VPS
run: |
ssh -i ~/.ssh/deploy_key ${{ secrets.VPS_USER }}@${{ secrets.VPS_HOST }} << 'ENDSSH'
# Login to registry
echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io -u ${{ github.actor }} --password-stdin
# Pull และ restart container
docker pull ghcr.io/${{ github.repository }}:${{ github.sha }}
docker stop myapp || true
docker rm myapp || true
docker run -d --name myapp --restart unless-stopped \
-p 80:3000 \
-e NODE_ENV=production \
ghcr.io/${{ github.repository }}:${{ github.sha }}
docker image prune -f
ENDSSH
- name: Verify deployment
run: |
ssh -i ~/.ssh/deploy_key ${{ secrets.VPS_USER }}@${{ secrets.VPS_HOST }} \
"docker ps | grep myapp && echo 'Deployment successful!'"
ใช้ Docker Hub แทน GitHub Container Registry
- name: Log in to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Build and push to Docker Hub
uses: docker/build-push-action@v5
with:
context: .
push: true
tags: |
${{ secrets.DOCKER_USERNAME }}/myapp:latest
${{ secrets.DOCKER_USERNAME }}/myapp:${{ github.sha }}
การจัดการ Secrets อย่างปลอดภัย
- สร้าง Deploy User แยกที่มีสิทธิ์จำกัด ไม่ใช้ root
- เก็บ SSH Key ใน GitHub Secrets ไม่ใส่ใน Repository
- จำกัดสิทธิ์ SSH Key เฉพาะคำสั่งที่จำเป็น
- หมุนเวียน Secrets เป็นระยะเวลา
- ใช้ .env.example ไม่เก็บค่า Environment ใน Repository
Auto Deploy Docker กับ ผู้ให้บริการโฮสติ้ง Cloud VPS
หากกำลังมองหา VPS ที่มีประสิทธิภาพสูงสำหรับการรัน Docker Container ผู้ให้บริการโฮสติ้ง Cloud VPS เป็นทางเลือกที่ยอดเยี่ยม ด้วยมี SSD ความเร็วสูง RAM เพียงพอ และรองรับ Docker และ CI/CD Workflow ครบวงจร ทำให้คุณ Build และ Deploy Container ได้อย่างราบรื่นและเสถียร
สนใจใช้บริการ Cloud VPS สอบถามได้ที่ de.co.th
