-
Notifications
You must be signed in to change notification settings - Fork 9
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
7 changed files
with
455 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,160 @@ | ||
|
||
FROM php:8.1-apache | ||
|
||
LABEL vendor="Artifakt" \ | ||
author="engineering@artifakt.io" \ | ||
stage="alpha" | ||
|
||
HEALTHCHECK --interval=1m --timeout=30s --retries=3 CMD curl --fail http://localhost || exit 1 | ||
|
||
# persistent dependencies | ||
RUN set -eux; \ | ||
apt-get update; \ | ||
apt-get install -y --no-install-recommends \ | ||
# Ghostscript is required for rendering PDF previews | ||
ghostscript \ | ||
; \ | ||
rm -rf /var/lib/apt/lists/* | ||
|
||
# install the PHP extensions we need (https://make.wordpress.org/hosting/handbook/handbook/server-environment/#php-extensions) | ||
RUN set -ex; \ | ||
\ | ||
savedAptMark="$(apt-mark showmanual)"; \ | ||
\ | ||
apt-get update; \ | ||
apt-get install -y --no-install-recommends \ | ||
libfreetype6-dev \ | ||
libjpeg-dev \ | ||
libmagickwand-dev \ | ||
libpng-dev \ | ||
libwebp-dev \ | ||
libzip-dev \ | ||
; \ | ||
\ | ||
docker-php-ext-configure gd \ | ||
--with-freetype \ | ||
--with-jpeg \ | ||
--with-webp \ | ||
; \ | ||
docker-php-ext-install -j "$(nproc)" \ | ||
bcmath \ | ||
exif \ | ||
gd \ | ||
mysqli \ | ||
zip \ | ||
; \ | ||
# https://pecl.php.net/package/imagick | ||
pecl install imagick-3.6.0; \ | ||
docker-php-ext-enable imagick; \ | ||
rm -r /tmp/pear; \ | ||
\ | ||
# some misbehaving extensions end up outputting to stdout 🙈 (https://github.com/docker-library/wordpress/issues/669#issuecomment-993945967) | ||
out="$(php -r 'exit(0);')"; \ | ||
[ -z "$out" ]; \ | ||
err="$(php -r 'exit(0);' 3>&1 1>&2 2>&3)"; \ | ||
[ -z "$err" ]; \ | ||
\ | ||
extDir="$(php -r 'echo ini_get("extension_dir");')"; \ | ||
[ -d "$extDir" ]; \ | ||
# reset apt-mark's "manual" list so that "purge --auto-remove" will remove all build dependencies | ||
apt-mark auto '.*' > /dev/null; \ | ||
apt-mark manual $savedAptMark; \ | ||
ldd "$extDir"/*.so \ | ||
| awk '/=>/ { print $3 }' \ | ||
| sort -u \ | ||
| xargs -r dpkg-query -S \ | ||
| cut -d: -f1 \ | ||
| sort -u \ | ||
| xargs -rt apt-mark manual; \ | ||
\ | ||
apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false; \ | ||
rm -rf /var/lib/apt/lists/*; \ | ||
\ | ||
! { ldd "$extDir"/*.so | grep 'not found'; }; \ | ||
# check for output like "PHP Warning: PHP Startup: Unable to load dynamic library 'foo' (tried: ...) | ||
err="$(php --version 3>&1 1>&2 2>&3)"; \ | ||
[ -z "$err" ] | ||
|
||
# set recommended PHP.ini settings | ||
# see https://secure.php.net/manual/en/opcache.installation.php | ||
RUN set -eux; \ | ||
docker-php-ext-enable opcache; \ | ||
{ \ | ||
echo 'opcache.memory_consumption=128'; \ | ||
echo 'opcache.interned_strings_buffer=8'; \ | ||
echo 'opcache.max_accelerated_files=4000'; \ | ||
echo 'opcache.revalidate_freq=2'; \ | ||
echo 'opcache.fast_shutdown=1'; \ | ||
} > /usr/local/etc/php/conf.d/opcache-recommended.ini | ||
# https://wordpress.org/support/article/editing-wp-config-php/#configure-error-logging | ||
RUN { \ | ||
# https://www.php.net/manual/en/errorfunc.constants.php | ||
# https://github.com/docker-library/wordpress/issues/420#issuecomment-517839670 | ||
echo 'error_reporting = E_ERROR | E_WARNING | E_PARSE | E_CORE_ERROR | E_CORE_WARNING | E_COMPILE_ERROR | E_COMPILE_WARNING | E_RECOVERABLE_ERROR'; \ | ||
echo 'display_errors = Off'; \ | ||
echo 'display_startup_errors = Off'; \ | ||
echo 'log_errors = On'; \ | ||
echo 'error_log = /dev/stderr'; \ | ||
echo 'log_errors_max_len = 1024'; \ | ||
echo 'ignore_repeated_errors = On'; \ | ||
echo 'ignore_repeated_source = Off'; \ | ||
echo 'html_errors = Off'; \ | ||
} > /usr/local/etc/php/conf.d/error-logging.ini | ||
|
||
RUN set -eux; \ | ||
a2enmod rewrite expires; \ | ||
\ | ||
# https://httpd.apache.org/docs/2.4/mod/mod_remoteip.html | ||
a2enmod remoteip; \ | ||
{ \ | ||
echo 'RemoteIPHeader X-Forwarded-For'; \ | ||
# these IP ranges are reserved for "private" use and should thus *usually* be safe inside Docker | ||
echo 'RemoteIPTrustedProxy 10.0.0.0/8'; \ | ||
echo 'RemoteIPTrustedProxy 172.16.0.0/12'; \ | ||
echo 'RemoteIPTrustedProxy 192.168.0.0/16'; \ | ||
echo 'RemoteIPTrustedProxy 169.254.0.0/16'; \ | ||
echo 'RemoteIPTrustedProxy 127.0.0.0/8'; \ | ||
} > /etc/apache2/conf-available/remoteip.conf; \ | ||
a2enconf remoteip; \ | ||
# https://github.com/docker-library/wordpress/issues/383#issuecomment-507886512 | ||
# (replace all instances of "%h" with "%a" in LogFormat) | ||
find /etc/apache2 -type f -name '*.conf' -exec sed -ri 's/([[:space:]]*LogFormat[[:space:]]+"[^"]*)%h([^"]*")/\1%a\2/g' '{}' + | ||
|
||
# run custom scripts wordpress_install.sh | ||
# hadolint ignore=SC1091 | ||
RUN --mount=source=artifakt-custom-build-args,target=/tmp/build-args \ | ||
if [ -f /tmp/build-args ]; then source /tmp/build-args; fi && \ | ||
if [ -f /artifakt_scripts/wordpress_install.sh ]; then /artifakt_scripts/wordpress_install.sh; fi | ||
|
||
################################### END OF OFFICIAL WORDPRESS ### | ||
|
||
# Force HTTPS on mode | ||
ENV HTTPS=on | ||
|
||
# hadolint ignore=SC2016 | ||
RUN echo 'SetEnv HTTPS on' > /etc/apache2/conf-enabled/force-ssl.conf | ||
|
||
# run custom scripts apt_get_install.sh | ||
# hadolint ignore=SC1091 | ||
RUN --mount=source=artifakt-custom-build-args,target=/tmp/build-args \ | ||
if [ -f /tmp/build-args ]; then source /tmp/build-args; fi && \ | ||
if [ -f /artifakt_scripts/apt_get_install.sh ]; then /artifakt_scripts/apt_get_install.sh; fi | ||
|
||
# Install composer | ||
RUN --mount=source=artifakt-custom-build-args,target=/tmp/build-args \ | ||
if [ -f /tmp/build-args ]; then source /tmp/build-args; fi && \ | ||
if [ -f /artifakt_scripts/composer_setup.sh ]; then /artifakt_scripts/composer_setup.sh; fi | ||
|
||
# Install WP CLI | ||
RUN curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar && \ | ||
chmod +x wp-cli.phar && \ | ||
mv wp-cli.phar /usr/local/bin/wp | ||
|
||
# hadolint ignore=DL3045 | ||
# Add default configuration files | ||
COPY --chown=www-data:www-data etc/wp-config.php /var/www/html/ | ||
|
||
COPY docker-entrypoint.sh /usr/local/bin/ | ||
|
||
ENTRYPOINT ["/usr/local/bin/docker-entrypoint.sh"] | ||
CMD ["apache2-foreground"] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
#!/bin/bash | ||
|
||
echo "CHECKING if more dependencies need to be installed" | ||
|
||
if [ -n "$APT_GET_INSTALL" ]; then | ||
echo "Depedencies found. Installing $APT_GET_INSTALL" | ||
apt-get update --fix-missing | ||
for i in $APT_GET_INSTALL; do | ||
echo "Install $i" | ||
sudo apt-get install -y "$i" | ||
done | ||
rm -rf /var/lib/apt/lists/* | ||
echo "Install done." | ||
else | ||
echo "No dependencies to add." | ||
fi |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
#!/bin/bash | ||
|
||
if [ -z "$ARTIFAKT_COMPOSER_VERSION" ]; then ARTIFAKT_COMPOSER_VERSION="2.3.7"; fi | ||
curl -sS https://getcomposer.org/installer | \ | ||
php -- --version="${ARTIFAKT_COMPOSER_VERSION}" --install-dir=/usr/local/bin --filename=composer | ||
|
||
mkdir -p /var/www/.composer && chown www-data:www-data -R /var/www/.composer |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,39 @@ | ||
#!/bin/bash | ||
|
||
if [ -z "$WORDPRESS_VERSION" ]; then WORDPRESS_VERSION="6.1.1"; fi | ||
|
||
set -eux; \ | ||
sha1='80f0f829645dec07c68bcfe0a0a1e1d563992fcb'; \ | ||
curl -o wordpress.tar.gz -fL "https://wordpress.org/wordpress-$WORDPRESS_VERSION.tar.gz"; \ | ||
echo "$sha1 *wordpress.tar.gz" | sha1sum -c -; \ | ||
\ | ||
# upstream tarballs include ./wordpress/ so this gives us /usr/src/wordpress | ||
tar -xzf wordpress.tar.gz -C /usr/src/; \ | ||
rm wordpress.tar.gz; \ | ||
\ | ||
# https://wordpress.org/support/article/htaccess/ | ||
[ ! -e /usr/src/wordpress/.htaccess ]; \ | ||
{ \ | ||
echo '# BEGIN WordPress'; \ | ||
echo ''; \ | ||
echo 'RewriteEngine On'; \ | ||
echo 'RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]'; \ | ||
echo 'RewriteBase /'; \ | ||
echo 'RewriteRule ^index\.php$ - [L]'; \ | ||
echo 'RewriteCond %{REQUEST_FILENAME} !-f'; \ | ||
echo 'RewriteCond %{REQUEST_FILENAME} !-d'; \ | ||
echo 'RewriteRule . /index.php [L]'; \ | ||
echo ''; \ | ||
echo '# END WordPress'; \ | ||
} > /usr/src/wordpress/.htaccess; \ | ||
\ | ||
chown -R www-data:www-data /usr/src/wordpress; \ | ||
# pre-create wp-content (and single-level children) for folks who want to bind-mount themes, etc so permissions are pre-created properly instead of root:root | ||
# wp-content/cache: https://github.com/docker-library/wordpress/issues/534#issuecomment-705733507 | ||
mkdir wp-content; \ | ||
for dir in /usr/src/wordpress/wp-content/*/ cache; do \ | ||
dir="$(basename "${dir%/}")"; \ | ||
mkdir "wp-content/$dir"; \ | ||
done; \ | ||
chown -R www-data:www-data wp-content; \ | ||
chmod -R 777 wp-content |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
#!/bin/bash | ||
set -e | ||
|
||
PERSISTENT_FOLDER_LIST=('wp-content/cache' 'wp-content/uploads' 'wp-content/backups' 'wp-content/backup-db' 'wp-content/upgrade') | ||
|
||
for persistent_folder in "${PERSISTENT_FOLDER_LIST[@]}"; do | ||
echo "Mount $persistent_folder directory" | ||
rm -rf "/var/www/html/$persistent_folder" && \ | ||
mkdir -p "/data/$persistent_folder" && \ | ||
ln -sfn "/data/$persistent_folder" "/var/www/html/$persistent_folder" && \ | ||
chown -h www-data:www-data "/var/www/html/$persistent_folder" "/data/$persistent_folder" | ||
done | ||
|
||
# first arg is `-f` or `--some-option` | ||
if [ "${1#-}" != "$1" ]; then | ||
set -- apache2-foreground "$@" | ||
fi | ||
|
||
exec "$@" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,84 @@ | ||
<?php | ||
/** | ||
* The base configuration for WordPress | ||
* | ||
* The wp-config.php creation script uses this file during the | ||
* installation. You don't have to use the web site, you can | ||
* copy this file to "wp-config.php" and fill in the values. | ||
* | ||
* This file contains the following configurations: | ||
* | ||
* * MySQL settings | ||
* * Secret keys | ||
* * Database table prefix | ||
* * ABSPATH | ||
* | ||
* @link https://wordpress.org/support/article/editing-wp-config-php/ | ||
* | ||
* @package WordPress | ||
*/ | ||
|
||
// ** MySQL settings - You can get this info from your web host ** // | ||
/** The name of the database for WordPress */ | ||
define( 'DB_NAME', $_ENV['ARTIFAKT_MYSQL_DATABASE_NAME'] ); | ||
|
||
/** MySQL database username */ | ||
define( 'DB_USER', $_ENV['ARTIFAKT_MYSQL_USER'] ); | ||
|
||
/** MySQL database password */ | ||
define( 'DB_PASSWORD', $_ENV['ARTIFAKT_MYSQL_PASSWORD'] ); | ||
|
||
/** MySQL hostname */ | ||
define( 'DB_HOST', $_ENV['ARTIFAKT_MYSQL_HOST'] ); | ||
|
||
/** Database Charset to use in creating database tables. */ | ||
define( 'DB_CHARSET', 'utf8' ); | ||
|
||
/** The Database Collate type. Don't change this if in doubt. */ | ||
define( 'DB_COLLATE', '' ); | ||
|
||
/**#@+ | ||
* Authentication Unique Keys and Salts. | ||
* | ||
* Change these to different unique phrases! | ||
* You can generate these using the {@link https://api.wordpress.org/secret-key/1.1/salt/ WordPress.org secret-key service} | ||
* You can change these at any point in time to invalidate all existing cookies. This will force all users to have to log in again. | ||
* | ||
* @since 2.6.0 | ||
*/ | ||
include "/data/secret-key.php"; | ||
|
||
/**#@-*/ | ||
|
||
/** | ||
* WordPress Database Table prefix. | ||
* | ||
* You can have multiple installations in one database if you give each | ||
* a unique prefix. Only numbers, letters, and underscores please! | ||
*/ | ||
$table_prefix = ($_ENV['TABLE_PREFIX'] != '') ? $_ENV['TABLE_PREFIX'] : 'wp_'; | ||
|
||
/** | ||
* For developers: WordPress debugging mode. | ||
* | ||
* Change this to true to enable the display of notices during development. | ||
* It is strongly recommended that plugin and theme developers use WP_DEBUG | ||
* in their development environments. | ||
* | ||
* For information on other constants that can be used for debugging, | ||
* visit the documentation. | ||
* | ||
* @link https://wordpress.org/support/article/debugging-in-wordpress/ | ||
*/ | ||
define( 'WP_DEBUG', ($_ENV['WP_DEBUG'] != '') ? $_ENV['WP_DEBUG'] : false); | ||
define( 'WP_DEBUG_LOG', '/var/log/artifakt/wp-errors.log' ); | ||
|
||
/* That's all, stop editing! Happy publishing. */ | ||
|
||
/** Absolute path to the WordPress directory. */ | ||
if ( ! defined( 'ABSPATH' ) ) { | ||
define( 'ABSPATH', __DIR__ . '/' ); | ||
} | ||
|
||
/** Sets up WordPress vars and included files. */ | ||
require_once ABSPATH . 'wp-settings.php'; |
Oops, something went wrong.