version: '3.7' services: php: build: context: .. dockerfile: docker/php/Dockerfile args: USER_ID: ${USER_ID} GROUP_ID: ${GROUP_ID} container_name: escapepage-php volumes: - ../:/var/www/html:delegated - /etc/hosts:/etc/hosts:ro environment: APP_ENV: ${APP_ENV} SITE_BASE_URL: ${SITE_BASE_URL} MAILER_DSN: ${MAILER_DSN} MAILER_FROM: ${MAILER_FROM} DATABASE_URL: ${DATABASE_URL} MERCURE_URL: ${MERCURE_URL} MERCURE_PUBLIC_URL: ${MERCURE_PUBLIC_URL} MERCURE_JWT_SECRET: ${MERCURE_JWT_SECRET} MERCURE_CORS_ALLOWED_ORIGINS: ${MERCURE_CORS_ALLOWED_ORIGINS} MERCURE_TOPIC_BASE: ${MERCURE_TOPIC_BASE} RECAPTCHA3_KEY: ${RECAPTCHA3_KEY} RECAPTCHA3_SECRET: ${RECAPTCHA3_SECRET} depends_on: - database - mercure networks: backend: ipv4_address: 172.20.0.10 restart: unless-stopped php-worker: build: context: .. dockerfile: docker/php/Dockerfile args: USER_ID: ${USER_ID} GROUP_ID: ${GROUP_ID} container_name: escapepage-php-worker volumes: - ../:/var/www/html:delegated - /etc/hosts:/etc/hosts:ro environment: APP_ENV: ${APP_ENV} SITE_BASE_URL: ${SITE_BASE_URL} MAILER_DSN: ${MAILER_DSN} MAILER_FROM: ${MAILER_FROM} DATABASE_URL: ${DATABASE_URL} MERCURE_URL: ${MERCURE_URL} MERCURE_PUBLIC_URL: ${MERCURE_PUBLIC_URL} MERCURE_JWT_SECRET: ${MERCURE_JWT_SECRET} MERCURE_CORS_ALLOWED_ORIGINS: ${MERCURE_CORS_ALLOWED_ORIGINS} MERCURE_TOPIC_BASE: ${MERCURE_TOPIC_BASE} RECAPTCHA3_KEY: ${RECAPTCHA3_KEY} RECAPTCHA3_SECRET: ${RECAPTCHA3_SECRET} depends_on: - database - mercure command: ["php", "bin/console", "messenger:consume", "async", "-vv"] networks: backend: ipv4_address: 172.20.0.11 restart: unless-stopped nginx: image: nginx:1.29.4-alpine container_name: escapepage-nginx ports: - "8080:80" - "8443:443" volumes: - ../:/var/www/html:ro - ./nginx/default.conf:/etc/nginx/conf.d/default.conf:ro - ./nginx/ssl:/etc/nginx/ssl:ro - /etc/hosts:/etc/hosts:ro depends_on: - php networks: backend: ipv4_address: 172.20.0.12 restart: unless-stopped mailer: image: axllent/mailpit:latest container_name: escapepage-mailer ports: - "8025:8025" volumes: - /etc/hosts:/etc/hosts:ro networks: backend: ipv4_address: 172.20.0.13 restart: unless-stopped mercure: image: dunglas/mercure:v0.21 container_name: escapepage-mercure environment: SERVER_NAME: ":80" MERCURE_PUBLISHER_JWT_KEY: ${MERCURE_JWT_SECRET} MERCURE_SUBSCRIBER_JWT_KEY: ${MERCURE_JWT_SECRET} MERCURE_CORS_ALLOWED_ORIGINS: ${MERCURE_CORS_ALLOWED_ORIGINS} MERCURE_PUBLISH_ALLOWED_ORIGINS: ${MERCURE_CORS_ALLOWED_ORIGINS} MERCURE_EXTRA_DIRECTIVES: | cors_origins ${MERCURE_CORS_ALLOWED_ORIGINS} publish_origins ${MERCURE_CORS_ALLOWED_ORIGINS} anonymous ports: - "8090:80" volumes: - /etc/hosts:/etc/hosts:ro networks: backend: ipv4_address: 172.20.0.14 restart: unless-stopped ###> doctrine/doctrine-bundle ### database: image: mysql:8.0 container_name: escapepage-db environment: MYSQL_DATABASE: ${DB_NAME} MYSQL_USER: ${DB_USER} MYSQL_PASSWORD: ${DB_PASSWORD} MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD} healthcheck: test: ["CMD", "mysqladmin", "ping", "-h", "127.0.0.1", "-uroot", "-p${MYSQL_ROOT_PASSWORD}"] interval: 10s timeout: 5s retries: 10 start_period: 30s command: ["--default-authentication-plugin=mysql_native_password", "--character-set-server=utf8mb4", "--collation-server=utf8mb4_unicode_ci"] volumes: - ../var/volumes/db:/var/lib/mysql:rw - ./mysql/init:/docker-entrypoint-initdb.d:ro - /etc/hosts:/etc/hosts:ro # Uncomment the two lines below if you need to access MySQL from your host (workbench, etc.) ports: - "3306:3306" networks: backend: ipv4_address: 172.20.0.15 restart: unless-stopped ###< doctrine/doctrine-bundle ### ###> doctrine/doctrine-bundle ### ###< doctrine/doctrine-bundle ### networks: backend: driver: bridge ipam: config: - subnet: 172.20.0.0/16