Next.js
Environment variable configuration for Next.js standalone deployment
This configuration is ideal for traditional hosting, Docker deployments, or development environments. Next.js standalone mode provides flexibility for various hosting providers.
🚀 Core Application Settings
Variable | Description | Example | Required |
---|---|---|---|
BETTER_AUTH_SECRET | Secret key for Better Auth session encryption | your-32-character-secret-key | ✅ |
BETTER_AUTH_URL | Base URL of your application | https://yourdomain.com | ✅ |
NEXT_PUBLIC_APP_URL | Public URL for client-side usage | https://yourdomain.com | ✅ |
DATABASE_URL | Database connection URL | postgresql://xxx | ✅ |
BETTER_AUTH_SECRET
is a random string used for encryption and generating hashes. You can generate a 32-character secure key using the following command:
# Generate a 32-character secure key
openssl rand -base64 32
📧 Email Configuration
Variable | Description | Example | Required |
---|---|---|---|
RESEND_API_KEY | API key for Resend email service | re_123456789 | ❌ |
RESEND_AUDIENCE_ID | Audience ID for newsletter functionality | aud_123456789 | ❌ |
If you need to enable email/password login functionality that requires email verification, you need to set RESEND_API_KEY
. If you need newsletter functionality, you need to set RESEND_AUDIENCE_ID
.
If you only enable social media login without transactional emails or newsletter functionality, you don't need to set RESEND_API_KEY
and RESEND_AUDIENCE_ID
.
For more information about email configuration, see:
Configure email templates and newsletter functionality for user communication.
🔐 OAuth Provider Settings
GitHub OAuth
Variable | Description | Example | Required |
---|---|---|---|
GITHUB_CLIENT_ID | GitHub App Client ID | a629723d24c123456 | ❌ |
GITHUB_CLIENT_SECRET | GitHub App Client Secret | abc123def456ghi789jkl012 | ❌ |
If you need to enable GitHub login functionality, you need to set GITHUB_CLIENT_ID
and GITHUB_CLIENT_SECRET
.
Google OAuth
Variable | Description | Example | Required |
---|---|---|---|
GOOGLE_CLIENT_ID | Google OAuth Client ID | 123456789-abc123.apps.googleusercontent.com | ❌ |
GOOGLE_CLIENT_SECRET | Google OAuth Client Secret | GOCSPX-abc123def456ghi789 | ❌ |
If you need to enable Google login functionality, you need to set GOOGLE_CLIENT_ID
and GOOGLE_CLIENT_SECRET
.
For more information about OAuth configuration, see:
Authentication
Set up user authentication and authorization with multiple providers like OAuth, and more.
💳 Payment Integration (Stripe)
Variable | Description | Example | Required |
---|---|---|---|
STRIPE_SECRET_KEY | Stripe secret key for server-side operations | sk_test_123... or sk_live_123... | ❌ |
STRIPE_WEBHOOK_SECRET | Webhook endpoint secret for Stripe events | whsec_123456789 | ❌ |
NEXT_PUBLIC_PRICE_ID_PRO_MONTHLY | Stripe price ID for monthly pro plan | price_123456789 | ❌ |
NEXT_PUBLIC_PRICE_ID_PRO_YEARLY | Stripe price ID for yearly pro plan | price_987654321 | ❌ |
NEXT_PUBLIC_PRICE_ID_LIFETIME | Stripe price ID for lifetime plan | price_555666777 | ❌ |
For more information about payment configuration, see:
Payment
Integrate Stripe for handling payments and subscriptions with flexible pricing plans.
📁 Storage Configuration
Variable | Description | Example | Required |
---|---|---|---|
NEXT_PUBLIC_AVATARS_BUCKET_NAME | S3 bucket name for avatar uploads | my-app-avatars | ❌ |
This configuration needs to match the bucket name configured in your S3 or Cloudflare R2.
☁️ AWS S3 Configuration (if using AWS S3 services)
Variable | Description | Example | Required |
---|---|---|---|
STORAGE_REGION | S3 region | us-east-1 | ❌ |
STORAGE_ACCESS_KEY_ID | S3 AWS access key | AKXXX | ❌ |
STORAGE_SECRET_ACCESS_KEY | S3 AWS secret key | XXX | ❌ |
🌍 Cloudflare R2 Configuration (if using Cloudflare R2 services)
Variable | Description | Example | Required |
---|---|---|---|
STORAGE_REGION | Cloudflare R2 region | auto | ❌ |
STORAGE_ACCESS_KEY_ID | Cloudflare R2 access key | xxx | ❌ |
STORAGE_SECRET_ACCESS_KEY | Cloudflare R2 secret key | xxx | ❌ |
STORAGE_ENDPOINT | Cloudflare R2 endpoint | https://xxx.r2.cloudflarestorage.com | ❌ |
Storage
Set up file storage solutions for your application assets and user uploads.
📊 Analytics Configuration
Variable | Description | Example | Required |
---|---|---|---|
NEXT_PUBLIC_GOOGLE_ANALYTICS_ID | Google Analytics website ID | G-xxx | ❌ |
NEXT_PUBLIC_UMAMI_WEBSITE_ID | Umami Analytics website ID | xxx | ❌ |
NEXT_PUBLIC_UMAMI_SCRIPT_URL | Umami Analytics script URL | https://xxx.js | ❌ |
NEXT_PUBLIC_PLAUSIBLE_DOMAIN | Plausible Analytics domain | xxx | ❌ |
NEXT_PUBLIC_PLAUSIBLE_SCRIPT_URL | Plausible Analytics script URL | https://xxx.js | ❌ |
For more information about analytics configuration, see:
Analytics
Track user behavior and application performance with integrated analytics solutions.
💰 Affiliate Marketing Configuration
Variable | Description | Example | Required |
---|---|---|---|
NEXT_PUBLIC_AFFILIATE_AFFONSO_ID | Affonso affiliate ID | xxx | ❌ |
NEXT_PUBLIC_AFFILIATE_AFFONSO_ID
is the Affonso affiliate ID used to track affiliate performance.
For more information about affiliate configuration, see:
Affiliate
Integrate Affonso to handle affiliate performance tracking.
📝 Example .env File
BETTER_AUTH_SECRET=
BETTER_AUTH_URL=http://localhost:3000
NEXT_PUBLIC_APP_URL=http://localhost:3000
# ---------Database----------
DATABASE_URL=
# ---------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
# Clouflare R2
STORAGE_REGION=auto
STORAGE_ACCESS_KEY_ID=
STORAGE_SECRET_ACCESS_KEY=
STORAGE_ENDPOINT=https://xxx.r2.cloudflarestorage.com
# S3
#STORAGE_REGION=us-east-1
#STORAGE_ACCESS_KEY_ID=
#STORAGE_SECRET_ACCESS_KEY=
# ---------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
Development Environment
- Use
http://localhost:3000
for local URLs - Use Stripe test keys (starting with
sk_test_
) - OAuth redirect URIs should point to localhost
Production Environment
- Use your actual domain for all URLs
- Use Stripe live keys (starting with
sk_live_
) - Configure OAuth providers with production redirect URIs
- Ensure all secrets are properly secured and rotated regularly
🔧 Next Steps
After setting up your environment variables:
- Test authentication - Verify OAuth providers work correctly
- Test email - Confirm email sending works with your provider
- Deploy - Deploy to your chosen hosting platform
Your Next.js application is now ready for development and deployment! 🎉