# 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) # version: '3.7' volumes: db_data: x-shared_environment: &shared_environment LOG_LEVEL: ${LOG_LEVEL:-debug} DATABASE_HOST: db DATABASE_NAME: vapor_database DATABASE_USERNAME: vapor_username DATABASE_PASSWORD: vapor_password services: app: image: website: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: website:latest build: context: . environment: <<: *shared_environment depends_on: - db command: ["migrate", "--yes"] deploy: replicas: 0 revert: image: website:latest build: context: . environment: <<: *shared_environment depends_on: - db command: ["migrate", "--revert", "--yes"] deploy: replicas: 0 db: image: mysql:8 volumes: - db_data:/var/lib/mysql environment: MYSQL_USER: vapor_username MYSQL_PASSWORD: vapor_password MYSQL_DATABASE: vapor_database MYSQL_RANDOM_ROOT_PASSWORD: 'yes' ports: - '3306:3306'