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
| Env | Branch | Storefront | Admin | Backend API |
|---|---|---|---|---|
| dev | development | dev.exsport.bdt.dev | dev-admin.exsport.bdt.dev | lewat host app |
| staging | staging | stg.exsportbags.com | admin-stg.exsportbags.com | api-stg.exsportbags.com |
| prod | main | www.exsportbags.com | admin.exsportbags.com | www.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,stagingataumain(webhook:mainsaja). - Runner: runner self-hosted
[self-hosted, rumah]— tidak pernahubuntu-latest. - Concurrency: grup
deploy-<ref>,cancel-in-progress: false— deploy antre, tidak saling membunuh. - GitHub environment per ref (
main→production, selain itu nama branch-nya), yang menyalakan tab Jira Deployments untuk tiket DEF07. - Skrip per branch:
development→deploy/dev.sh,staging→deploy/staging.sh,main→deploy/prod.sh. Webhook selalu menjalankandeploy/prod.sh. - Notifikasi Slack di akhir (
if: always()) lewatdeploy/lib/slack-notify.pymemakai secret repoSLACK_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.
| Env | Host | Catatan |
|---|---|---|
| dev | satu box, rumah.bdt.dev (ubuntu@) | app di bawah /home/ubuntu/apps/, DB adalah Postgres lokal exsport_dev |
| staging | satu box, alias ex-stg-cd | keempat 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. |
| prod | host terpisah di belakang bastion exsport-prod-bastion | exsport-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.