Sonamu uses .env files to apply different settings for each environment. Sensitive information such as database connection details, API keys, and session secrets should be stored in .env files and referenced from sonamu.config.ts.
Never commit .env files to Git! Make sure .env is included in your .gitignore.
# Local development settingsPROJECT_NAME=MyProject-DevDB_HOST=localhostDB_PORT=5432DB_USER=postgresDB_PASSWORD=your-dev-passwordDATABASE_NAME=myproject_devSESSION_SECRET=your-dev-session-secretSESSION_SALT=your-dev-session-saltDRIVE_DISK=fs# Development OpenAI (optional)OPENAI_API_KEY=sk-***DISABLE_WORKER=false
Characteristics:
Uses local database
File system storage
Simple secret keys (security not required)
.env.staging
Copy
# Test server settingsPROJECT_NAME=MyProject-StagingDB_HOST=staging-db.example.comDB_PORT=5432DB_USER=myproject_userDB_PASSWORD=your-staging-password # Minimum 32 charactersDATABASE_NAME=myproject_stagingSESSION_SECRET=your-staging-session-secret # Minimum 64 charactersSESSION_SALT=your-staging-session-saltDRIVE_DISK=s3AWS_ACCESS_KEY_ID=your-staging-aws-key-idAWS_SECRET_ACCESS_KEY=your-staging-aws-secret-keyS3_REGION=ap-northeast-2S3_BUCKET=myproject-stagingOPENAI_API_KEY=your-staging-openai-keyDISABLE_WORKER=false
Characteristics:
Remote database
S3 storage
Production-like environment
.env.production
Copy
# Production server settingsPROJECT_NAME=MyProjectDB_HOST=prod-db.example.comDB_PORT=5432DB_USER=myproject_prodDB_PASSWORD=your-production-password # Minimum 64 charactersDATABASE_NAME=myproject_prodSESSION_SECRET=your-production-session-secret # Minimum 64 charactersSESSION_SALT=your-production-session-saltDRIVE_DISK=s3AWS_ACCESS_KEY_ID=your-production-aws-key-idAWS_SECRET_ACCESS_KEY=your-production-aws-secret-keyS3_REGION=ap-northeast-2S3_BUCKET=myproject-productionOPENAI_API_KEY=your-production-openai-keyDISABLE_WORKER=false
# Environment variables.env.env.local.env.*.local# Never commit production environment variables.env.production# Test environments may be allowed (if no sensitive info)# .env.test
// β Access only where neededconst dbPassword = process.env.DB_PASSWORD;// β Never output to logsconsole.log("Password:", process.env.DB_PASSWORD);// β Never expose to clientres.send({ secret: process.env.SESSION_SECRET });