Git Deployment
การใช้ Git ในการจัดการเวอร์ชันของโค้ดและดึงโค้ดจาก Git repository ไปยังเซิร์ฟเวอร์โดยตรงเป็นวิธีที่มีประสิทธิภาพและสะดวกสบายในการปรับใช้เว็บแอปพลิเคชัน โดยสามารถใช้บริการเช่น GitHub Actions, GitLab CI/CD หรือ Bitbucket Pipelines ในการจัดการกระบวนการ deploy อัตโนมัติได้
ขั้นตอนการปรับใช้เว็บแอปพลิเคชันด้วย Git Deployment
1. การตั้งค่า Git Repository
- สร้าง Git repository: บน GitHub, GitLab หรือ Bitbucket
- เพิ่ม remote repository: บนเครื่องคอมพิวเตอร์ของคุณ
git remote add origin https://github.com/username/repository.git
2. การติดตั้ง Git บนเซิร์ฟเวอร์
บนเซิร์ฟเวอร์ที่ต้องการปรับใช้แอปพลิเคชัน ตรวจสอบให้แน่ใจว่า Git ถูกติดตั้งแล้ว ถ้ายังไม่ติดตั้ง ให้ใช้คำสั่งดังนี้:
sudo apt-get update
sudo apt-get install git
3. การตั้งค่า SSH Key สำหรับการเชื่อมต่อกับ Git Repository
- สร้าง SSH Key: บนเซิร์ฟเวอร์
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
- เพิ่ม SSH Key ไปยัง Git repository: โดยคัดลอก public key (ไฟล์
.pub
) และเพิ่มไปยัง GitHub, GitLab หรือ Bitbucket ในส่วนของ SSH keys
4. การตั้งค่า Git Deployment บนเซิร์ฟเวอร์
- สร้างโฟลเดอร์สำหรับแอปพลิเคชัน: บนเซิร์ฟเวอร์
mkdir -p /var/www/myapp
cd /var/www/myapp
- ดึงโค้ดจาก Git repository:
git clone git@github.com:username/repository.git .
- ตั้งค่า post-receive hook: เพื่อทำการ pull โค้ดอัตโนมัติเมื่อมีการ push โค้ดใหม่ไปยัง repository
cd /var/www/myapp.git/hooks
nano post-receive
เพิ่มสคริปต์ดังนี้:
#!/bin/bash
GIT_WORK_TREE=/var/www/myapp git checkout -f
บันทึกไฟล์และให้สิทธิ์การรัน:
chmod +x post-receive
5. การใช้ GitHub Actions สำหรับการ Deploy อัตโนมัติ
GitHub Actions ช่วยให้การตั้งค่า CI/CD เพื่อทดสอบและปรับใช้โค้ดอัตโนมัติ
- สร้างไฟล์ workflow: ในโฟลเดอร์
.github/workflows
name: CI/CD Pipeline
on:
push:
branches:
- main
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Set up Node.js
uses: actions/setup-node@v2
with:
node-version: '14'
- name: Install dependencies
run: npm install
- name: Build project
run: npm run build
- name: Deploy to Server
env:
SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
SERVER: your_server_ip
USER: your_server_user
run: |
echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add - > /dev/null
ssh -o StrictHostKeyChecking=no $USER@$SERVER "cd /var/www/myapp && git pull origin main && npm install && npm run build"
- ตั้งค่า Secrets ใน GitHub Repository: เช่น
SSH_PRIVATE_KEY
เพื่อให้ GitHub Actions สามารถเชื่อมต่อกับเซิร์ฟเวอร์
6. การใช้ GitLab CI/CD สำหรับการ Deploy อัตโนมัติ
GitLab CI/CD ช่วยในการตั้งค่า pipeline สำหรับการปรับใช้โปรเจค
- สร้างไฟล์
.gitlab-ci.yml
: ใน root directory ของโปรเจค
stages:
- deploy
deploy:
stage: deploy
script:
- apt-get update -qq && apt-get install -qqy openssh-client
- eval $(ssh-agent -s)
- echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add -
- mkdir -p ~/.ssh
- ssh-keyscan your_server_ip >> ~/.ssh/known_hosts
- ssh $USER@$SERVER "cd /var/www/myapp && git pull origin main && npm install && npm run build"
only:
- main
- ตั้งค่า Variables ใน GitLab Repository: เช่น
SSH_PRIVATE_KEY
เพื่อให้ GitLab CI/CD สามารถเชื่อมต่อกับเซิร์ฟเวอร์
7. การใช้ Bitbucket Pipelines สำหรับการ Deploy อัตโนมัติ
Bitbucket Pipelines ช่วยในการตั้งค่า CI/CD สำหรับการปรับใช้โปรเจค
- สร้างไฟล์
bitbucket-pipelines.yml
: ใน root directory ของโปรเจค
pipelines:
default:
- step:
name: Deploy to Server
caches:
- node
script:
- apt-get update && apt-get install -y openssh-client
- echo "$SSH_PRIVATE_KEY" > ~/.ssh/id_rsa
- chmod 600 ~/.ssh/id_rsa
- ssh-keyscan your_server_ip >> ~/.ssh/known_hosts
- ssh $USER@$SERVER "cd /var/www/myapp && git pull origin main && npm install && npm run build"
services:
- docker
- ตั้งค่า Environment Variables ใน Bitbucket Repository: เช่น
SSH_PRIVATE_KEY
เพื่อให้ Bitbucket Pipelines สามารถเชื่อมต่อกับเซิร์ฟเวอร์
สรุป
การใช้ Git ในการจัดการเวอร์ชันของโค้ดและดึงโค้ดจาก Git repository ไปยังเซิร์ฟเวอร์โดยตรงเป็นวิธีที่มีประสิทธิภาพและสะดวกสบาย โดยสามารถใช้บริการเช่น GitHub Actions, GitLab CI/CD หรือ Bitbucket Pipelines ในการจัดการกระบวนการ deploy อัตโนมัติได้อย่างมีประสิทธิภาพ.
แนะนำบทความ
Deploy Node.js ด้วย Azure App Service Plan, Azure Container Registry และ GitHub Action