netgescon-day0/docker/docker-compose.multisite.yml

222 lines
6.9 KiB
YAML

services:
traefik:
image: traefik:v2.11
container_name: netgescon_traefik
restart: unless-stopped
command:
- --providers.docker=true
- --providers.docker.exposedbydefault=false
- --entrypoints.web.address=:80
- --entrypoints.websecure.address=:443
- --certificatesresolvers.letsencrypt.acme.email=${LETSENCRYPT_EMAIL}
- --certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json
- --certificatesresolvers.letsencrypt.acme.httpchallenge.entrypoint=web
ports:
- "80:80"
- "443:443"
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- netgescon_letsencrypt:/letsencrypt
networks:
- netgescon_edge
prod_app:
image: netgescon/app:${NETGESCON_VERSION:-latest}
build:
context: ..
dockerfile: docker/Dockerfile.prod
container_name: netgescon_prod_app
restart: unless-stopped
environment:
APP_ENV: production
APP_DEBUG: "false"
APP_URL: https://${APP_DOMAIN}
DB_CONNECTION: mysql
DB_HOST: prod_db
DB_PORT: 3306
DB_DATABASE: ${PROD_DB_DATABASE}
DB_USERNAME: ${PROD_DB_USERNAME}
DB_PASSWORD: ${PROD_DB_PASSWORD}
RUN_MIGRATIONS: ${PROD_RUN_MIGRATIONS:-true}
MIGRATIONS_STRICT: "false"
RUN_FILAMENT_ASSETS: "false"
FIX_PERMISSIONS: "true"
WAIT_FOR_DB: "true"
DISABLE_SCHEMA_LOAD: "true"
MYSQL_SSL_VERIFY_SERVER_CERT: "FALSE"
volumes:
- prod_storage:/var/www/storage
- prod_cache:/var/www/bootstrap/cache
- prod_public:/var/www/public
- ${LEGACY_ARCHIVES_PATH:-/mnt/gescon-archives/gescon}:/mnt/gescon-archives/gescon:ro
depends_on:
- prod_db
- prod_redis
networks:
- netgescon_edge
prod_nginx:
image: nginx:alpine
container_name: netgescon_prod_nginx
restart: unless-stopped
volumes:
- prod_public:/var/www/public:ro
- ./nginx/prod.conf:/etc/nginx/conf.d/default.conf:ro
depends_on:
- prod_app
labels:
- "traefik.enable=true"
- "traefik.http.routers.netgescon-prod.rule=Host(`${APP_DOMAIN}`)"
- "traefik.http.routers.netgescon-prod.entrypoints=websecure"
- "traefik.http.routers.netgescon-prod.tls=true"
- "traefik.http.routers.netgescon-prod.tls.certresolver=letsencrypt"
- "traefik.http.services.netgescon-prod.loadbalancer.server.port=80"
- "traefik.http.routers.netgescon-prod-http.rule=Host(`${APP_DOMAIN}`)"
- "traefik.http.routers.netgescon-prod-http.entrypoints=web"
- "traefik.http.routers.netgescon-prod-http.middlewares=netgescon-https-redirect"
- "traefik.http.middlewares.netgescon-https-redirect.redirectscheme.scheme=https"
networks:
- netgescon_edge
prod_db:
image: mysql:8.0
container_name: netgescon_prod_db
restart: unless-stopped
command: --log-bin-trust-function-creators=1
environment:
MYSQL_DATABASE: ${PROD_DB_DATABASE}
MYSQL_USER: ${PROD_DB_USERNAME}
MYSQL_PASSWORD: ${PROD_DB_PASSWORD}
MYSQL_ROOT_PASSWORD: ${PROD_DB_ROOT_PASSWORD}
volumes:
- prod_db:/var/lib/mysql
- ./mysql/init.sql:/docker-entrypoint-initdb.d/01-init.sql:ro
networks:
- netgescon_edge
prod_redis:
image: redis:alpine
container_name: netgescon_prod_redis
restart: unless-stopped
volumes:
- prod_redis:/data
networks:
- netgescon_edge
demo_app:
image: netgescon/app:${NETGESCON_VERSION:-latest}
container_name: netgescon_demo_app
restart: unless-stopped
environment:
APP_ENV: production
APP_DEBUG: "false"
APP_URL: https://${DEMO_DOMAIN}
DB_CONNECTION: mysql
DB_HOST: demo_db
DB_PORT: 3306
DB_DATABASE: ${DEMO_DB_DATABASE}
DB_USERNAME: ${DEMO_DB_USERNAME}
DB_PASSWORD: ${DEMO_DB_PASSWORD}
RUN_MIGRATIONS: ${DEMO_RUN_MIGRATIONS:-true}
MIGRATIONS_STRICT: "false"
RUN_FILAMENT_ASSETS: "false"
FIX_PERMISSIONS: "true"
WAIT_FOR_DB: "true"
RUN_SEEDERS: demo
SEEDERS_STRICT: "false"
DISABLE_SCHEMA_LOAD: "true"
MYSQL_SSL_VERIFY_SERVER_CERT: "FALSE"
volumes:
- demo_storage:/var/www/storage
- demo_cache:/var/www/bootstrap/cache
- demo_public:/var/www/public
- ${LEGACY_ARCHIVES_PATH:-/mnt/gescon-archives/gescon}:/mnt/gescon-archives/gescon:ro
depends_on:
- demo_db
- demo_redis
networks:
- netgescon_edge
demo_nginx:
image: nginx:alpine
container_name: netgescon_demo_nginx
restart: unless-stopped
volumes:
- demo_public:/var/www/public:ro
- ./nginx/demo.conf:/etc/nginx/conf.d/default.conf:ro
depends_on:
- demo_app
labels:
- "traefik.enable=true"
- "traefik.http.routers.netgescon-demo.rule=Host(`${DEMO_DOMAIN}`)"
- "traefik.http.routers.netgescon-demo.entrypoints=websecure"
- "traefik.http.routers.netgescon-demo.tls=true"
- "traefik.http.routers.netgescon-demo.tls.certresolver=letsencrypt"
- "traefik.http.services.netgescon-demo.loadbalancer.server.port=80"
- "traefik.http.routers.netgescon-demo-http.rule=Host(`${DEMO_DOMAIN}`)"
- "traefik.http.routers.netgescon-demo-http.entrypoints=web"
- "traefik.http.routers.netgescon-demo-http.middlewares=netgescon-https-redirect"
networks:
- netgescon_edge
demo_db:
image: mysql:8.0
container_name: netgescon_demo_db
restart: unless-stopped
command: --log-bin-trust-function-creators=1
environment:
MYSQL_DATABASE: ${DEMO_DB_DATABASE}
MYSQL_USER: ${DEMO_DB_USERNAME}
MYSQL_PASSWORD: ${DEMO_DB_PASSWORD}
MYSQL_ROOT_PASSWORD: ${DEMO_DB_ROOT_PASSWORD}
volumes:
- demo_db:/var/lib/mysql
- ./mysql/init.sql:/docker-entrypoint-initdb.d/01-init.sql:ro
networks:
- netgescon_edge
demo_redis:
image: redis:alpine
container_name: netgescon_demo_redis
restart: unless-stopped
volumes:
- demo_redis:/data
networks:
- netgescon_edge
presentation_www:
image: nginx:alpine
container_name: netgescon_www
restart: unless-stopped
volumes:
- ./www:/usr/share/nginx/html:ro
labels:
- "traefik.enable=true"
- "traefik.http.routers.netgescon-www.rule=Host(`${WWW_DOMAIN}`)"
- "traefik.http.routers.netgescon-www.entrypoints=websecure"
- "traefik.http.routers.netgescon-www.tls=true"
- "traefik.http.routers.netgescon-www.tls.certresolver=letsencrypt"
- "traefik.http.services.netgescon-www.loadbalancer.server.port=80"
- "traefik.http.routers.netgescon-www-http.rule=Host(`${WWW_DOMAIN}`)"
- "traefik.http.routers.netgescon-www-http.entrypoints=web"
- "traefik.http.routers.netgescon-www-http.middlewares=netgescon-https-redirect"
networks:
- netgescon_edge
volumes:
netgescon_letsencrypt:
prod_db:
prod_storage:
prod_cache:
prod_public:
prod_redis:
demo_db:
demo_storage:
demo_cache:
demo_public:
demo_redis:
networks:
netgescon_edge:
driver: bridge