Auto-deploy via Git Webhook
Bila ada git push ke Gitea, Gitea hantar webhook ke server. Server tarik kod
terbaru dan jalankan docker compose up --build -d secara automatik.
Aliran: push → Gitea webhook → webhook listener (port 9000) → deploy.sh
1. Setup di server production (sekali sahaja)
Andaikan repo berada di /opt/myansuran (laraskan path dalam hooks.json
dan myansuran-webhook.service jika berbeza).
# a) Pasang webhook listener
sudo apt-get update && sudo apt-get install -y webhook
# b) Pastikan user 'deploy' wujud & ahli group docker (boleh tukar nama user)
sudo useradd -m -G docker deploy 2>/dev/null || sudo usermod -aG docker deploy
# c) Pastikan skrip executable
chmod +x /opt/myansuran/deploy/deploy.sh
# d) Set secret rahsia dalam hooks.json (ganti GANTI_DENGAN_SECRET_RAHSIA)
# Jana satu secret kuat:
openssl rand -hex 32
# Lepas tu edit /opt/myansuran/deploy/hooks.json -> letak nilai itu pada "secret"
# e) Pasang service systemd
sudo cp /opt/myansuran/deploy/myansuran-webhook.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable --now myansuran-webhook
sudo systemctl status myansuran-webhook
2. Setup webhook di Gitea
Repo → Settings → Webhooks → Add Webhook → Gitea:
- Target URL:
http://SERVER_IP:9000/hooks/myansuran-deploy - HTTP Method:
POST - Content Type:
application/json - Secret: secret SAMA seperti dalam
hooks.json - Trigger: Push events sahaja
- Branch filter:
main
Klik Test Delivery untuk uji.
3. Uji manual
# Jalankan deploy terus tanpa webhook (untuk debug)
/opt/myansuran/deploy/deploy.sh
# Lihat log webhook
sudo journalctl -u myansuran-webhook -f
Nota keselamatan
- Port
9000hanya perlu dicapai oleh Gitea. Hadkan dengan firewall:sudo ufw allow from <IP_GITEA> to any port 9000 proto tcp - Atau letak di belakang Nginx/Apache reverse proxy dengan HTTPS.
- Signature HMAC-SHA256 menghalang sesiapa tanpa secret daripada trigger deploy.
Tukar branch
Default deploy branch ialah main. Untuk branch lain, set dalam service:
ExecStart=... tambah Environment=BRANCH=staging, dan tukar refs/heads/main
dalam hooks.json kepada branch berkenaan.