Skip to main content
Production AI Mentor di-host di Cloudflare Workers (app.sertifikasitrainer.com). Cloudflare juga menyediakan R2 (file storage) dan Hyperdrive (koneksi Postgres ke Neon).
Logo Cloudflare
Dashboard: dash.cloudflare.com
Docs: developers.cloudflare.com

Apa yang dipakai di project ini

ProdukFungsi di AI Mentor
WorkersAPI Hono + static web + renderer
R2Upload dokumen, foto trainer, asset
HyperdrivePool koneksi ke Neon Postgres
DNSapp., docs., assets. subdomain
Config Wrangler: apps/api/wrangler.jsonc, apps/web/wrangler.jsonc

1. Buat API token (deploy & CI)

1

Buka API Tokens

Dashboard → My ProfileAPI TokensCreate Token
2

Pilih template atau custom

Untuk deploy script, permission minimal:
  • Account → Workers Scripts → Edit
  • Account → Workers R2 Storage → Edit
  • Account → Workers KV → Edit (jika dipakai)
  • Account → Hyperdrive → Edit
  • Zone → Workers Routes → Edit (custom domain)
3

Simpan ke env

# Untuk ./thub deploy / wrangler lokal
CLOUDFLARE_API_TOKEN=...
CLOUDFLARE_ACCOUNT_ID=...   # Dashboard → Workers → Overview (sidebar kanan)
Untuk GitHub Actions: simpan sebagai repository secrets (lihat CI/CD).

2. Workers & custom domain

Deploy via ./thub deploy atau scripts/deploy-prod.sh:
  1. Build frontend (apps/web)
  2. Deploy worker API + web + renderer
  3. Route app.sertifikasitrainer.com → worker
URL production (FRONTEND_URL, BETTER_AUTH_URL, dll.) sudah di vars pada wrangler.jsonc — bukan secret.

3. R2 object storage

R2 kompatibel S3. Project memakai AWS SDK dengan endpoint R2.
1

Aktifkan R2

Dashboard → R2Overview → buat bucket (mis. trainerhub)
2

Buat API token R2

R2 → Manage R2 API Tokens → Create token
Permission: Object Read & Write (scope ke bucket jika perlu)
3

Isi .env

AWS_ACCESS_KEY_ID=<Access Key ID dari token>
AWS_SECRET_ACCESS_KEY=<Secret Access Key>
AWS_REGION=auto
AWS_S3_BUCKET=trainerhub
AWS_S3_ENDPOINT=https://<ACCOUNT_ID>.r2.cloudflarestorage.com
R2_PUBLIC_URL=https://assets.sertifikasitrainer.com
4

Public access (opsional)

Jika asset harus diakses browser langsung, aktifkan custom domain R2 atau public bucket policy. Docs: R2 public buckets.

4. Hyperdrive (Neon)

Hyperdrive mem-pool koneksi Postgres dari Worker ke Neon.
1

Buat Hyperdrive config

npx wrangler hyperdrive create trainerhub-neon \
  --connection-string="postgresql://user:pass@ep-xxx.neon.tech/db?sslmode=require"
Atau lewat Dashboard → Hyperdrive → Create configuration.
2

Binding di wrangler

ID Hyperdrive masuk ke hyperdrive binding di apps/api/wrangler.jsonc.
3

Sync saat deploy

Script deploy dengan SYNC_HYPERDRIVE=1 (default) mencoba sync connection string dari merged env.
Docs: Hyperdrive getting started

5. Wrangler CLI lokal

bun add -g wrangler   # atau npx wrangler
wrangler login        # alternatif: CLOUDFLARE_API_TOKEN
wrangler whoami

Troubleshooting

MasalahSolusi
Deploy 403Token kurang permission Workers/R2
Upload gagal 413Nginx/client body limit — backend cap MAX_FILE_SIZE_MB
DB timeout di WorkerCek Hyperdrive binding + DATABASE_URL Neon pooled
Secret tidak ke Worker./thub secrets push setelah ./thub env merge --prod