# Docker Compose file for Vapor # # Install Docker on your system to run and test # your Vapor app in a production-like environment. # # Note: This file is intended for testing and does not # implement best practices for a production deployment. # # Learn more: https://docs.docker.com/compose/reference/ # # Build images: docker compose build # Start app: docker compose up app # Start database: docker compose up db # Run migrations: docker compose run migrate # Stop all: docker compose down (add -v to wipe db) # volumes: db_data: x-shared_environment: &shared_environment LOG_LEVEL: ${LOG_LEVEL:-debug} DATABASE_HOST: db DATABASE_NAME: &db_name vapor_database DATABASE_USERNAME: &db_username vapor_username DATABASE_PASSWORD: &db_password vapor_password services: app: image: exodai-academy:latest build: context: . environment: <<: *shared_environment depends_on: - db ports: - '8080:8080' # user: '0' # uncomment to run as root for testing purposes even though Dockerfile defines 'vapor' user. command: ["serve", "--env", "production", "--hostname", "0.0.0.0", "--port", "8080"] migrate: image: exodai-academy:latest build: context: . environment: <<: *shared_environment depends_on: - db command: ["migrate", "--yes"] deploy: replicas: 0 revert: image: exodai-academy:latest build: context: . environment: <<: *shared_environment depends_on: - db command: ["migrate", "--revert", "--yes"] deploy: replicas: 0 db: image: postgres:18-alpine volumes: - db_data:/var/lib/postgresql environment: POSTGRES_USER: *db_username POSTGRES_PASSWORD: *db_password POSTGRES_DB: *db_name ports: - '5432:5432'