# 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 up 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: cod_db DATABASE_USERNAME: cod DATABASE_PASSWORD: pw4cod VIRTUAL_HOST: app.local services: nginx-proxy: image: jwilder/nginx-proxy:alpine restart: "always" # Always restart container ports: - "80:80" # Port mappings in format host:container - "443:443" # Port mappings in format host:container networks: - nginx-proxy # Name of the etwork these two containers will share labels: - "com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy" # Label needed for Let's Encrypt companion container volumes: # Volumes needed for container to configure proixes and access certificates genereated by Let's Encrypt companion container - /var/run/docker.sock:/tmp/docker.sock:ro - "nginx-conf:/etc/nginx/conf.d" - "nginx-vhost:/etc/nginx/vhost.d" - "html:/usr/share/nginx/html" - "certs:/etc/nginx/certs:ro" letsencrypt-nginx-proxy-companion: image: jrcs/letsencrypt-nginx-proxy-companion restart: always container_name: letsencrypt-nginx-proxy-companion volumes: - "/var/run/docker.sock:/var/run/docker.sock:ro" - "nginx-conf:/etc/nginx/conf.d" - "nginx-vhost:/etc/nginx/vhost.d" - "html:/usr/share/nginx/html" - "certs:/etc/nginx/certs:rw" depends_on: # Make sure we start nginx proxy container first - app - nginx-proxy app: image: cod-backend: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: cod-backend:latest build: context: . environment: <<: *shared_environment depends_on: - db command: ["migrate", "--yes"] deploy: replicas: 0 revert: image: cod-backend:latest build: context: . environment: <<: *shared_environment depends_on: - db command: ["migrate", "--revert", "--yes"] deploy: replicas: 0 db: image: postgres:12-alpine volumes: - db_data:/var/lib/postgresql/data/pgdata environment: PGDATA: /var/lib/postgresql/data/pgdata POSTGRES_USER: cod POSTGRES_PASSWORD: pw4cod POSTGRES_DB: cod_db ports: - '5432:5432' networks: nginx-proxy: # Name of our shared network that containers will use volumes: # Names of volumes that out containers will share. Those will persist on docker's host machine. nginx-conf: nginx-vhost: html: certs: db_data: