Skip to content

Deployment

Platform

Semua apps deploy ke Cloudflare:

AppPlatformURL Pattern
apps/webCloudflare Pageshttps://xprivate.pages.dev
apps/apiCloudflare Workershttps://api.xprivate.workers.dev
apps/docsCloudflare Pageshttps://docs.xprivate.pages.dev

Wrangler Configuration

Setiap app punya wrangler.jsonc sendiri. File ini adalah JSON with comments.

apps/api/wrangler.jsonc

jsonc
{
  "$schema": "node_modules/wrangler/config-schema.json",
  "name": "xprivate-api",
  "main": "src/index.ts",
  "compatibility_date": "2025-04-01",
  "compatibility_flags": ["nodejs_compat"],
  "d1_databases": [
    {
      "binding": "DB",
      "database_name": "xprivate-db",
      "database_id": "..."
    }
  ],
  "r2_buckets": [
    {
      "binding": "STORAGE_BUCKET",
      "bucket_name": "xprivate-storage"
    }
  ]
}

apps/web/wrangler.jsonc

jsonc
{
  "$schema": "node_modules/wrangler/config-schema.json",
  "name": "xprivate-web",
  "compatibility_date": "2025-04-01",
  "pages_build_output_dir": "dist"
}

apps/docs/wrangler.jsonc

jsonc
{
  "$schema": "node_modules/wrangler/config-schema.json",
  "name": "xprivate-docs",
  "compatibility_date": "2025-04-01",
  "pages_build_output_dir": ".vitepress/dist"
}

Secrets

Secrets di-set via wrangler secret put atau Cloudflare dashboard. Jangan commit secrets ke repo.

SecretAppPurpose
BETTER_AUTH_SECRETapiSession signing
GOOGLE_CLIENT_IDapiGoogle OAuth
GOOGLE_CLIENT_SECRETapiGoogle OAuth
RESEND_API_KEYapiEmail sending
RESEND_FROM_EMAILapiFrom address email

Local development menggunakan .dev.vars (sudah di-gitignore).

CI/CD

Pipeline yang direkomendasikan:

  1. Build: pnpm build di root
  2. Test: pnpm test (jika ada)
  3. Deploy API: cd apps/api && wrangler deploy
  4. Deploy Web: cd apps/web && wrangler pages deploy dist
  5. Deploy Docs: cd apps/docs && wrangler pages deploy .vitepress/dist

Prefer GitHub Actions dengan cloudflare/wrangler-action.

Environment Strategy

EnvironmentD1 DBR2 BucketPurpose
Local--local D1emulated atau skipDevelopment
Stagingxprivate-db-stagingxprivate-storage-stagingPre-prod testing
Productionxprivate-dbxprivate-storageLive

Setiap environment punya wrangler config terpisah atau gunakan wrangler deploy --env.

worker-configuration.d.ts

File ini di-generate otomatis oleh wrangler types. Jangan commit file ini — sudah di-gitignore. Root prepare script harus menjalankan wrangler types setelah pnpm install.

R2 Storage

  • @packages/storage menggunakan R2 bindings untuk upload photo evidence dan payment proofs.
  • Validasi file: image only, max 5MB.
  • Public access ke R2 objects via signed URLs atau Cloudflare Images — jangan expose raw R2 URLs langsung.

Email (Resend)

  • Resend API key disimpan sebagai Cloudflare secret.
  • Email sending logic di @packages/email.
  • Magic link email template dikelola di sini.

Released under the MIT License.