Files
full-stack-fastapi-template/deployment.md
2024-03-09 00:41:13 +00:00

3.4 KiB

FastAPI Project - Deployment

You can deploy the project using Docker Compose in a remote server.

It expects you to have a Traefik proxy handling communication to the outside world and HTTPS certificates.

And you can use CI (continuous integration) systems to deploy automatically.

But you have to configure a couple things first.

Preparation

  • Have a remote server ready and available.
  • Configure the DNS records of your domain to point to the IP of the server you just created.
  • Install and configure Docker.
  • Create a remote directory to store your code, for example:
mkdir -p /root/code/fastapi-project/

Public Traefik

We need a Traefik proxy to handle incoming connections and HTTPS certificates.

Traefik Docker Compose

Copy the Traefik Docker Compose file to your server, to your code directory. You could do it with rsync:

rsync -a docker-compose.traefik.yml root@your-server.example.com:/root/code/fastapi-project/

Traefik Public Network

This Traefik will expect a Docker "public network" named traefik-public to communicate with your stack(s).

This way, there will be a single public Traefik proxy that handles the communication (HTTP and HTTPS) with the outside world, and then behind that, you could have one or more stacks.

To create a Docker "public network" named traefik-public run:

docker network create traefik-public

Traefik Environment Variables

The Traefik Docker Compose file expects some environment variables to be set.

Create the environment variables for HTTP Basic Auth.

  • Create the username, e.g.:
export USERNAME=admin
  • Create an environment variable with the password, e.g.:
export PASSWORD=changethis
  • Use openssl to generate the "hashed" version of the password and store it in an environment variable:
export HASHED_PASSWORD=$(openssl passwd -apr1 $PASSWORD)
  • Create an environment variable with the domain name, e.g.:
export DOMAIN=fastapi-project.example.com
  • Create an environment variable with the email for Let's Encrypt, e.g.:
export EMAIL=admin@example.com

Start the Traefik Docker Compose

Now with the environment variables set and the docker-compose.traefik.yml in place, you can start the Traefik Docker Compose:

docker compose -f docker-compose.traefik.yml up -d

Deploy the FastAPI Project

Now that you have Traefik in place you can deploy your FastAPI project with Docker Compose.

You could configure the variables in the .env file to match your domain, or you could override them before running the docker compose command.

For example:

export DOMAIN=fastapi-project.example.com

And then deploy with Docker Compose:

docker compose -f docker-compose.yml up -d

For production you wouldn't want to have the overrides in docker-compose.override.yml, so you would need to explicitly specify the file to use, docker-compose.yml.

URLs

Replace fastapi-project.example.com with your domain:

Frontend: https://fastapi-project.example.com

Backend API docs: https://fastapi-project.example.com/docs

Backend API base URL: https://fastapi-project.example.com/api/

PGAdmin: https://pgadmin.fastapi-project.example.com

Flower: https://flower.fastapi-project.example.com

Traefik UI: https://traefik.fastapi-project.example.com