Branch dan workflow
| Branch | Workflow | Runner | Target | Binary |
|---|---|---|---|---|
v3 | deploy_production.yml | self-hosted production | Produksi | dazo |
staging | deploy_staging.yml | self-hosted staging | Staging | dazodev |
Branch produksi adalah v3, bukan main. main ada di repo tapi tidak digunakan untuk deploy.
Produksi — dua job paralel
deploy_production.yml menjalankan dua job terpisah di host berbeda:
deploy_api — host api
cd $PROJECT_DIR_PRODUCTION
git fetch --all
git reset --hard origin/v3 # DESTRUCTIVE — perubahan server hilang
go mod tidy
go build -o dazo main.go # binary: dazo
# restart systemd
sudo systemctl restart dazo # atau start jika belum jalan
sudo systemctl status dazo --no-pagerdeploy_cron — host cron
cd $PROJECT_DIR_CRON_PRODUCTION
git fetch --all
git reset --hard origin/v3
# restart PM2 workers (loop dari vars.SERVICE_NAME_PROD)
for cron_name in "${cron[@]}"; do
if sudo pm2 describe "$cron_name" > /dev/null 2>&1; then
sudo pm2 restart "$cron_name"
else
sudo pm2 start "$PROJECT_DIR_PRODUCTION/engine/$cron_name.js" --name "$cron_name"
fi
doneStaging — satu job
deploy_staging.yml menjalankan di runner self-hosted, staging:
cd $PROJECT_DIR_DEVELOPMENT
git fetch --all
git reset --hard origin/staging
go mod tidy
go build -o dazodev main.go # binary: dazodev
cd engine/ && npm i # Node engine di mesin yang sama
sudo systemctl restart dazodev # systemd
# PM2 restart loop (vars.SERVICE_NAME_DEV)Di staging, Go API + Node engine satu mesin.
Apa yang dilakukan workflow (ringkasan)
| Langkah | staging | produksi (api) | produksi (cron) |
|---|---|---|---|
git fetch --all + reset --hard | ✅ | ✅ | ✅ |
go build | ✅ → dazodev | ✅ → dazo | ❌ |
npm i (engine) | ✅ | ❌ | ❌ |
| Restart systemd | ✅ dazodev | ✅ dazo | ❌ |
| Restart PM2 | ✅ | ❌ | ✅ |
Aturan operasi git
- Jangan commit, push, atau merge tanpa diminta eksplisit
- Pisahkan commit pembenahan dari commit fitur
- Sebelum push ke
v3, pastikango builddango vetlolos lokal - Jangan ubah
JWT_SECRETtanpa koordinasi dengandazoapp
Setup server — yang tidak terlihat dari repo
Dua blocker yang membuat service gagal jalan di server baru:
handlers/environtment.go— gitignored. Harus dibuat manual dengan konstanta produksi. Lihat Environment..env— wajibGO_ENV=production+ seluruh kredensial.JWT_SECRETharus sama dengandazoapp.- systemd unit —
dazo.service(produksi) /dazodev.service(staging) harus terpasang. Tidak ada template di repo. - PM2 service — semua
cron_*.jsharus pernah di-start manual sekali untuk menghindari bug path first-start.
Setelah deploy
Verifikasi cepat:
sudo systemctl status dazo— pastikanactive (running)curl http://localhost:8081/— harus balas{"Dazo":"App"}- Cek
logs/— cari error Zap - Test satu endpoint ter-auth (mis.
POST /v1/chat_listdengan Bearer token) - Verifikasi PM2:
pm2 status— semuacron_*harusonline
Checklist sebelum push ke v3
-
go buildlolos lokal -
go vet ./...bersih - Tidak ada
log.Println/ debug tambahan di diff - Tidak ada perubahan
handlers/environtment.go(gitignored — tidak akan ter-deploy) - Tidak ada perubahan
JWT_SECRETatau payload token tanpa koordinasidazoapp - Tidak ada perubahan URL service (
EngineUri, dll.) tanpa koordinasi tim - Commit message jelas, terpisah antara fitur dan pembenahan
Langkah berikutnya
- Detail workflow GitHub Actions? Baca CI/CD & GitHub Actions — dua workflow, self-hosted runner, systemd + PM2.
- Setup environment? Baca Environment —
.env+handlers/environtment.go. - Cara jalankan lokal? Baca Local Development.