CI/CD คืออะไร และทำไมถึงสำคัญกับ Laravel
CI/CD (Continuous Integration/Continuous Deployment) เป็นแนวทางการพัฒนาซอฟต์แวร์ที่ช่วยให้นักพัฒนาสามารถผลิตและปรับปรุงโค้ดได้อย่างรวดเร็ว ถูกต้อง และมีประสิทธิภาพ ในแต่ละครั้งที่นักพัฒนาสร้าง commit ใหม่ ระบบ CI/CD จะทำการทดสอบ บิวด์ และปรับใช้โค้ดโดยอัตโนมัติ ซึ่งช่วยลดข้อผิดพลาดและเพิ่มความเร็วในการส่งมอบผลิตภัณฑ์
สำหรับแอปพลิเคชัน Laravel CI/CD นั้นสำคัญมากเพราะช่วยให้:
- ตรวจสอบข้อผิดพลาดได้เร็วขึ้น
- ลดเวลาในการปรับใช้ (Deploy) ลงเหลือเพียงไม่กี่นาที
- เพิ่มคุณภาพของโค้ดผ่านการทดสอบอัตโนมัติ
- ลดความเสี่ยงจากการปรับใช้ด้วยตนเองที่อาจเกิดข้อผิดพลาด
- เพิ่มความเชื่อมั่นของทีมในการพัฒนาอย่างต่อเนื่อง
สิ่งที่ต้องเตรียมสำหรับ CI/CD Pipeline
ก่อนเริ่มการตั้งค่า CI/CD Pipeline คุณจะต้องเตรียมส่วนประกอบต่อไปนี้:
- Server VPS ที่ติดตั้ง Plesk – เพื่อใช้เป็น Server ปรับใช้สำหรับแอปพลิเคชัน Laravel
- Git Repository – GitHub, GitLab หรือ Gitea เพื่อเก็บโค้ดของคุณ
- Laravel Project – โปรเจกต์ Laravel ที่พร้อมปรับใช้
- SSH Keys – สำหรับการเชื่อมต่ออย่างปลอดภัยระหว่าง CI/CD System และ Server
- Composer Dependencies – ควรมี composer.lock เพื่อให้ Deployment มีความสอดคล้องกัน
ขั้นตอนการตั้งค่า Git Repository
สิ่งแรกที่คุณต้องทำคือเตรียม Git Repository ให้พร้อม:
1. สร้าง Repository บน GitHub/GitLab
เข้าไปยัง GitHub หรือ GitLab และสร้าง Repository ใหม่สำหรับโปรเจกต์ Laravel ของคุณ ระบุชื่อที่เหมาะสม เช่น “laravel-app-production” และตั้งค่าให้เป็น Private Repository หากเป็นโปรเจกต์เชิงพาณิชย์
2. Push โค้ด Laravel ไปยัง Repository
cd /path/to/laravel-project
git init
git add .
git commit -m "Initial commit"
git remote add origin https://github.com/username/laravel-app.git
git push -u origin main
3. เตรียม Environment File
สำคัญมากที่จะต้องไม่ push .env file ไปยัง Repository เพราะมีข้อมูลสำคัญ แทนที่นั้น สร้าง .env.example ที่มีเฉพาะ key โดยไม่มีค่า
cp .env .env.example
rm .env
git add .env.example
git commit -m "Add env example file"
git push
การตั้งค่า Plesk Git Deployment
Plesk มีฟีเจอร์ Git Deployment ที่ช่วยให้คุณปรับใช้แอปพลิเคชันได้โดยอัตโนมัติเมื่อมี commit ใหม่บน Repository
ขั้นตอนการตั้งค่า:
- เข้าไปในแผงควบคุม Plesk
- ไปที่ Tools & Settings > Git
- คลิก “Initialize Repository” และเลือก Repository URL
- ป้อน Branch ที่ต้องการ (เช่น main หรือ master)
- สร้าง SSH Key และ Deploy Key สำหรับการเชื่อมต่ออย่างปลอดภัย
- ทดสอบการเชื่อมต่อโดยคลิก “Check Connection”
- คลิป “Deploy” เพื่อทำการปรับใช้ครั้งแรก
การเขียน CI/CD Pipeline ด้วย GitHub Actions
GitHub Actions เป็นเครื่องมือที่มีประสิทธิภาพสำหรับการสร้าง CI/CD Pipeline โดยตรงจาก GitHub Repository ของคุณ ไม่ต้องใช้บริการภายนอกเพิ่มเติม
สร้าง Workflow File:
สร้างไดเรกทอรี .github/workflows ในโปรเจกต์ของคุณ และสร้างไฟล์ชื่อ deploy.yml
name: Laravel CI/CD Pipeline
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
test:
runs-on: ubuntu-latest
services:
mysql:
image: mysql:8.0
env:
MYSQL_DATABASE: laravel_test
MYSQL_PASSWORD: password
MYSQL_ROOT_PASSWORD: password
options: >-
--health-cmd="mysqladmin ping"
--health-interval=10s
--health-timeout=5s
--health-retries=3
steps:
- uses: actions/checkout@v3
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: '8.2'
extensions: mbstring, bcmath, pdo_mysql
coverage: xdebug
- name: Install Dependencies
run: composer install
- name: Copy Environment File
run: cp .env.example .env
- name: Generate Application Key
run: php artisan key:generate
- name: Run Tests
run: php artisan test
- name: Run Code Analysis
run: ./vendor/bin/phpstan analyse app
deploy:
needs: test
runs-on: ubuntu-latest
if: github.ref == 'refs/heads/main' && github.event_name == 'push'
steps:
- uses: actions/checkout@v3
- name: Deploy to Server
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.SERVER_HOST }}
username: ${{ secrets.SERVER_USER }}
key: ${{ secrets.SSH_PRIVATE_KEY }}
script: |
cd /var/www/html/laravel-app
git pull origin main
composer install --no-dev --optimize-autoloader
php artisan migrate --force
php artisan cache:clear
php artisan config:clear
chown -R nobody:nobody /var/www/html/laravel-app
การตั้งค่า Environment Variables และ .env File
สำหรับการปรับใช้อย่างปลอดภัย ข้อมูลที่ละเอียดอ่อนเช่น Database Password ควรเก็บไว้ใน GitHub Secrets แทนที่จะ Commit โดยตรง
ขั้นตอนการตั้งค่า Secrets:
- ไปที่ Settings > Secrets and Variables > Actions ใน Repository
- คลิก “New repository secret”
- เพิ่ม Secrets ต่อไปนี้:
SERVER_HOST = your-vps-ip-or-domain.com
SERVER_USER = deploy_user
SSH_PRIVATE_KEY = (your private SSH key content)
DB_PASSWORD = your_database_password
จากนั้น ในขั้นตอน Deploy สามารถใช้ค่าเหล่านี้ได้ด้วยการอ้างอิง ${{ secrets.SECRET_NAME }}
การรัน Database Migration อัตโนมัติ
หากแอปพลิเคชัน Laravel ของคุณมีการเปลี่ยนแปลงฐานข้อมูล (Database Migration) สามารถให้ CI/CD Pipeline รันการ Migrate โดยอัตโนมัติได้
เพิ่มโค้ดนี้ในขั้นตอน Deploy ของ Workflow:
- name: Run Database Migrations
run: |
php artisan migrate --force
php artisan db:seed --class=ProductionSeeder
ตัวเลือก –force จำเป็นในสภาพแวดล้อม Production เพื่อหลีกเลี่ยงการถามยืนยันจากสคริปต์
ทดสอบ Pipeline:
- สร้าง Pull Request ใหม่หรือ Push ไปยัง main branch
- ไปที่แท็บ Actions ใน GitHub
- ดูสถานะการ Run Workflow
- หากเกิดข้อผิดพลาด ให้คลิกที่ Workflow เพื่อดูรายละเอียดข้อผิดพลาด
ปัญหาทั่วไปและวิธีแก้:
- ข้อผิดพลาด SSH Connection: ตรวจสอบให้แน่ใจว่า SSH Key ถูกป้อนอย่างถูกต้องใน GitHub Secrets
- Composer Dependencies ล้มเหลว: ลองลบ composer.lock และรันใหม่
- Database Migration ล้มเหลว: ตรวจสอบสิทธิ์การเข้าถึงฐานข้อมูลและโครงสร้างตารางโครงข่าย
- ไม่สามารถเขียนไฟล์บน Server: ตรวจสอบสิทธิ์ของไดเรกทอรี storage และ bootstrap/cache
- การสนับสนุนทั้งวัน: ทีมสนับสนุนของเรา พร้อมช่วยเหลือ 24/7 หากมีปัญหาในการตั้งค่า
- Plesk ที่ได้รับการอัปเดต: Plesk ติดตั้งและอัปเดตเรียบร้อยแล้ว พร้อมให้คุณใช้ Git Deployment
- ประสิทธิภาพสูง: VPS ของ DE ใช้ SSD NVMe และ Intel Xeon Processors เพื่อให้ความเร็วสูงสุด
- SSL Certificate ฟรี: ได้รับ Let’s Encrypt SSL Certificate ฟรีสำหรับปรับใช้แอปพลิเคชัน HTTPS
- ความปลอดภัย: มี DDoS Protection และ Firewall บนบริการ Cloud VPS ของเรา
