fastapi-deployment-config
FastAPI Deployment Configuration
Purpose: Autonomously configure and deploy FastAPI applications across multiple platforms with production-ready configurations.
Activation Triggers:
- Deployment setup requests
- Docker containerization needs
- Platform-specific configuration (Railway, DigitalOcean, AWS)
- Health check implementation
- Environment variable management
- Reverse proxy setup (Nginx)
- Production optimization
- Multi-stage build configurations
Key Resources:
scripts/build-docker.sh- Multi-stage Docker build automationscripts/validate-deployment.sh- Pre-deployment validation checksscripts/health-check.sh- Application health verificationtemplates/- Production-ready Dockerfile, docker-compose.yml, platform configsexamples/- Platform-specific deployment guides (Railway, DigitalOcean, AWS)
Deployment Workflow
1. Pre-Deployment Validation
Run comprehensive checks before deployment:
./scripts/validate-deployment.sh
# Validates:
# - Python dependencies (requirements.txt)
# - Environment variables (.env.example)
# - FastAPI application structure
# - Database migrations (if using Alembic)
# - Static file configuration
# - CORS settings
# - Security configurations
Common issues detected:
- Missing required dependencies
- Unset environment variables
- Database connection configuration
- Missing CORS origins
- Insecure secret key defaults
2. Docker Containerization
Build optimized Docker image using multi-stage builds:
./scripts/build-docker.sh [--platform=linux/amd64] [--tag=myapp:latest]
# Features:
# - Multi-stage build (builder + runtime)
# - Layer caching optimization
# - Non-root user for security
# - Health check integration
# - Minimal production image size
Dockerfile template (templates/Dockerfile):
- Python 3.11+ slim base image
- Virtual environment isolation
- Production dependency separation
- Gunicorn/Uvicorn workers
- Security best practices
3. Platform-Specific Configuration
Railway Deployment
# Railway uses railway.json for configuration
# See: examples/railway_setup.md
# Key features:
# - Automatic HTTPS
# - Environment variable management
# - Auto-deploy from Git
# - Database provisioning
# - Custom domains
Configuration: templates/railway.json
- Build command:
pip install -r requirements.txt - Start command:
uvicorn main:app --host 0.0.0.0 --port $PORT - Health check endpoint:
/health
DigitalOcean App Platform
# DigitalOcean uses app.yaml for configuration
# See: examples/digitalocean_setup.md
# Key features:
# - Container registry integration
# - Managed databases
# - Auto-scaling
# - CDN integration
# - Monitoring & alerts
Configuration: templates/digitalocean-app.yaml
- Dockerfile-based deployment
- Health check configuration
- Environment variable secrets
- Database component linking
AWS Deployment Options
ECS (Elastic Container Service):
# See: examples/aws_setup.md#ecs-deployment
# Features:
# - Fargate serverless containers
# - Load balancer integration
# - Auto-scaling policies
# - CloudWatch logging
# - VPC networking
App Runner:
# Simplified container deployment
# Automatic scaling and load balancing
# See: examples/aws_setup.md#app-runner
4. Health Check Implementation
Implement comprehensive health checks:
./scripts/health-check.sh <endpoint-url>
# Checks:
# - HTTP endpoint availability (GET /health)
# - Database connectivity
# - Redis/cache availability
# - External API dependencies
# - Response time monitoring
Health endpoint template:
@app.get("/health")
async def health_check():
return {
"status": "healthy",
"version": "1.0.0",
"database": check_db(),
"cache": check_redis()
}
5. Environment Variable Management
Required environment variables:
DATABASE_URL- Database connection stringSECRET_KEY- Application secret keyCORS_ORIGINS- Allowed CORS originsENVIRONMENT- prod/staging/devLOG_LEVEL- Logging verbosity
Templates provided:
.env.example- Development template.env.production.example- Production template
6. Reverse Proxy Configuration (Nginx)
For self-hosted deployments:
# Nginx configuration: templates/nginx.conf
# Features:
# - SSL/TLS termination
# - Rate limiting
# - Request buffering
# - Gzip compression
# - Static file serving
# - WebSocket support
# - Security headers
Configuration highlights:
- Proxy to Uvicorn on port 8000
- Client max body size: 10M
- Connection timeout: 60s
- Rate limiting: 100 req/min per IP
Docker Compose Orchestration
For local development and testing:
docker-compose up -d
# Services configured:
# - FastAPI application
# - PostgreSQL database
# - Redis cache
# - Nginx reverse proxy
Template: templates/docker-compose.yml
- Volume mounts for development
- Network isolation
- Health check dependencies
- Environment variable injection
Production Optimization
Multi-Stage Docker Build
Stage 1: Builder
- Install all dependencies
- Compile Python packages
- Create virtual environment
Stage 2: Runtime
- Copy only runtime dependencies
- Non-root user execution
- Minimal attack surface
- Optimized layer caching
Worker Configuration
Gunicorn + Uvicorn:
# Recommended workers: (2 x CPU cores) + 1
gunicorn main:app \
--workers 4 \
--worker-class uvicorn.workers.UvicornWorker \
--bind 0.0.0.0:8000 \
--access-logfile - \
--error-logfile - \
--log-level info
Database Connection Pooling
# SQLAlchemy configuration
engine = create_engine(
DATABASE_URL,
pool_size=10,
max_overflow=20,
pool_pre_ping=True
)
Security Configurations
Implemented in templates:
- ✅ Non-root Docker user
- ✅ Read-only root filesystem (where possible)
- ✅ Security headers (HSTS, X-Frame-Options, CSP)
- ✅ CORS configuration
- ✅ Rate limiting
- ✅ Secret management via environment variables
- ✅ SQL injection prevention (SQLAlchemy ORM)
- ✅ Input validation (Pydantic models)
Platform Comparison
| Feature | Railway | DigitalOcean | AWS ECS | AWS App Runner |
|---|---|---|---|---|
| Ease of Setup | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐ |
| Cost (Low Traffic) | $5-10/mo | $12/mo | $20-30/mo | $15-25/mo |
| Auto-Scaling | Limited | Yes | Yes | Yes |
| Database Included | Yes (add-on) | Yes (managed) | Separate (RDS) | Separate (RDS) |
| Custom Domains | Yes | Yes | Yes | Yes |
| CI/CD | Git-based | Container registry | CodePipeline | Git/ECR |
Common Deployment Scenarios
Scenario 1: Simple API (No Database)
Recommended: Railway or AWS App Runner
- Minimal configuration
- Fast deployment
- Auto-scaling included
Scenario 2: API + PostgreSQL
Recommended: Railway or DigitalOcean
- Integrated database provisioning
- Automatic backups
- Connection pooling
Scenario 3: Microservices Architecture
Recommended: AWS ECS or DigitalOcean App Platform
- Service mesh capabilities
- Container orchestration
- Advanced networking
Scenario 4: High-Traffic Production
Recommended: AWS ECS with RDS
- Advanced monitoring
- Multi-AZ deployment
- Enterprise support
Troubleshooting
Build Failures
# Check Docker build logs
./scripts/build-docker.sh --verbose
# Common fixes:
# - Update requirements.txt versions
# - Check Python version compatibility
# - Verify base image availability
Health Check Failures
# Debug health endpoint
./scripts/health-check.sh http://localhost:8000/health --debug
# Common issues:
# - Database connection timeout
# - Missing environment variables
# - Port binding conflicts
Performance Issues
# Monitor worker utilization
# Increase Gunicorn workers
# Enable connection pooling
# Implement caching (Redis)
# Optimize database queries
Resources
Scripts: All scripts are executable and include help documentation (--help)
Templates: Production-ready configurations in templates/ directory
Examples: Detailed platform-specific guides in examples/ directory
railway_setup.md- Complete Railway deployment walkthroughdigitalocean_setup.md- DigitalOcean App Platform setupaws_setup.md- AWS ECS and App Runner deployment
Supported Platforms: Railway, DigitalOcean App Platform, AWS ECS, AWS App Runner, Self-hosted (Docker + Nginx)
FastAPI Version: 0.104.0+ Python Version: 3.11+ Docker Version: 20.10+