LogoNEXTDEVKIT Docs

Cloudflare Workers

Environment variable configuration for Cloudflare Workers deployment

This configuration is ideal for edge computing with global distribution and cost-effective scaling. Cloudflare Workers provide excellent performance with built-in CDN and edge computing capabilities.

🚀 Core Application Settings

VariableDescriptionExampleRequired
BETTER_AUTH_SECRETSecret key for Better Auth session encryptionyour-32-character-secret-key
BETTER_AUTH_URLBase URL of your applicationhttps://yourdomain.com
NEXT_PUBLIC_APP_URLPublic URL for client-side usagehttps://yourdomain.com

BETTER_AUTH_SECRET is a random string used for encryption and generating hashes. You can generate a secure 32-character key using the following command:

# Generate a secure 32-character key
openssl rand -base64 32

Cloudflare Workers and Next.js core configurations are essentially identical, except for database configuration, because Cloudflare Workers has built-in D1 database connection, so there's no need to configure DATABASE_URL.

If you need to use PostgreSQL or other databases, you need to configure DATABASE_URL and modify the related code. You can refer to the configuration in Next.js deployment.

For more D1 database configuration, please refer to:

Cloudflare D1

Set up your Cloudflare D1 database with Drizzle ORM.

📧 Email Configuration

VariableDescriptionExampleRequired
RESEND_API_KEYAPI key for Resend email servicere_123456789
RESEND_AUDIENCE_IDAudience ID for newsletter functionalityaud_123456789

If you need to enable password login functionality, which requires sending emails for email verification, you need to set RESEND_API_KEY. If you need to enable newsletter functionality, you need to set RESEND_AUDIENCE_ID.

If you only enable social media login and don't need transactional emails or newsletter functionality, you don't need to set RESEND_API_KEY and RESEND_AUDIENCE_ID.

For more email-related configuration, please refer to:

Email

Configure email templates and newsletter functionality for user communication.

🔐 OAuth Provider Settings

GitHub OAuth

VariableDescriptionExampleRequired
GITHUB_CLIENT_IDGitHub App Client IDa629723d24c123456
GITHUB_CLIENT_SECRETGitHub App Client Secretabc123def456ghi789jkl012

If you need to enable GitHub login functionality, you need to set GITHUB_CLIENT_ID and GITHUB_CLIENT_SECRET.

Google OAuth

VariableDescriptionExampleRequired
GOOGLE_CLIENT_IDGoogle OAuth Client ID123456789-abc123.apps.googleusercontent.com
GOOGLE_CLIENT_SECRETGoogle OAuth Client SecretGOCSPX-abc123def456ghi789

If you need to enable Google login functionality, you need to set GOOGLE_CLIENT_ID and GOOGLE_CLIENT_SECRET.

For more OAuth-related configuration, please refer to:

Authentication

Set up user authentication and authorization with support for multiple providers including OAuth.

💳 Payment Integration (Stripe)

VariableDescriptionExampleRequired
STRIPE_SECRET_KEYStripe secret key for server-side operationssk_test_123... or sk_live_123...
STRIPE_WEBHOOK_SECRETWebhook endpoint secret for Stripe eventswhsec_123456789
NEXT_PUBLIC_PRICE_ID_PRO_MONTHLYStripe price ID for monthly pro planprice_123456789
NEXT_PUBLIC_PRICE_ID_PRO_YEARLYStripe price ID for yearly pro planprice_987654321
NEXT_PUBLIC_PRICE_ID_LIFETIMEStripe price ID for lifetime planprice_555666777

For more payment-related configuration, please refer to:

Payment

Integrate Stripe to handle payments and subscriptions with flexible pricing plans.

📁 Storage Configuration

VariableDescriptionExampleRequired
NEXT_PUBLIC_AVATARS_BUCKET_NAMES3 bucket name for avatar uploadsmy-app-avatars

This configuration should match the bucket name configured in your S3 or Cloudflare R2.

🌍 Cloudflare R2 Configuration

VariableDescriptionExampleRequired
STORAGE_REGIONCloudflare R2 regionauto
STORAGE_ACCESS_KEY_IDCloudflare R2 access keyxxx
STORAGE_SECRET_ACCESS_KEYCloudflare R2 secret keyxxx
STORAGE_ENDPOINTCloudflare R2 endpointhttps://xxx.r2.cloudflarestorage.com

