245 lines
9.9 KiB
YAML
Executable File
245 lines
9.9 KiB
YAML
Executable File
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
|
|
- ${TRAEFIK_LETSENCRYPT_PATH:-/srv/netgescon/traefik/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_KEY: ${APP_KEY}
|
|
APP_ENV: production
|
|
APP_DEBUG: "false"
|
|
APP_URL: https://${APP_DOMAIN}
|
|
APP_FORCE_HTTPS: "true"
|
|
SESSION_SECURE_COOKIE: "true"
|
|
NETGESCON_SITE_MODE: app
|
|
NETGESCON_SITE_LABEL: ${PROD_SITE_LABEL:-NetGescon APP}
|
|
NETGESCON_MAINTENANCE_RENDER: ${NETGESCON_MAINTENANCE_RENDER:-errors::503}
|
|
NETGESCON_MAINTENANCE_RETRY: ${NETGESCON_MAINTENANCE_RETRY:-60}
|
|
NETGESCON_MAINTENANCE_REFRESH: ${NETGESCON_MAINTENANCE_REFRESH:-15}
|
|
NETGESCON_MAINTENANCE_TITLE: ${PROD_MAINTENANCE_TITLE:-Aggiornamento APP in corso}
|
|
NETGESCON_MAINTENANCE_MESSAGE: ${PROD_MAINTENANCE_MESSAGE:-Stiamo distribuendo una nuova versione dell'ambiente applicativo.}
|
|
NETGESCON_MAINTENANCE_DETAIL: ${PROD_MAINTENANCE_DETAIL:-Durante questa finestra tecnica i nuovi accessi restano sospesi e il servizio si riapre automaticamente.}
|
|
NETGESCON_MAINTENANCE_SUPPORT_EMAIL: ${MAINTENANCE_SUPPORT_EMAIL:-supporto@netgescon.it}
|
|
NETGESCON_MAINTENANCE_SUPPORT_URL: ${MAINTENANCE_SUPPORT_URL:-}
|
|
NETGESCON_UPDATE_EXECUTOR: ${PROD_UPDATE_EXECUTOR:-local}
|
|
NETGESCON_PREUPDATE_BACKUP_ENABLED: ${PROD_PREUPDATE_BACKUP_ENABLED:-false}
|
|
NETGESCON_PREUPDATE_BACKUP_VISIBLE: ${PROD_PREUPDATE_BACKUP_VISIBLE:-true}
|
|
NETGESCON_PREUPDATE_DRIVE_ENABLED: ${PROD_PREUPDATE_DRIVE_ENABLED:-false}
|
|
NETGESCON_PREUPDATE_REQUIRE_DRIVE: ${PROD_PREUPDATE_REQUIRE_DRIVE:-false}
|
|
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_PATH:-/srv/netgescon/prod/storage}:/var/www/storage
|
|
- ${PROD_CACHE_PATH:-/srv/netgescon/prod/bootstrap-cache}:/var/www/bootstrap/cache
|
|
- ${PROD_PUBLIC_PATH:-/srv/netgescon/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_PATH:-/srv/netgescon/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_DATA_PATH:-/srv/netgescon/prod/mysql}:/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_PATH:-/srv/netgescon/prod/redis}:/data
|
|
networks:
|
|
- netgescon_edge
|
|
|
|
demo_app:
|
|
image: netgescon/app:${NETGESCON_VERSION:-latest}
|
|
container_name: netgescon_demo_app
|
|
restart: unless-stopped
|
|
environment:
|
|
APP_KEY: ${APP_KEY}
|
|
APP_ENV: production
|
|
APP_DEBUG: "false"
|
|
APP_URL: https://${DEMO_DOMAIN}
|
|
APP_FORCE_HTTPS: "true"
|
|
SESSION_SECURE_COOKIE: "true"
|
|
NETGESCON_SITE_MODE: demo
|
|
NETGESCON_SITE_LABEL: ${DEMO_SITE_LABEL:-NetGescon DEMO}
|
|
NETGESCON_MAINTENANCE_RENDER: ${NETGESCON_MAINTENANCE_RENDER:-errors::503}
|
|
NETGESCON_MAINTENANCE_RETRY: ${NETGESCON_MAINTENANCE_RETRY:-60}
|
|
NETGESCON_MAINTENANCE_REFRESH: ${NETGESCON_MAINTENANCE_REFRESH:-15}
|
|
NETGESCON_MAINTENANCE_TITLE: ${DEMO_MAINTENANCE_TITLE:-Aggiornamento DEMO in corso}
|
|
NETGESCON_MAINTENANCE_MESSAGE: ${DEMO_MAINTENANCE_MESSAGE:-L'ambiente demo viene aggiornato in modo controllato prima della prossima distribuzione.}
|
|
NETGESCON_MAINTENANCE_DETAIL: ${DEMO_MAINTENANCE_DETAIL:-Il blocco e temporaneo e viene rimosso automaticamente a fine aggiornamento.}
|
|
NETGESCON_MAINTENANCE_SUPPORT_EMAIL: ${MAINTENANCE_SUPPORT_EMAIL:-supporto@netgescon.it}
|
|
NETGESCON_MAINTENANCE_SUPPORT_URL: ${MAINTENANCE_SUPPORT_URL:-}
|
|
NETGESCON_UPDATE_EXECUTOR: ${DEMO_UPDATE_EXECUTOR:-local}
|
|
NETGESCON_PREUPDATE_BACKUP_ENABLED: ${DEMO_PREUPDATE_BACKUP_ENABLED:-false}
|
|
NETGESCON_PREUPDATE_BACKUP_VISIBLE: ${DEMO_PREUPDATE_BACKUP_VISIBLE:-true}
|
|
NETGESCON_PREUPDATE_DRIVE_ENABLED: ${DEMO_PREUPDATE_DRIVE_ENABLED:-false}
|
|
NETGESCON_PREUPDATE_REQUIRE_DRIVE: ${DEMO_PREUPDATE_REQUIRE_DRIVE:-false}
|
|
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_PATH:-/srv/netgescon/demo/storage}:/var/www/storage
|
|
- ${DEMO_CACHE_PATH:-/srv/netgescon/demo/bootstrap-cache}:/var/www/bootstrap/cache
|
|
- ${DEMO_PUBLIC_PATH:-/srv/netgescon/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_PATH:-/srv/netgescon/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_DATA_PATH:-/srv/netgescon/demo/mysql}:/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_PATH:-/srv/netgescon/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
|
|
|
|
networks:
|
|
netgescon_edge:
|
|
driver: bridge
|