GitHub Actions สำหรับ Self-Hosted Deployment Pipeline
GitHub Actions มี documentation ดีสำหรับการ deploy ไปยัง cloud PaaS platform — Vercel, Railway, Fly.io แต่ documentation สำหรับการ deploy ไปยัง server ที่คุณดำเนินการเองผ่าน SSH นั้นกระจัดกระจายกว่า ส่วนประกอบมีอยู่ การวาง pattern ที่ทำงานได้ใน production ต้องการการรวมกันในลักษณะที่ส่วนใหญ่ไม่ได้ document ไว้อย่างดี
รูปแบบพื้นฐาน: SSH ไปยัง server, pull, restart
name: Deploy to Production
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Deploy via SSH
uses: appleboy/[email protected]
with:
host: ${{ secrets.DEPLOY_HOST }}
username: ${{ secrets.DEPLOY_USER }}
key: ${{ secrets.DEPLOY_SSH_KEY }}
script: |
cd /opt/myapp
git pull origin main
docker compose pull
docker compose up -d --remove-orphans
docker system prune -f
Self-hosted runner สำหรับ private network
ถ้า server ของคุณอยู่บน private network ที่ไม่มี public IP หรือถ้าคุณต้องการหลีกเลี่ยง SSH inbound บน production server โดยสิ้นเชิง self-hosted GitHub Actions runner คือ pattern ที่ถูกต้อง Runner ทำงานบนเซิร์ฟเวอร์ของคุณ ติดต่อ GitHub outbound เพื่อ pull job ซึ่งกลับ SSH requirements ได้อย่างสมบูรณ์