nself provides flexible configuration through environment variables and configuration files. This guide covers all configuration options for customizing your backend infrastructure.
When you run nself init
, several configuration files are created:
my-project/
├── .env.local # Main configuration file
├── .env.example # Template with all options
├── .env.prod-template # Production template (copy to .env before deployment)
└── docker-compose.yml # Generated from config (do not edit)
Copy .env.prod-template
to .env
before deployment.
# Basic project configuration
PROJECT_NAME=my-backend
ENV=dev # v0.2.1+ simplified: 'dev' or 'prod'
# ENVIRONMENT=development # Legacy (still supported)
# Domain configuration
DOMAIN=localhost
SUBDOMAIN_PREFIX=
SSL_MODE=none
# PostgreSQL settings
POSTGRES_DB=myapp
POSTGRES_USER=postgres
POSTGRES_PASSWORD=secure_password_here
POSTGRES_HOST=postgres
POSTGRES_PORT=5432
# Database management
DB_AUTO_MIGRATE=false
DB_SEED_ON_INIT=true
DB_ENV_SEEDS=true # v0.2.1+ use environment-specific seed directories
DB_BACKUP_RETENTION=7
# Redis cache and sessions
REDIS_ENABLED=true
REDIS_HOST=redis
REDIS_PORT=6379
REDIS_PASSWORD=
REDIS_DB=0
# Hasura GraphQL Engine
HASURA_GRAPHQL_ENABLED=true
HASURA_GRAPHQL_ADMIN_SECRET=myadminsecretkey
HASURA_GRAPHQL_JWT_SECRET={"type":"HS256","key":"myverylongjwtsecret"}
# MinIO Storage
MINIO_ENABLED=true
MINIO_ROOT_USER=minioadmin
MINIO_ROOT_PASSWORD=minioadmin
MINIO_DEFAULT_BUCKETS=uploads,avatars,documents
# Email (MailHog for development)
MAILHOG_ENABLED=true
SMTP_HOST=mailhog
SMTP_PORT=1025
# Nhost Dashboard
NHOST_DASHBOARD_ENABLED=true
NHOST_DASHBOARD_PORT=3030
# Functions
FUNCTIONS_ENABLED=false
FUNCTIONS_RUNTIME=node
# Nginx Proxy
NGINX_ENABLED=true
NGINX_CLIENT_MAX_BODY_SIZE=100M
# Enable NestJS microservices
NESTJS_SERVICES=api,webhooks,auth-service
# NestJS specific settings
NESTJS_VERSION=10.x
NESTJS_SWAGGER=true
NESTJS_CORS_ENABLED=true
NESTJS_RATE_LIMIT=100
# Service scaling
NESTJS_API_REPLICAS=2
NESTJS_WEBHOOKS_REPLICAS=1
# Background job processing
BULLMQ_WORKERS=email-worker,image-processor
# Worker configuration
BULLMQ_EMAIL_CONCURRENCY=5
BULLMQ_IMAGE_CONCURRENCY=3
BULLMQ_DASHBOARD_ENABLED=true
BULLMQ_DASHBOARD_PORT=3001
# FastAPI microservices
PYTHON_SERVICES=ml-api,data-processor
# Python configuration
PYTHON_VERSION=3.11
PYTHON_ASYNC=true
PYTHON_CORS=true
PYTHON_DOCS=true
# Go microservices
GOLANG_SERVICES=api-gateway,websocket-server
# Go build settings
GOLANG_VERSION=1.21
GOLANG_CGO_ENABLED=0
GOLANG_BUILD_TAGS=netgo
# Development environment (.env.local)
ENV=dev # v0.2.1+ simplified
DEBUG=true
LOG_LEVEL=debug
# Development-only services
MAILHOG_ENABLED=true
NHOST_DASHBOARD_ENABLED=true
SWAGGER_ENABLED=true
# Hot reloading
AUTO_RELOAD=true
WATCH_FILES=true
# Production environment (.env.prod-template)
# Copy to .env before deployment
ENV=prod # v0.2.1+ simplified
DEBUG=false
LOG_LEVEL=info
# Security
SSL_MODE=letsencrypt
FORCE_SSL=true
SECURE_COOKIES=true
# Performance
WORKER_PROCESSES=4
CACHE_TTL=3600
GZIP_ENABLED=true
# Monitoring
HEALTH_CHECK_ENABLED=true
METRICS_ENABLED=true
Copy .env.prod-template
to .env
before deployment.
# JWT Configuration
JWT_SECRET=your-super-secret-jwt-key-here
JWT_EXPIRES_IN=7d
JWT_ALGORITHM=HS256
# Session settings
SESSION_SECRET=your-session-secret-here
SESSION_TIMEOUT=24h
COOKIE_SECURE=true
COOKIE_HTTP_ONLY=true
# CORS configuration
CORS_ORIGIN=http://localhost:3000,https://myapp.com
CORS_METHODS=GET,POST,PUT,DELETE,OPTIONS
CORS_CREDENTIALS=true
# Security headers
CSP_ENABLED=true
HSTS_ENABLED=true
X_FRAME_OPTIONS=DENY
# Service ports
HASURA_PORT=8080
POSTGRES_PORT=5432
REDIS_PORT=6379
MINIO_PORT=9000
MINIO_CONSOLE_PORT=9001
MAILHOG_PORT=8025
NHOST_DASHBOARD_PORT=3030
# Custom service ports
NESTJS_API_PORT=3000
PYTHON_ML_API_PORT=8001
GOLANG_GATEWAY_PORT=8002
# SSL settings
SSL_MODE=custom
SSL_CERT_PATH=/etc/ssl/certs/server.crt
SSL_KEY_PATH=/etc/ssl/private/server.key
SSL_CA_PATH=/etc/ssl/certs/ca.crt
# Let's Encrypt
LETSENCRYPT_EMAIL=admin@myapp.com
LETSENCRYPT_DOMAINS=myapp.com,api.myapp.com
# Memory limits (in MB)
POSTGRES_MEMORY_LIMIT=1024
REDIS_MEMORY_LIMIT=256
HASURA_MEMORY_LIMIT=512
NESTJS_MEMORY_LIMIT=256
# CPU limits
POSTGRES_CPU_LIMIT=1.0
HASURA_CPU_LIMIT=0.5
NESTJS_CPU_LIMIT=0.3
# Application caching
CACHE_ENABLED=true
CACHE_TTL=3600
CACHE_MAX_SIZE=100MB
# Database query caching
QUERY_CACHE_ENABLED=true
QUERY_CACHE_SIZE=50MB
# Static file caching
STATIC_CACHE_TTL=86400
# Logging configuration
LOG_LEVEL=info
LOG_FORMAT=json
LOG_TIMESTAMP=true
LOG_COLORS=true
# Log destinations
LOG_TO_FILE=true
LOG_FILE_PATH=/var/log/nself/app.log
LOG_FILE_MAX_SIZE=100MB
LOG_FILE_MAX_FILES=5
# Service-specific logging
POSTGRES_LOG_LEVEL=warn
HASURA_LOG_LEVEL=info
REDIS_LOG_LEVEL=notice
# Database backups
BACKUP_ENABLED=true
BACKUP_SCHEDULE=0 2 * * * # Daily at 2 AM
BACKUP_RETENTION=7
BACKUP_COMPRESSION=true
BACKUP_LOCATION=./backups
# Storage backups
MINIO_BACKUP_ENABLED=true
MINIO_BACKUP_SCHEDULE=0 3 * * *
# Check current configuration
nself config show
# Validate configuration
nself config validate
# Set configuration value
nself config set POSTGRES_PASSWORD new_password
# Generate production config
nself config generate --env production
# Use predefined templates
nself init --template blog # Blog/CMS setup
nself init --template ecommerce # E-commerce setup
nself init --template api # API-only setup
nself init --template minimal # Minimal setup
# Docker settings
DOCKER_REGISTRY=docker.io
DOCKER_NAMESPACE=myorg
DOCKER_TAG=latest
# Build settings
DOCKER_BUILDKIT=1
DOCKER_MULTI_PLATFORM=true
DOCKER_CACHE_FROM=myorg/cache:latest
# Health check configuration
HEALTH_CHECK_ENABLED=true
HEALTH_CHECK_INTERVAL=30s
HEALTH_CHECK_TIMEOUT=5s
HEALTH_CHECK_RETRIES=3
# Service-specific health checks
POSTGRES_HEALTH_CHECK=SELECT 1
REDIS_HEALTH_CHECK=PING
HASURA_HEALTH_CHECK=/healthz
.env.local
and add it to .gitignore
.env.example
in version control# Check configuration syntax
nself config validate
# View resolved configuration
nself config show --resolved
# Test database connection
nself db ping
# Verify service connectivity
nself status --verbose
# Enable debug mode
DEBUG=true nself up
# View configuration with debug info
nself config show --debug
# Check environment variables
nself config env
Now that you understand configuration:
Proper configuration is essential for a successful nself deployment. Take time to understand and customize these settings for your specific needs.