Files
wordpress/entrypoint.sh.tmpl

132 lines
4.4 KiB
Cheetah

#!/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'
<LocationMatch "^/wp-admin/install\.php">
Require all denied
</LocationMatch>
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
<FilesMatch "\.(?i:php|phtml|phar)$">
Require all denied
</FilesMatch>
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