FastAPI Deployment with Docker on CentOS 7
Firstly, you will need to update your system’s default applications to their latest versions:
sudo yum update -y
Next, install the necessary utilities for Docker:
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install -y docker-ce
sudo systemctl start docker && sudo systemctl enable docker
You’ll also need to install Docker Compose:
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
Create a Dockerfile that will specify how your application should be built:
FROM python:3.10
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "80"]
Then, create a docker-compose.yml file to define your services:
version: '3'
services:
app:
build: .
ports:
- "8081:80"
volumes:
- .:/app
After that, install Nginx, which will act as a reverse proxy for your application:
sudo yum install -y epel-release
sudo yum install -y nginx
You’ll need to configure Nginx to proxy requests to your FastAPI application. To do this, create a new configuration file in the /etc/nginx/conf.d
directory. Use the command vim /etc/nginx/conf.d/yourdomain.com.conf
to open the file:
server {
listen 80;
server_name yourdomain.com www.yourdomain.com;
location / {
proxy_pass http://localhost:8081;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Finally, start your Docker services and enable Nginx:
sudo docker-compose up -d
sudo systemctl start nginx
sudo systemctl enable nginx
And that’s it!