Skip to content

Deployment

Platform

Semua apps deploy ke Cloudflare:

AppPlatformURL Pattern
apps/webCloudflare Worker + ASSETShttps://xprivate.tigor.dev
apps/docsCloudflare Pageshttps://docs.xprivate.pages.dev

apps/web adalah Cloudflare Worker dengan ASSETS binding. SvelteKit app di-render server-side dan static assets diserve via ASSETS binding. API ditangani oleh Worker script yang di-generate oleh @sveltejs/adapter-cloudflare.

Wrangler Configuration

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

apps/web/wrangler.jsonc

jsonc
{
  "$schema": "node_modules/wrangler/config-schema.json",
  "name": "xprivate-web",
  "main": "dist/index.js",
  "compatibility_date": "2026-05-10",
  "compatibility_flags": ["nodejs_compat"],
  "observability": {
    "logs": { "enabled": true, "head_sampling_rate": 1 }
  },
  "assets": {
    "directory": "dist",
    "binding": "ASSETS",
    "not_found_handling": "404-page"
  },
  "env": {
    "development": { ... },
    "production": { ... }
  }
}

Build step: vite build (via @sveltejs/adapter-cloudflare) menghasilkan dist/index.js sebagai Worker entrypoint dan static assets di dist/.

apps/docs/wrangler.jsonc

jsonc
{
  "$schema": "node_modules/wrangler/config-schema.json",
  "name": "xprivate-docs",
  "compatibility_date": "2026-05-11",
  "pages_build_output_dir": ".vitepress/dist",
}

Secrets

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

SecretAppPurpose
DATABASE_URLwebNeon Postgres connection
BETTER_AUTH_SECRETwebSession signing
GOOGLE_CLIENT_IDwebGoogle OAuth
GOOGLE_CLIENT_SECRETwebGoogle OAuth
PLUNK_API_KEYwebEmail sending
PLUNK_FROMwebFrom 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 Web: cd apps/web && wrangler deploy --env development
  4. Deploy Docs: cd apps/docs && wrangler pages deploy .vitepress/dist

Prefer GitHub Actions dengan cloudflare/wrangler-action.

Environment Strategy

EnvironmentNeon PostgresR2 BucketPurpose
Locallocal/dev Neon projectemulated 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 (Plunk)

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

Released under the MIT License.