Environment
Kunci .env di akar repo yang dipakai marketing dan docs.
Semua aplikasi memuat env dari akar repositori (.env / .env.example). Salin .env.example ke .env lalu isi nilainya. Turbo mengekspos kunci URL publik lewat globalEnv.
URL publik
| Kunci | Default lokal | Dipakai oleh |
|---|---|---|
NEXT_PUBLIC_APP_URL | http://localhost:3001 | CORS / origin paket sisa (arahkan ke marketing) |
NEXT_PUBLIC_SAAS_URL | http://localhost:3001 | Sama dengan app URL setelah dasbor dihapus |
NEXT_PUBLIC_MARKETING_URL | http://localhost:3001 | Landing, legal, API, checkout |
NEXT_PUBLIC_DOCS_URL | http://localhost:3002 | Situs docs ini |
NODE_ENV di .env adalah development untuk kerja lokal. Build produksi menyetel NODE_ENV=production di skrip build aplikasi sebelum dotenv supaya Next tidak mewarisi development dari .env.
Database
| Kunci | Catatan |
|---|---|
DATABASE_URL | Prisma (pooled) |
DIRECT_URL | Prisma migrate / introspect |
POSTGRES_PORT | Port host Docker Compose |
Panduan setup: Database.
Auth
| Kunci | Catatan |
|---|---|
BETTER_AUTH_SECRET | Minimal 32 karakter |
BETTER_AUTH_URL | Base URL Better Auth |
GOOGLE_CLIENT_ID | Google OAuth (wajib) |
GOOGLE_CLIENT_SECRET | Google OAuth (wajib) |
GITHUB_CLIENT_ID | GitHub OAuth (opsional) |
GITHUB_CLIENT_SECRET | GitHub OAuth (opsional) |
APPLE_CLIENT_ID | Apple Sign In Service ID (opsional) |
APPLE_TEAM_ID | Apple Team ID (opsional) |
APPLE_KEY_ID | Apple Key ID (opsional) |
APPLE_PRIVATE_KEY | Kunci privat .p8 Apple; pakai \n untuk baris baru (opsional) |
Pembayaran dan email
| Kunci | Catatan |
|---|---|
MAYAR_API_KEY | Kunci API dasbor Mayar |
MAYAR_WEBHOOK_SECRET | Secret bersama untuk {MARKETING_URL}/api/webhooks/mayar |
MAYAR_PRODUCT_ID_SOLO | ID produk payment link Mayar untuk Solo |
MAYAR_PRODUCT_ID_PRO | ID produk payment link Mayar untuk Pro |
MAYAR_PAYMENT_LINK_SOLO | URL checkout hosted untuk Solo |
MAYAR_PAYMENT_LINK_PRO | URL checkout hosted untuk Pro |
RESEND_KEY | Email transaksional — lihat Resend |
RESEND_EMAIL_DOMAIN | Alamat pengirim (default lokal [email protected]) — lihat Email |
Panduan setup: Pembayaran, Checkout storefront, dan Email.
Opsional
| Kunci | Catatan |
|---|---|
NEXT_PUBLIC_ENABLE_SENTRY | Feature flag Sentry (false menonaktifkan) — lihat Monitoring |
NEXT_PUBLIC_SENTRY_DSN | DSN Sentry (kosong menonaktifkan) — lihat Sentry |
SENTRY_AUTH_TOKEN | Opsional. Upload source map saat build — lihat Sentry |
NEXT_PUBLIC_ENABLE_POSTHOG | Feature flag PostHog (false menonaktifkan) — lihat Analytics |
NEXT_PUBLIC_POSTHOG_PROJECT_TOKEN | Token proyek PostHog (kosong menonaktifkan) — lihat PostHog |
NEXT_PUBLIC_POSTHOG_HOST | Host API PostHog (default https://us.i.posthog.com; EU: https://eu.i.posthog.com) |
AI_GATEWAY_API_KEY | Kunci Vercel AI Gateway untuk chat @repo/ai — lihat AI |
OPENAI_API_KEY | Dicadangkan untuk penggunaan OpenAI langsung |
SMTP_HOST / SMTP_PORT | SMTP lokal (Mailpit) — lihat Mailpit; belum dihubungkan ke sendEmail |
SMTP_USER / SMTP_PASS | Auth SMTP opsional untuk Nodemailer |
MAILPIT_URL | UI web Mailpit (default http://localhost:8025) |
S3_REGION | Region R2 (biasanya auto) |
S3_BUCKET | Nama bucket R2 |
S3_ENDPOINT | https://<ACCOUNT_ID>.r2.cloudflarestorage.com |
S3_ACCESS_KEY_ID | Access key token API R2 |
S3_SECRET_ACCESS_KEY | Secret key token API R2 |
S3_PUBLIC_URL | Opsional. Base URL publik (https://pub-….r2.dev atau domain kustom) untuk /api/storage/public |
Setup Cloudflare R2
Panduan lengkap: Storage dan Cloudflare R2.
- Buat bucket R2 privat dan token API dengan Object Read & Write.
- Atur CORS bucket agar browser bisa
PUT/GETdari origin marketing (NEXT_PUBLIC_MARKETING_URL), misalnya izinkanPUT,GET,HEAD, danContent-Type. - Biarkan bucket privat; gunakan signed URL berumur pendek dari
/api/storage. SetS3_PUBLIC_URLhanya jika Anda sengaja mengekspos objek lewat r2.dev atau domain kustom.
Divalidasi di packages/env (envSchema di server, clientEnvSchema untuk NEXT_PUBLIC_* di browser).