5.3 KiB
Web Deployment
- DNS add cms, adminer, traefik, oneandallmusic.net
- Check the env file
- check the env file in frontend, VITE_IMAGE_URL is corrent
Using Services
- godaddy for domain
- google map
- cloudflare for dns nameserver and image storage(r2)
- hostinger for vps
Public Traefik
Go to local usr/local/
mkdir traefik-public
mkdir web_backend
cd web_backend
git init
git pull https://git.develop-cat.com/all_in_one/backend_and_cms.git
cp docker-compose.traefik.yml ../traefik-public
cd ../
docker network create traefik-public
cd traefik-public
USERNAME=admin PASSWORD=Wingwingk3 DOMAIN=oneandallmusic.net EMAIL=oneandall.music@gmail.com HASHED_PASSWORD=$(openssl passwd -apr1 $PASSWORD) docker compose -f docker-compose.traefik.yml up -d
Deploy Backend
Now that you have Traefik in place you can deploy your FastAPI project with Docker Compose.
Note: You might want to jump ahead to the section about Continuous Deployment with GitHub Actions.
Environment Variables
You need to set some environment variables first.
Set the ENVIRONMENT
, by default local
(for development), but when deploying to a server you would put something like staging
or production
:
export ENVIRONMENT=production
Set the DOMAIN
, by default localhost
(for development), but when deploying you would use your own domain, for example:
export DOMAIN=fastapi-project.example.com
You can set several variables, like:
PROJECT_NAME
: The name of the project, used in the API for the docs and emails.STACK_NAME
: The name of the stack used for Docker Compose labels and project name, this should be different forstaging
,production
, etc. You could use the same domain replacing dots with dashes, e.g.fastapi-project-example-com
andstaging-fastapi-project-example-com
.BACKEND_CORS_ORIGINS
: A list of allowed CORS origins separated by commas.SECRET_KEY
: The secret key for the FastAPI project, used to sign tokens.FIRST_SUPERUSER
: The email of the first superuser, this superuser will be the one that can create new users.FIRST_SUPERUSER_PASSWORD
: The password of the first superuser.SMTP_HOST
: The SMTP server host to send emails, this would come from your email provider (E.g. Mailgun, Sparkpost, Sendgrid, etc).SMTP_USER
: The SMTP server user to send emails.SMTP_PASSWORD
: The SMTP server password to send emails.EMAILS_FROM_EMAIL
: The email account to send emails from.POSTGRES_SERVER
: The hostname of the PostgreSQL server. You can leave the default ofdb
, provided by the same Docker Compose. You normally wouldn't need to change this unless you are using a third-party provider.POSTGRES_PORT
: The port of the PostgreSQL server. You can leave the default. You normally wouldn't need to change this unless you are using a third-party provider.POSTGRES_PASSWORD
: The Postgres password.POSTGRES_USER
: The Postgres user, you can leave the default.POSTGRES_DB
: The database name to use for this application. You can leave the default ofapp
.SENTRY_DSN
: The DSN for Sentry, if you are using it.
GitHub Actions Environment Variables
There are some environment variables only used by GitHub Actions that you can configure:
LATEST_CHANGES
: Used by the GitHub Action latest-changes to automatically add release notes based on the PRs merged. It's a personal access token, read the docs for details.SMOKESHOW_AUTH_KEY
: Used to handle and publish the code coverage using Smokeshow, follow their instructions to create a (free) Smokeshow key.
Generate secret keys
Some environment variables in the .env
file have a default value of changethis
.
You have to change them with a secret key, to generate secret keys you can run the following command:
python -c "import secrets; print(secrets.token_urlsafe(32))"
Copy the content and use that as password / secret key. And run that again to generate another secure key.
Deploy with Docker Compose
With the environment variables in place, you can 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
, that's why we explicitly specify docker-compose.yml
as the file to use.
Continuous Deployment (CD)
You can use GitHub Actions to deploy your project automatically. 😎
You can have multiple environment deployments.
There are already two environments configured, staging
and production
. 🚀
URLs
Replace fastapi-project.example.com
with your domain.
Main Traefik Dashboard
Traefik UI: https://traefik.fastapi-project.example.com
Production
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/
Adminer: https://adminer.fastapi-project.example.com
Staging
Frontend: https://staging.fastapi-project.example.com
Backend API docs: https://staging.fastapi-project.example.com/docs
Backend API base URL: https://staging.fastapi-project.example.com/api/
Adminer: https://adminer.staging.fastapi-project.example.com