Skip to content

Environment dan deploy

Tiga environment — dev, staging, produksi — masing-masing diberi makan oleh satu branch git. Sebuah push men-deploy dirinya sendiri.

Cara halaman ini diverifikasi

Dibaca pada 2026-09-15 dari .github/workflows/deploy.yml dan skrip deploy/ di setiap repo yang bisa di-deploy, dan fakta server dari skill exsport-repos.

Branch → environment

EnvBranchStorefrontAdminBackend API
devdevelopmentdev.exsport.bdt.devdev-admin.exsport.bdt.devlewat host app
stagingstagingstg.exsportbags.comadmin-stg.exsportbags.comapi-stg.exsportbags.com
prodmainwww.exsportbags.comadmin.exsportbags.comwww.exsportbags.com/gapi/graphql

Repo webhook adalah single-branch, jadi ia hanya punya produksi. Path backend produksi adalah /gapi (bukan /be-api); api.exsportbags.com tidak resolve. Halaman storefront prod di-render di client, jadi mengambil HTML-nya tidak menampilkan harga — query /gapi/graphql (query publik tidak butuh auth) atau jalankan browser untuk mengaudit data live.

Auto-deploy saat push

Setiap repo yang bisa di-deploy (backend, storefront, admin, webhook) punya deploy.yml yang sama:

  • Trigger: push ke development, staging atau main (webhook: main saja).
  • Runner: runner self-hosted [self-hosted, rumah] — tidak pernah ubuntu-latest.
  • Concurrency: grup deploy-<ref>, cancel-in-progress: false — deploy antre, tidak saling membunuh.
  • GitHub environment per ref (mainproduction, selain itu nama branch-nya), yang menyalakan tab Jira Deployments untuk tiket DEF07.
  • Skrip per branch: developmentdeploy/dev.sh, stagingdeploy/staging.sh, maindeploy/prod.sh. Webhook selalu menjalankan deploy/prod.sh.
  • Notifikasi Slack di akhir (if: always()) lewat deploy/lib/slack-notify.py memakai secret repo SLACK_WEBHOOK_URL; ia tidak berbuat apa-apa kalau secret tidak diset dan tidak pernah menggagalkan job.

Deployer webhook lama d.bdt.dev dinonaktifkan untuk keempat repo. Pantau run di tab Actions repo, dan tetap konfirmasi bundle yang di-serve atau API-nya saat itu penting — sebuah deploy bisa gagal.

Di mana setiap environment berjalan

Diamati 2026-08-27; alias SSH ada di ~/.ssh/config.

EnvHostCatatan
devsatu box, rumah.bdt.dev (ubuntu@)app di bawah /home/ubuntu/apps/, DB adalah Postgres lokal exsport_dev
stagingsatu box, alias ex-stg-cdkeempat app di bawah /home/ex-stg/apps/ pada PM2 (storefront :3011, admin :3012, backend :3013, webhook :3014), DB exsport_stg. Port staging berbeda dari port Mac lokal.
prodhost terpisah di belakang bastion exsport-prod-bastionexsport-prod-be (backend di /opt/backend, artifact hasil build tanpa checkout git), -fe, -webhook, -db, -proxy. Produksi live — read-only kecuali Eris bilang lain.

Setup AWS Pulumi

def-exsport-pulumi juga mendefinisikan setup AWS lengkap (ECS, ALB, RDS, ElastiCache, ECR, S3, SNS) di tujuh stack. Itu tidak sama dengan host serving di atas — baca def-exsport-pulumi/stacks/ sebelum menganggapnya sebagai path live. Lihat halaman repo Pulumi.

Catatan soal next start

Di admin dan storefront, typescript adalah runtime dependency karena next start memuat next.config.ts saat boot. Simpan ia di dependencies atau prod crash saat start.