Skip to main content
Production di-host di Cloudflare Workers — bukan VPS Hono/Beta.

Target

KomponenDomain / worker
Web + APIhttps://app.sertifikasitrainer.com
API path/api/*
Renderer browserWorker terpisah (render.sertifikasitrainer.com)

Alur deploy

1

Pastikan secret shared terisi

./thub secrets check
Key wajib: BETTER_AUTH_SECRET, DEEPSEEK_API_KEY, AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY
2

Push secrets ke Worker

./thub secrets push
Membaca .env (+ .env.production.local jika ada) → .cloudflare/worker-secrets.jsonwrangler secret bulk
3

Deploy

./thub deploy
Ketik yes untuk konfirmasi.
4

Smoke test

./thub smoke prod

Apa yang dilakukan deploy-prod.sh

  1. Migrate database (dari DATABASE_URL di .env.production.local atau legacy .env.production)
  2. Build frontend (apps/web)
  3. Deploy renderer browser worker
  4. Deploy API worker
  5. Deploy web worker
Script: scripts/deploy-prod.sh
Wrangler config: apps/api/wrangler.jsonc, apps/web/wrangler.jsonc

DATABASE_URL production

Buat .env.production.local:
DATABASE_URL=postgresql://...@ep-xxx.neon.tech/neondb?sslmode=require
Deploy script membaca file ini sebelum legacy .env.production (format catatan psql=...).

Hyperdrive

Kalau SYNC_HYPERDRIVE=1 (default), deploy mencoba sync connection string dari apps/api/.env ke Hyperdrive binding di wrangler.

Opsi manual

bun run deploy:prod
bun run smoke:prod
Dengan flag:
./scripts/deploy-prod.sh --allow-dirty   # deploy dari worktree kotor
./scripts/deploy-prod.sh --skip-build    # skip build web
SKIP_DB_MIGRATE=1 ./scripts/deploy-prod.sh
Jangan commit .cloudflare/worker-secrets.json — file ini berisi secret dan sudah di-gitignore.