#!/bin/bash {{ if (getenv "PHP_EXTENSIONS") }} docker-php-ext-install {{ getenv "PHP_EXTENSIONS" }} {{ end }} curl -z /usr/local/bin/wp -o /usr/local/bin/wp https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar chmod +x /usr/local/bin/wp {{ if eq (getenv "ENABLE_COMPOSER") "1" }} mkdir -p /var/www/.composer chown www-data:www-data /var/www/.composer /var/www/html/composer curl https://getcomposer.org/installer -o /tmp/composer-setup.php php -r "if (hash_file('sha384', '/tmp/composer-setup.php') === 'e21205b207c3ff031906575712edab6f13eb0b361f2085f1f1237b7126d785e826a450292b6cfd1d64d92e6563bbde02') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;" php /tmp/composer-setup.php rm /tmp/composer-setup.php mv /var/www/html/composer.phar /usr/local/bin/composer {{ end }} {{ if eq (getenv "CORS_ALLOW_ALL") "1" }} a2enmod headers sed -ri -e 's/^([ \t]*)(<\/VirtualHost>)/\1\tHeader set Access-Control-Allow-Origin "*"\n\1\2/g' /etc/apache2/sites-available/*.conf {{ end }} {{ if eq (getenv "DISABLE_WEB_INSTALLER") "1" }} cat > /etc/apache2/conf-enabled/disable-installer.conf <<'EOF' Require all denied EOF {{ end }} {{ if eq (getenv "MULTISITE") "enable" }} export WORDPRESS_CONFIG_EXTRA="$WORDPRESS_CONFIG_EXTRA define('WP_CACHE', false); define('WP_ALLOW_MULTISITE', true );" {{ end }} {{ if or (eq (getenv "MULTISITE") "subdomain") (eq (getenv "MULTISITE") "subfolder") }} export WORDPRESS_CONFIG_EXTRA="$WORDPRESS_CONFIG_EXTRA define('MULTISITE', true); define('SUBDOMAIN_INSTALL', true); define('DOMAIN_CURRENT_SITE', '${DOMAIN}'); define('PATH_CURRENT_SITE', '/'); define('SITE_ID_CURRENT_SITE', 1); define('BLOG_ID_CURRENT_SITE', 1); define('FORCE_SSL_ADMIN', true ); define('COOKIE_DOMAIN', \$_SERVER['HTTP_HOST']);" {{ end }} UPLOADS_HTACCESS=/var/www/html/wp-content/uploads/.htaccess if [ ! -f "$UPLOADS_HTACCESS" ]; then mkdir -p /var/www/html/wp-content/uploads cat > "$UPLOADS_HTACCESS" <<'EOF' # Prevent PHP execution in uploads directory Require all denied EOF fi chown -R --from=root:root www-data:www-data /var/www/html/wp-content/ {{ if eq (getenv "AUTO_INSTALL") "1" }} ( DOMAIN="{{ getenv "DOMAIN" }}" TITLE="{{ getenv "TITLE" }}" ADMIN_EMAIL="{{ getenv "ADMIN_EMAIL" }}" LOCALE="{{ getenv "LOCALE" }}" DEFAULT_USER_ROLE="{{ getenv "DEFAULT_USER_ROLE" }}" AUTO_UPDATES="{{ getenv "AUTO_UPDATES" }}" # Wait for wp-config.php (created by upstream entrypoint) for _ in $(seq 1 30); do if [ -f /var/www/html/wp-config.php ]; then break fi sleep 2 done # Wait for DB to be reachable for _ in $(seq 1 60); do if su -p www-data -s /bin/bash -c "/usr/local/bin/wp db check" 2>/dev/null; then break fi sleep 2 done # Skip if already installed or required vars missing if su -p www-data -s /bin/bash -c "/usr/local/bin/wp core is-installed" 2>/dev/null; then exit 0 fi if [ -z "$TITLE" ] || [ -z "$ADMIN_EMAIL" ]; then exit 0 fi ADMIN="admin" ADMIN_PASSWORD=$(cat /run/secrets/admin_password 2>/dev/null | xargs || true) ADMIN_PASS_ARG="" if [ -n "$ADMIN_PASSWORD" ]; then ADMIN_PASS_ARG="--admin_password=$ADMIN_PASSWORD" fi su -p www-data -s /bin/bash -c "/usr/local/bin/wp core install --url=$DOMAIN --title=\"$TITLE\" --admin_user=$ADMIN --admin_email=$ADMIN_EMAIL --locale=$LOCALE --skip-email $ADMIN_PASS_ARG" if [ -n "$LOCALE" ]; then su -p www-data -s /bin/bash -c "/usr/local/bin/wp language core install $LOCALE" su -p www-data -s /bin/bash -c "/usr/local/bin/wp site switch-language $LOCALE" fi su -p www-data -s /bin/bash -c "/usr/local/bin/wp rewrite structure '/%year%/%monthnum%/%day%/%postname%/'" if [ -n "$DEFAULT_USER_ROLE" ]; then su -p www-data -s /bin/bash -c "/usr/local/bin/wp option set default_role $DEFAULT_USER_ROLE" else su -p www-data -s /bin/bash -c "/usr/local/bin/wp option set default_role subscriber" fi if [ "$AUTO_UPDATES" != "0" ]; then su -p www-data -s /bin/bash -c "/usr/local/bin/wp theme auto-updates enable --all" su -p www-data -s /bin/bash -c "/usr/local/bin/wp plugin auto-updates enable --all" || true fi ) & {{ end }} if [ $# -gt 0 ]; then "$@" fi # Upstream ENTRYPOINT # https://github.com/docker-library/wordpress/blob/master/php7.4/apache/Dockerfile#L120 /usr/local/bin/docker-entrypoint.sh apache2-foreground