← Back to Tutorials
34. Deployment
Uvicorn + Gunicorn (Production)
pip install gunicorn uvicorn
# Run with gunicorn workers
gunicorn main:app -w 4 -k uvicorn.workers.UvicornWorker
# With systemd service
[Unit]
Description=FastAPI Application
After=network.target
[Service]
User=www-data
WorkingDirectory=/opt/app
ExecStart=/usr/bin/gunicorn main:app -w 4 -k uvicorn.workers.UvicornWorker
Restart=always
[Install]
WantedBy=multi-user.target
Docker
# Dockerfile
FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
EXPOSE 8000
CMD ["gunicorn", "main:app", "-w", "4", "-k", "uvicorn.workers.UvicornWorker", "--bind", "0.0.0.0:8000"]
# docker-compose.yml
services:
api:
build: .
ports:
- "8000:8000"
environment:
- DATABASE_URL=postgresql://user:pass@db/db
depends_on:
- db
db:
image: postgres:15
Cloud Hosting Options
Provider Notes
Railway Easy deploy, auto HTTPS, domains
Render Free tier, auto-deploy from Git
Fly.io Edge deployment, global regions
AWS (ECS/EKS) Docker containers, auto-scaling
Azure Container Apps Serverless containers, built-in scaling
✏️ Exercise: Create a Dockerfile for your FastAPI app. Run it locally with docker-compose including a PostgreSQL service. Test that the API works inside the container.
← Previous Back to Index Next: Quick Guide →