Auto Deploy บน Plesk ด้วย CI/CD Pipeline จาก GitHub Actions

Auto Deploy บน Plesk ด้วย GitHub Actions เป็นวิธีที่ทรงพลังในการปรับปรุงกระบวนการพัฒนาและการจัดการเซิร์ฟเวอร์แบบอัตโนมัติ ด้วยการเชื่อมต่อ GitHub Actions กับ Plesk นักพัฒนาสามารถปล่อยโค้ดอัตโนมัติไปยังเซิร์ฟเวอร์เมื่อมีการอัปเดตใน Repository แค่ Push Code เดียว

GitHub Actions คืออะไร?

GitHub Actions เป็นบริการ CI/CD ที่รวมอยู่ใน GitHub ช่วยให้สร้าง Workflow อัตโนมัติสำหรับการ Build, Test และ Deploy โค้ด เมื่อมีเหตุการณ์ที่กำหนด เช่น Push โค้ด หรือสร้าง Pull Request โดย Workflow ทำงานบนเซิร์ฟเวอร์ของ GitHub ไม่ต้องจัดการเซิร์ฟเวอร์เพิ่มเติม

ขั้นตอนที่ 1: สร้าง SSH Key สำหรับ Deploy

บนเซิร์ฟเวอร์ Plesk ใช้คำสั่งสร้าง SSH Key:

ssh-keygen -t rsa -b 4096 -f ~/.ssh/deploy_key -N ""
cat ~/.ssh/deploy_key.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

ขั้นตอนที่ 2: เก็บ SSH Private Key ใน GitHub Secrets

ไปที่ GitHub Repository → Settings → Secrets and variables → Actions → New repository secret แล้วเพิ่ม Secrets ต่างๆ ดังนี้:

  • DEPLOY_KEY — SSH Private Key ที่สร้างในขั้นตอนที่ 1
  • DEPLOY_HOST — IP Address หรือ Hostname ของ Plesk Server
  • DEPLOY_USER — ชื่อ User SSH
  • DEPLOY_PATH — เส้นทาง Directory บนเซิร์ฟเวอร์

ขั้นตอนที่ 3: สร้าง GitHub Actions Workflow

สร้างไฟล์ .github/workflows/deploy.yml ในโปรเจกต์:

name: Deploy to Plesk

on:
  push:
    branches:
      - main

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v3

      - name: Setup Node.js
        uses: actions/setup-node@v3
        with:
          node-version: '18'

      - name: Install dependencies
        run: npm install

      - name: Run tests
        run: npm test

      - name: Build application
        run: npm run build

  deploy:
    needs: build
    runs-on: ubuntu-latest
    if: success()
    steps:
      - name: Checkout code
        uses: actions/checkout@v3

      - name: Deploy to Plesk Server via SSH
        uses: appleboy/ssh-action@master
        with:
          host: ${{ secrets.DEPLOY_HOST }}
          username: ${{ secrets.DEPLOY_USER }}
          key: ${{ secrets.DEPLOY_KEY }}
          script: |
            cd ${{ secrets.DEPLOY_PATH }}
            git pull origin main
            npm install --production
            npm run build
            pm2 restart app

แบบที่ 2: ใช้ rsync แทน SSH Command

หากต้องการส่งไฟล์ผ่าน rsync สามารถแก้ไข deploy job ดังนี้:

  deploy:
    needs: build
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v3

      - name: Setup SSH
        run: |
          mkdir -p ~/.ssh
          echo "${{ secrets.DEPLOY_KEY }}" > ~/.ssh/deploy_key
          chmod 600 ~/.ssh/deploy_key
          ssh-keyscan -H ${{ secrets.DEPLOY_HOST }} >> ~/.ssh/known_hosts

      - name: Deploy using Rsync
        run: |
          rsync -avz \
            -e "ssh -i ~/.ssh/deploy_key" \
            --exclude '.git' \
            --delete \
            ./ ${{ secrets.DEPLOY_USER }}@${{ secrets.DEPLOY_HOST }}:${{ secrets.DEPLOY_PATH }}/

ประโยชน์ของ CI/CD Pipeline กับ Plesk

  • ความเร็ว: Deploy อัตโนมัติหลัง Push Code ไม่ต้องรอคน
  • ความปลอดภัย: SSH Key เก็บใน GitHub Secrets ไม่เปิดเผยใน Code
  • Test ก่อน Deploy: Workflow รัน Test อัตโนมัติก่อน Deploy หาก Test ไม่ผ่านจะไม่ Deploy
  • ติดตามสถานะ: ดู Logs ใน GitHub Actions แต่ละ Run

CI/CD Pipeline บน ผู้ให้บริการโฮสติ้ง Cloud VPS

หากคุณกำลังมองหาเซิร์ฟเวอร์ที่มีประสิทธิภาพสูงสำหรับการรัน Plesk และ CI/CD Pipeline ผู้ให้บริการโฮสติ้ง Cloud VPS เป็นทางเลือกที่ยอดเยี่ยม ด้วย SSD ความเร็วสูง RAM เพียงพอ และการสนับสนุนจากทีมงานตลอด 24/7 ทำให้คุณสามารถ Build และ Deploy ได้อย่างราบรื่นและเสถียร

สนใจใช้บริการ Cloud VPS สำหรับ DevOps Pipeline สอบถามได้ที่ de.co.th