web-bootcamp-2026-backend

1
README.md

Quick setup: Run the interactive setup script to choose your deployment configuration:

Or directly specify the deployment type:

./setup.py local
,
./setup.py staging
, or
./setup.py production
.

The script copies the right files for your deployment scenario. Here's what each option sets up:

Option 1: Local development with Uvicorn

Best for: Development and testing

Copies:

  • scripts/local_with_uvicorn/Dockerfile
    Dockerfile
  • scripts/local_with_uvicorn/docker-compose.yml
    docker-compose.yml
  • scripts/local_with_uvicorn/.env.example
    src/.env

Sets up Uvicorn with auto-reload enabled. The example environment values work fine for development.

Manual setup:

./setup.py local
or copy the files above manually.

Option 2: Staging with Gunicorn managing Uvicorn workers

Best for: Staging environments and load testing

Copies:

  • scripts/gunicorn_managing_uvicorn_workers/Dockerfile
    Dockerfile
  • scripts/gunicorn_managing_uvicorn_workers/docker-compose.yml
    docker-compose.yml
  • scripts/gunicorn_managing_uvicorn_workers/.env.example
    src/.env

Sets up Gunicorn managing multiple Uvicorn workers for production-like performance testing.

Warning

Change

SECRET_KEY
and passwords in the
.env
file for staging environments.

Manual setup:

./setup.py staging
or copy the files above manually.

Option 3: Production with NGINX

Best for: Production deployments

Copies:

  • scripts/production_with_nginx/Dockerfile
    Dockerfile
  • scripts/production_with_nginx/docker-compose.yml
    docker-compose.yml
  • scripts/production_with_nginx/.env.example
    src/.env

Sets up NGINX as reverse proxy with Gunicorn + Uvicorn workers for production.

Caution

You MUST change

SECRET_KEY
, all passwords, and sensitive values in the
.env
file before deploying!

Manual setup:

./setup.py production
or copy the files above manually.


Start your application:

Access your app:

Next steps

Create your first admin user:

Run database migrations (if you add models):

Test background jobs:

Or run locally without Docker:

License