# wordpress and cron are the same image and MUST share the same # environment: the official image's wp-config.php reads getenv() live, at # PHP runtime, in whichever container is executing — it does not bake # values into the file once. If cron's env drifts from wordpress's (e.g. # WORDPRESS_CONFIG_EXTRA missing), cron silently loses WP_REDIS_HOST, # DISABLE_WP_CRON, etc. The anchor below is what prevents that drift. x-bookstore-env: &bookstore-env WORDPRESS_DB_HOST: db WORDPRESS_DB_NAME: ${DB_NAME} WORDPRESS_DB_USER: ${DB_USER} WORDPRESS_DB_PASSWORD: ${DB_PASSWORD} WORDPRESS_TABLE_PREFIX: ${WP_TABLE_PREFIX:-wp_} MAIL_CATCHER_HOST: mailhog MAIL_CATCHER_PORT: 1025 WORDPRESS_CONFIG_EXTRA: | define('DISABLE_WP_CRON', true); define('WP_REDIS_HOST', 'redis'); define('WP_MEMORY_LIMIT', '256M'); # Passed through for the bookstore-core plugin's supplier adapters / # payment integration (design doc §04/§05) — not read by WordPress core. ACTIVE_SUPPLIER_ADAPTERS: ${ACTIVE_SUPPLIER_ADAPTERS:-gutenberg_test} BOOKSRUN_API_KEY: ${BOOKSRUN_API_KEY:-} INGRAM_API_KEY: ${INGRAM_API_KEY:-} INGRAM_ACCOUNT_ID: ${INGRAM_ACCOUNT_ID:-} HELCIM_API_TOKEN: ${HELCIM_API_TOKEN:-} HELCIM_ACCOUNT_ID: ${HELCIM_ACCOUNT_ID:-} MAILERLITE_API_KEY: ${MAILERLITE_API_KEY:-} services: db: image: mariadb:11 restart: unless-stopped environment: MARIADB_DATABASE: ${DB_NAME} MARIADB_USER: ${DB_USER} MARIADB_PASSWORD: ${DB_PASSWORD} MARIADB_ROOT_PASSWORD: ${DB_ROOT_PASSWORD} volumes: - db_data:/var/lib/mysql healthcheck: test: ["CMD-SHELL", "mariadb-admin ping -h 127.0.0.1 -u$$MARIADB_USER -p$$MARIADB_PASSWORD --silent"] interval: 5s timeout: 5s retries: 20 redis: image: redis:7-alpine restart: unless-stopped volumes: - redis_data:/data healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 5s timeout: 3s retries: 20 wordpress: build: context: ./docker/php restart: unless-stopped depends_on: db: condition: service_healthy redis: condition: service_healthy environment: *bookstore-env volumes: - wp_core:/var/www/html - wp_uploads:/var/www/html/wp-content/uploads - wp_themes:/var/www/html/wp-content/themes - ./wp-content/plugins/bookstore-core:/var/www/html/wp-content/plugins/bookstore-core - ./wp-content/mu-plugins:/var/www/html/wp-content/mu-plugins cron: build: context: ./docker/php restart: unless-stopped depends_on: - wordpress entrypoint: ["/bin/sh", "/usr/local/bin/cron-entrypoint.sh"] environment: *bookstore-env volumes: - wp_core:/var/www/html - wp_uploads:/var/www/html/wp-content/uploads - wp_themes:/var/www/html/wp-content/themes - ./wp-content/plugins/bookstore-core:/var/www/html/wp-content/plugins/bookstore-core - ./wp-content/mu-plugins:/var/www/html/wp-content/mu-plugins - ./docker/cron/entrypoint.sh:/usr/local/bin/cron-entrypoint.sh:ro volumes: db_data: redis_data: wp_core: wp_uploads: wp_themes: