# ============================================================================= # docker/.env for a TEST / STAGING stack (e.g. test.escapepage.com) # ============================================================================= # Copy this to docker/.env inside the *test* checkout and fill in the blanks. # docker/.env is git-ignored, so it never leaves the server. # # Compose reads this file automatically. Anything unique per stack is derived # from COMPOSE_PROJECT_NAME + the *_PORT vars below, so the same compose.yaml # serves both production and this copy. # # Two config layers, don't mix them up: # - THIS file -> consumed by `docker compose` (container names, ports, and the # runtime env it injects into the php containers). # - /.env(.local) -> consumed by Symfony itself (APP_SECRET, # TRUSTED_PROXIES, messenger DSN, CLI database access, ...). # ============================================================================= ## --- Instance identity ------------------------------------------------------- # Both must be unique on the host. # STACK_NAME -> prefix for every container_name (escapepage-test-php …) # COMPOSE_PROJECT_NAME -> compose project: isolates networks, volumes and the # labels that `docker compose down` / *.test.sh act on. # Must be a non-prod value or setup.test.sh / restart.test.sh # refuse to run. STACK_NAME=escapepage-test COMPOSE_PROJECT_NAME=escapepage-test ## --- Published host ports --------------------------------------------------- # Bound to localhost only: the sole public entrypoint is Nginx Proxy Manager, # which reaches the containers over the shared `nginx_default` network by name. # Pick ports that don't clash with the production stack (8080/8443/3306/8090/8025/1025). NGINX_HTTP_PORT=127.0.0.1:8081 NGINX_HTTPS_PORT=127.0.0.1:8444 DB_HOST_PORT=127.0.0.1:3307 MERCURE_HTTP_PORT=127.0.0.1:8091 MAILPIT_UI_PORT=127.0.0.1:8026 MAILPIT_SMTP_PORT=127.0.0.1:1026 ## --- PHP image build ------------------------------------------------------ USER_ID=1000 GROUP_ID=1000 ## --- Symfony runtime (injected into php / php-worker / php-cron) ------------ APP_ENV=prod SITE_BASE_URL=https://test.escapepage.com # Staging should NOT send real mail. Point at the bundled Mailpit and read it # at http://127.0.0.1:8026 on the server (or via an NPM host if you expose it). MAILER_DSN=smtp://mailer:1026 MAILER_FROM=mailer@test.escapepage.com ## --- Database ------------------------------------------------------------- # `database` is the compose *service* name and resolves inside this stack's # own network - keep it as-is. Use its own name + fresh credentials so a mistake # here can never point at the production database. DB_NAME=escapepage_test DB_USER=escapepage DB_PASSWORD=CHANGE_ME_test_db_password MYSQL_ROOT_PASSWORD=CHANGE_ME_test_root_password DATABASE_URL=pdo_mysql://escapepage:CHANGE_ME_test_db_password@database:3306/escapepage_test?serverVersion=8.0.32&charset=utf8mb4 ## --- Mercure ----------------------------------------------------------------- # Internal hub URL (service name, stays the same). Public URL + CORS must be the # test domain. Add a `mercure-test.escapepage.com` proxy host in NPM -> # -mercure:80. MERCURE_URL=http://mercure/.well-known/mercure MERCURE_PUBLIC_URL=https://mercure-test.escapepage.com/.well-known/mercure MERCURE_JWT_SECRET=CHANGE_ME_generate_with_openssl_rand_hex_32 MERCURE_CORS_ALLOWED_ORIGINS="https://test.escapepage.com" MERCURE_TOPIC_BASE=https://test.escapepage.com ## --- reCAPTCHA v3 ---------------------------------------------------------- # Register test.escapepage.com in the reCAPTCHA admin console and paste its keys, # or leave the placeholders and expect the contact / "suggest a room" forms to # fail captcha validation on staging. RECAPTCHA3_KEY=CHANGE_ME_or_reuse_prod_if_domain_added RECAPTCHA3_SECRET=CHANGE_ME_or_reuse_prod_if_domain_added