Untuk membuat script otomatis CI/CD dari GitHub ke DigitalOcean, kita bisa menggunakan GitHub Actions bersama dengan DigitalOcean. Berikut adalah langkah-langkah yang perlu diikuti:
- Persiapkan Droplet di DigitalOcean: Pastikan Anda memiliki droplet yang sudah disiapkan di DigitalOcean.
- Install Nginx dan Node.js di Droplet: Jika Anda menggunakan aplikasi Node.js, install Nginx dan Node.js di droplet Anda. Gunakan perintah berikut: sudo apt update sudo apt install nginx sudo apt install nodejs sudo apt install npm
Buat Kunci SSH: Buat kunci SSH untuk akses dari GitHub ke droplet Anda.
ssh-keygen -t rsa -b 4096 -C "[email protected]"
- Tambahkan Kunci Publik ke DigitalOcean: Salin isi file
~/.ssh/id_rsa.pubdan tambahkan ke bagian “SSH Keys” di DigitalOcean. - Tambahkan Kunci Privat ke GitHub: Tambahkan isi file
~/.ssh/id_rsake Secrets GitHub (Settings -> Secrets) dengan namaDO_SSH_KEY. - Buat GitHub Action Workflow: Buat file
deploy.ymldi folder.github/workflowsdi repository Anda.
Berikut contoh isi file deploy.yml:
name: CI/CD Pipeline
on:
push:
branches:
- main
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Setup SSH
run: |
mkdir -p ~/.ssh
echo "${{ secrets.DO_SSH_KEY }}" > ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa
ssh-keyscan -H 123.45.67.89 >> ~/.ssh/known_hosts
- name: Copy files via SCP
run: scp -r -o StrictHostKeyChecking=no ./* [email protected]:/path/to/your/project
- name: SSH and deploy
run: ssh [email protected] << 'EOF'
cd /path/to/your/project
npm install
pm2 restart all
exit
EOF
Gantilah 123.45.67.89 dengan alamat IP droplet Anda dan /path/to/your/project dengan path yang sesuai di droplet Anda.
- Instal dan Konfigurasi PM2 di Droplet: Jika belum diinstal, instal PM2 untuk manajemen proses Node.js: sudo npm install -g pm2 pm2 startup
Kemudian, jalankan aplikasi Anda menggunakan PM2:
pm2 start app.js --name "myapp" pm2 save
Dengan langkah-langkah ini, setiap kali Anda mendorong perubahan ke cabang main di GitHub, workflow GitHub Actions akan secara otomatis mengirimkan kode Anda ke droplet di DigitalOcean dan memulai ulang aplikasi Node.js menggunakan PM2.