Files
linkforty/infra/fly.io/.env.production.example
2026-07-31 11:47:31 +09:00

144 lines
5.1 KiB
Bash

# LinkForty Production Environment Configuration
#
# This file shows all environment variables needed for production deployment on Fly.io
#
# SECURITY WARNING: Never commit actual secrets to version control!
# Use `fly secrets set` to configure these values securely.
#
# Example:
# fly secrets set DATABASE_URL="postgresql://..."
# fly secrets set REDIS_URL="rediss://..."
# ============================================================================
# REQUIRED: Database Configuration
# ============================================================================
# PostgreSQL connection string
# Format: postgresql://username:password@host:port/database?sslmode=require
#
# For Fly Postgres (automatically set by `fly postgres attach`):
# postgresql://user:pass@appname.internal:5432/dbname?sslmode=require
#
# For external providers (Supabase, Neon, AWS RDS):
# Use connection string from provider dashboard
#
# IMPORTANT: Always include ?sslmode=require for production
DATABASE_URL="postgresql://username:password@host:5432/linkforty?sslmode=require"
# ============================================================================
# OPTIONAL BUT RECOMMENDED: Redis Cache
# ============================================================================
# Redis connection string (TLS encrypted)
# Format: rediss://default:password@host:6379
#
# For Upstash Redis (via Fly.io):
# Run: fly redis create
# Use the REDIS_URL provided
#
# IMPORTANT: Use rediss:// (double 's') for TLS encryption in production
#
# If not set, LinkForty will work but without caching (slower, higher DB load)
REDIS_URL="rediss://default:password@host:6379"
# ============================================================================
# APPLICATION CONFIGURATION
# ============================================================================
# Environment mode (should always be "production" for deployed apps)
NODE_ENV="production"
# Server port (default: 8080, must match fly.toml internal_port)
PORT="8080"
# ============================================================================
# CORS CONFIGURATION
# ============================================================================
# Allowed origins for CORS (comma-separated for multiple origins)
#
# Single origin:
# CORS_ORIGIN="https://yourdomain.com"
#
# Multiple origins:
# CORS_ORIGIN="https://yourdomain.com,https://app.yourdomain.com,https://www.yourdomain.com"
#
# SECURITY WARNING: Never use "*" in production - only specific domains!
CORS_ORIGIN="https://yourdomain.com"
# ============================================================================
# OPTIONAL: Advanced Configuration
# ============================================================================
# Log level (error, warn, info, debug)
# Default: "info"
# Use "error" or "warn" in production to reduce log volume
LOG_LEVEL="info"
# Request timeout in milliseconds
# Default: 30000 (30 seconds)
# REQUEST_TIMEOUT="30000"
# Database connection pool settings
# Default min: 2, max: 10
# Adjust based on your database plan and expected load
# DB_POOL_MIN="2"
# DB_POOL_MAX="10"
# Redis cache TTL (time-to-live) in seconds
# Default: 3600 (1 hour)
# Higher values = less DB load, potentially stale data
# Lower values = more accurate, higher DB load
# REDIS_TTL="3600"
# ============================================================================
# CUSTOM DOMAIN (Optional)
# ============================================================================
# If using a custom domain for short links
# Example: If your short links should be https://go.yourdomain.com/abc123
# Set this to match your domain configuration
#
# See: https://fly.io/docs/app-guides/custom-domains-with-fly/
# CUSTOM_DOMAIN="go.yourdomain.com"
# ============================================================================
# MONITORING & OBSERVABILITY (Optional)
# ============================================================================
# Sentry DSN for error tracking
# Sign up at https://sentry.io and get your DSN
# SENTRY_DSN="https://...@sentry.io/..."
# New Relic license key
# NEW_RELIC_LICENSE_KEY="..."
# Datadog API key
# DATADOG_API_KEY="..."
# ============================================================================
# DEPLOYMENT CHECKLIST
# ============================================================================
#
# Before deploying to production, ensure:
#
# [ ] DATABASE_URL is set with sslmode=require
# [ ] REDIS_URL is set (or intentionally omitted)
# [ ] CORS_ORIGIN is set to your actual domain(s), NOT "*"
# [ ] NODE_ENV is set to "production"
# [ ] All secrets are set via `fly secrets set`, not in fly.toml
# [ ] You've reviewed SECURITY.md checklist
# [ ] Database migrations have been tested
# [ ] Health check endpoint (/health) works
# [ ] You have database backups configured
#
# Set secrets with:
# fly secrets set DATABASE_URL="..." --app your-app
# fly secrets set REDIS_URL="..." --app your-app
# fly secrets set CORS_ORIGIN="..." --app your-app
#
# Verify secrets (values are hidden):
# fly secrets list --app your-app
#
# ============================================================================