FastAPI is an insanely fast Python framework for building APIs — but getting it to production securely is where many developers struggle.
In this guide, we’ll containerize a FastAPI app, run it behind Nginx, enable HTTPS with Let’s Encrypt, and deploy it to a DigitalOcean Droplet — production-ready from day one.
By the end, you’ll have:
- Portable deployment with Docker
- Secure communication (HTTPS + Nginx reverse proxy)
- Easy scaling for high-traffic apps
High-Level Steps
- Create & SSH into a DigitalOcean Droplet
- Install Docker & Docker Compose
- Write a minimal FastAPI app (
main.py
) - Create
Dockerfile
for containerization - Add Nginx reverse proxy via
docker-compose.yml
- Configure DNS & domain
- Install Certbot & enable HTTPS
- Run with Gunicorn for production
Minimal Dockerfile
FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
EXPOSE 8000
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
docker-compose.yml
with Nginx
version: "3.8"
services:
app:
build: .
container_name: fastapi_app
restart: unless-stopped
expose:
- "8000"
nginx:
image: nginx:alpine
container_name: nginx_proxy
depends_on:
- app
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx.conf:/etc/nginx/conf.d/default.conf:ro
- certbot-etc:/etc/letsencrypt
- certbot-var:/var/www/certbot
restart: unless-stopped
volumes:
certbot-etc:
certbot-var:
Full Tutorial
This is the condensed version.
For the full guide — including Nginx config, SSL setup, firewall rules, and production tweaks — read it here:
Question for you: How do you deploy your Python APIs in production? Share your stack in the comments!
Top comments (0)