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