# ============================================================================= # AngelaMos | 2026 # .env.example # ============================================================================= # Copy this file to .env and update values for your environment # ============================================================================= # ============================================================================= # HOST PORTS (change these to avoid conflicts between projects) # ============================================================================= NGINX_HOST_PORT=8420 BACKEND_HOST_PORT=5420 FRONTEND_HOST_PORT=3420 POSTGRES_HOST_PORT=4420 REDIS_HOST_PORT=6420 # ============================================================================= # Application # ============================================================================= APP_NAME=FullStack-Template ENVIRONMENT=development DEBUG=true LOG_LEVEL=INFO LOG_JSON_FORMAT=false # ============================================================================= # Server (internal container settings) # ============================================================================= HOST=0.0.0.0 PORT=8000 RELOAD=true # ============================================================================= # PostgreSQL # ============================================================================= POSTGRES_USER=postgres POSTGRES_PASSWORD=postgres POSTGRES_DB=app_db POSTGRES_HOST=db POSTGRES_CONTAINER_PORT=5432 DATABASE_URL=postgresql+asyncpg://${POSTGRES_USER}:${POSTGRES_PASSWORD}@${POSTGRES_HOST}:${POSTGRES_CONTAINER_PORT}/${POSTGRES_DB} DB_POOL_SIZE=20 DB_MAX_OVERFLOW=10 DB_POOL_TIMEOUT=30 DB_POOL_RECYCLE=1800 # ============================================================================= # Redis # ============================================================================= REDIS_HOST=redis REDIS_CONTAINER_PORT=6379 REDIS_PASSWORD= REDIS_URL=redis://${REDIS_HOST}:${REDIS_CONTAINER_PORT} # ============================================================================= # Security / JWT # ============================================================================= SECRET_KEY=dev-only-change-this-in-production-minimum-32-characters-long JWT_ALGORITHM=HS256 ACCESS_TOKEN_EXPIRE_MINUTES=15 REFRESH_TOKEN_EXPIRE_DAYS=7 # ============================================================================= # Admin Bootstrap (optional) # ============================================================================= # If set, registering with this email auto-promotes to admin role. # Leave empty or remove to disable auto-admin (all users register as USER). ADMIN_EMAIL= # ============================================================================= # CORS # ============================================================================= # Use ["*"] to allow all origins (public API) # Or specify origins: ["http://localhost:8420","http://localhost:3420"] CORS_ORIGINS=["*"] # ============================================================================= # Rate Limiting # ============================================================================= RATE_LIMIT_DEFAULT=100/minute RATE_LIMIT_AUTH=20/minute # ============================================================================= # Frontend (Vite) # ============================================================================= VITE_API_URL=/api VITE_API_TARGET=http://localhost:8000 VITE_APP_TITLE=My App # ============================================================================= # Cloudflare Tunnel (Production only - or use whatever deployment method you want) # ============================================================================= # Option 1: Cloudflare Tunnel (zero config, no port forwarding needed) # - Get token from Cloudflare Zero Trust dashboard # - Access > Tunnels > Create a tunnel > Name it > Copy token below # - Configure public hostname: yourdomain.com -> http://nginx:80 # # Option 2: Traditional hosting (VM + domain + DNS) # - Host on a VM, buy a domain, create A/CNAME record in Cloudflare DNS # - Point to your VM's IP, expose nginx port, configure reverse proxy/SSL # # Option 3: Whatever works for you # - Just make sure your nginx container is accessible and SSL is configured CLOUDFLARE_TUNNEL_TOKEN=