Storage

Set up file storage solutions for your application assets and user uploads.

📊 Analytics Configuration

VariableDescriptionExampleRequired
NEXT_PUBLIC_GOOGLE_ANALYTICS_IDGoogle Analytics website IDG-xxx
NEXT_PUBLIC_UMAMI_WEBSITE_IDUmami Analytics website IDxxx
NEXT_PUBLIC_UMAMI_SCRIPT_URLUmami Analytics script URLhttps://xxx.js
NEXT_PUBLIC_PLAUSIBLE_DOMAINPlausible Analytics domainxxx
NEXT_PUBLIC_PLAUSIBLE_SCRIPT_URLPlausible Analytics script URLhttps://xxx.js

For more analytics-related configuration, please refer to:

Analytics

Track user behavior and application performance with integrated analytics solutions.

💰 Affiliate Marketing Configuration

VariableDescriptionExampleRequired
NEXT_PUBLIC_AFFILIATE_AFFONSO_IDAffonso affiliate IDxxx

NEXT_PUBLIC_AFFILIATE_AFFONSO_ID is the Affonso affiliate ID used to track promotional effectiveness.

For more affiliate-related configuration, please refer to:

Affiliate

Integrate Affonso to handle affiliate tracking.

📝 .env File Example

BETTER_AUTH_SECRET=
BETTER_AUTH_URL=http://localhost:3000
NEXT_PUBLIC_APP_URL=http://localhost:3000

# ---------Email----------
RESEND_API_KEY=
RESEND_AUDIENCE_ID=

# ---------Auth----------
GITHUB_CLIENT_ID=
GITHUB_CLIENT_SECRET=
GOOGLE_CLIENT_ID=
GOOGLE_CLIENT_SECRET=

# ---------Payment----------
STRIPE_SECRET_KEY=sk_test_
STRIPE_WEBHOOK_SECRET=whsec_
NEXT_PUBLIC_PRICE_ID_PRO_MONTHLY=price_
NEXT_PUBLIC_PRICE_ID_PRO_YEARLY=price_
NEXT_PUBLIC_PRICE_ID_LIFETIME=price_

# ---------Storage----------

NEXT_PUBLIC_AVATARS_BUCKET_NAME=nextdevkit-avatars

# Cloudflare R2
STORAGE_REGION=auto
STORAGE_ACCESS_KEY_ID=
STORAGE_SECRET_ACCESS_KEY=
STORAGE_ENDPOINT=https://xxx.r2.cloudflarestorage.com

# ---------Analytics----------

NEXT_PUBLIC_GOOGLE_ANALYTICS_ID=G-xxx

# Umami Analytics
NEXT_PUBLIC_UMAMI_WEBSITE_ID=
NEXT_PUBLIC_UMAMI_SCRIPT_URL=

# Plausible Analytics
NEXT_PUBLIC_PLAUSIBLE_DOMAIN=
NEXT_PUBLIC_PLAUSIBLE_SCRIPT_URL=

# ---------Affiliate----------
NEXT_PUBLIC_AFFILIATE_AFFONSO_ID=

🛠️ Development vs Production Environment

Development Environment

  • Use local URLs with http://localhost:3000
  • Use Stripe test keys (starting with sk_test_)
  • OAuth redirect URIs should point to localhost

Production Environment

  • Use actual domain names for all URLs
  • Use Stripe production keys (starting with sk_live_)
  • Configure production redirect URIs for OAuth providers
  • Ensure all secrets are properly secured and rotated regularly

Production environment variables only need to be configured once, either in .env.production or in wrangler.jsonc.

If you are deploying locally, you can choose to use .env.production directly without configuring it in wrangler.jsonc.

If you are a team that needs to set up a pipeline for CICD deployment, you can consider putting the production environment variables in wrangler.jsonc and then using secrets management like GitHub secrets to deploy the secrets.

For convenience, I usually create a .env.production file locally, put the production environment variables directly in it, and run the deploy command without configuring environment variables in wrangler.jsonc.