Fix WordPress unable to connect to database
Two bugs found: 1. wp-config-docker.php was being copied to /usr/src/wordpress/wp-config-docker.php, REPLACING the official WordPress config template. Our file only had security hardening settings (DISALLOW_FILE_EDIT, etc.) but no DB constants, auth keys, or table prefix. The generated wp-config.php had zero database configuration, so WordPress could never connect. Fix: Copy our config to /usr/src/websitebox-config.php instead, and load it via WORDPRESS_CONFIG_EXTRA=require_once in docker-compose.yml. 2. .user.ini set auto_prepend_file=wordfence-waf.php, but the file didn't exist until Wordfence plugin was installed. Every PHP request during initial setup returned a 500 fatal error. Fix: Add a stub wordfence-waf.php placeholder in the Docker image that gets copied with WordPress files. Wordfence replaces it during plugin activation. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -44,7 +44,7 @@ services:
|
|||||||
- WORDPRESS_DB_USER=${DB_USER}
|
- WORDPRESS_DB_USER=${DB_USER}
|
||||||
- WORDPRESS_DB_PASSWORD=${DB_PASSWORD}
|
- WORDPRESS_DB_PASSWORD=${DB_PASSWORD}
|
||||||
- WORDPRESS_TABLE_PREFIX=wbox_
|
- WORDPRESS_TABLE_PREFIX=wbox_
|
||||||
- WORDPRESS_CONFIG_EXTRA=
|
- WORDPRESS_CONFIG_EXTRA=require_once '/usr/src/websitebox-config.php';
|
||||||
- AGE_GATE_ENABLED=${AGE_GATE_ENABLED}
|
- AGE_GATE_ENABLED=${AGE_GATE_ENABLED}
|
||||||
- AGE_GATE_MIN_AGE=${AGE_GATE_MIN_AGE}
|
- AGE_GATE_MIN_AGE=${AGE_GATE_MIN_AGE}
|
||||||
- BACKUP_RETENTION_DAYS=${BACKUP_RETENTION_DAYS}
|
- BACKUP_RETENTION_DAYS=${BACKUP_RETENTION_DAYS}
|
||||||
|
|||||||
@@ -22,8 +22,10 @@ RUN echo "pm.status_path = /status" >> /usr/local/etc/php-fpm.d/zz-docker.conf
|
|||||||
# Copy PHP upload config
|
# Copy PHP upload config
|
||||||
COPY uploads.ini /usr/local/etc/php/conf.d/uploads.ini
|
COPY uploads.ini /usr/local/etc/php/conf.d/uploads.ini
|
||||||
|
|
||||||
# Copy wp-config template
|
# Copy extra WordPress config (loaded via WORDPRESS_CONFIG_EXTRA)
|
||||||
COPY wp-config-docker.php /usr/src/wordpress/wp-config-docker.php
|
# Do NOT overwrite /usr/src/wordpress/wp-config-docker.php — that's the official
|
||||||
|
# template that defines DB constants, auth keys, table prefix, etc.
|
||||||
|
COPY wp-config-docker.php /usr/src/websitebox-config.php
|
||||||
|
|
||||||
# Copy child theme and mu-plugins
|
# Copy child theme and mu-plugins
|
||||||
COPY wp-content/themes/websitebox/ /usr/src/websitebox-theme/
|
COPY wp-content/themes/websitebox/ /usr/src/websitebox-theme/
|
||||||
@@ -33,9 +35,12 @@ COPY wp-content/mu-plugins/ /usr/src/websitebox-mu-plugins/
|
|||||||
COPY entrypoint.sh /usr/local/bin/websitebox-entrypoint.sh
|
COPY entrypoint.sh /usr/local/bin/websitebox-entrypoint.sh
|
||||||
RUN chmod +x /usr/local/bin/websitebox-entrypoint.sh
|
RUN chmod +x /usr/local/bin/websitebox-entrypoint.sh
|
||||||
|
|
||||||
# Create Wordfence-compatible .user.ini
|
# Create Wordfence-compatible .user.ini and stub WAF file
|
||||||
|
# The stub prevents PHP fatal errors before Wordfence is installed;
|
||||||
|
# Wordfence will overwrite it with the real WAF during plugin activation.
|
||||||
RUN echo "; Wordfence PHP settings" > /usr/src/wordpress/.user.ini && \
|
RUN echo "; Wordfence PHP settings" > /usr/src/wordpress/.user.ini && \
|
||||||
echo "auto_prepend_file = /var/www/html/wordfence-waf.php" >> /usr/src/wordpress/.user.ini
|
echo "auto_prepend_file = /var/www/html/wordfence-waf.php" >> /usr/src/wordpress/.user.ini && \
|
||||||
|
echo "<?php // Wordfence WAF placeholder - replaced during setup" > /usr/src/wordpress/wordfence-waf.php
|
||||||
|
|
||||||
ENTRYPOINT ["websitebox-entrypoint.sh"]
|
ENTRYPOINT ["websitebox-entrypoint.sh"]
|
||||||
CMD ["php-fpm"]
|
CMD ["php-fpm"]
|
||||||
|
|||||||
Reference in New Issue
Block a user