version: '3.4' services: php: image: ${PHP_IMAGE:?PHP_IMAGE is not set or empty} restart: always depends_on: - db environment: - APP_DEBUG=${APP_DEBUG:-0} - APP_ENV=${APP_ENV:-prod} - APP_SECRET=${APP_SECRET:?APP_SECRET is not set or empty} - CORS_ALLOW_ORIGIN=${CORS_ALLOW_ORIGIN:?CORS_ALLOW_ORIGIN is not set or empty} - DATABASE_URL=${DATABASE_URL:?DATABASE_URL is not set or empty} - MERCURE_JWT_SECRET=${MERCURE_JWT_SECRET:?MERCURE_JWT_SECRET is not set or empty} - MERCURE_SUBSCRIBE_URL=${MERCURE_SUBSCRIBE_URL:?MERCURE_SUBSCRIBE_URL is not set or empty} - TRUSTED_HOSTS=${TRUSTED_HOSTS:?TRUSTED_HOSTS is not set or empty} - TRUSTED_PROXIES=${TRUSTED_PROXIES:-10.0.0.0/8,172.16.0.0/12,192.168.0.0/16} api: image: ${NGINX_IMAGE:?NGINX_IMAGE is not set or empty} restart: always depends_on: - php cache-proxy: image: ${VARNISH_IMAGE:?VARNISH_IMAGE is not set or empty} restart: always depends_on: - api environment: - VIRTUAL_HOST=${API_HOST:?API_HOST is not set or empty} tmpfs: - /usr/local/var/varnish:exec db: # in production, we may want to use a managed database service image: postgres:10-alpine restart: always environment: - POSTGRES_DB=${POSTGRES_DB:-api} - POSTGRES_PASSWORD=${POSTGRES_PASSWORD:?POSTGRES_PASSWORD is not set or empty} - POSTGRES_USER=${POSTGRES_USER:-api-platform} volumes: # use a bind-mounted host directory, because we never want to lose our data! - ./api/docker/db/data:/var/lib/postgresql/data:rw mercure: # in production, we may want to use the managed version of Mercure # https://github.com/dunglas/mercure#managed-version image: dunglas/mercure restart: always environment: - ALLOW_ANONYMOUS=${MERCURE_ALLOW_ANONYMOUS:?MERCURE_ALLOW_ANONYMOUS is not set or empty} - CORS_ALLOWED_ORIGINS=${MERCURE_CORS_ALLOWED_ORIGINS:?MERCURE_CORS_ALLOWED_ORIGINS is not set or empty} - JWT_KEY=${MERCURE_JWT_KEY:?MERCURE_JWT_KEY is not set or empty} - VIRTUAL_HOST=${MERCURE_HOST:?MERCURE_HOST is not set or empty} client: # in production, we may want to use a static website hosting service # https://facebook.github.io/create-react-app/docs/deployment image: ${CLIENT_IMAGE:?CLIENT_IMAGE is not set or empty} restart: always environment: - VIRTUAL_HOST=${CLIENT_HOST:?CLIENT_HOST is not set or empty} admin: # in production, we may want to use a static website hosting service # https://facebook.github.io/create-react-app/docs/deployment image: ${ADMIN_IMAGE:?ADMIN_IMAGE is not set or empty} restart: always environment: - VIRTUAL_HOST=${ADMIN_HOST:?ADMIN_HOST is not set or empty} nginx-proxy: image: jwilder/nginx-proxy:alpine restart: always ports: - target: 80 published: 80 protocol: tcp - target: 443 published: 443 protocol: tcp volumes: - ./docker/nginx-proxy/certs:/etc/nginx/certs:ro - ./docker/nginx-proxy/vhost.d:/etc/nginx/vhost.d:ro - /var/run/docker.sock:/tmp/docker.sock:ro