DEV Community

Cover image for Deploy & Secure FastAPI with Docker on DigitalOcean (Step-by-Step)
Firdevs Akbayır
Firdevs Akbayır

Posted on • Edited on

Deploy & Secure FastAPI with Docker on DigitalOcean (Step-by-Step)

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"] 
Enter fullscreen mode Exit fullscreen mode

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: 
Enter fullscreen mode Exit fullscreen mode

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)