151 lines
5.0 KiB
Docker
151 lines
5.0 KiB
Docker
FROM php:8.1-fpm
|
|
|
|
# System dependencies
|
|
RUN set -eux; \
|
|
\
|
|
apt-get update; \
|
|
apt-get install -y --no-install-recommends \
|
|
git \
|
|
librsvg2-bin \
|
|
imagemagick \
|
|
# Required for SyntaxHighlighting
|
|
python3 \
|
|
nginx \
|
|
libnginx-mod-http-lua \
|
|
nano \
|
|
dnsutils \
|
|
; \
|
|
rm -rf /var/lib/apt/lists/*
|
|
|
|
# Install the PHP extensions we need
|
|
RUN set -eux; \
|
|
\
|
|
savedAptMark="$(apt-mark showmanual)"; \
|
|
\
|
|
apt-get update; \
|
|
apt-get install -y --no-install-recommends \
|
|
libicu-dev \
|
|
libonig-dev \
|
|
; \
|
|
\
|
|
docker-php-ext-install -j "$(nproc)" \
|
|
intl \
|
|
mbstring \
|
|
mysqli \
|
|
opcache \
|
|
sockets \
|
|
calendar \
|
|
; \
|
|
\
|
|
pecl install APCu-5.1.22; \
|
|
docker-php-ext-enable \
|
|
apcu \
|
|
; \
|
|
rm -r /tmp/pear; \
|
|
\
|
|
# 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 "$(php -r 'echo ini_get("extension_dir");')"/*.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/*
|
|
|
|
# set recommended PHP.ini settings
|
|
# see https://secure.php.net/manual/en/opcache.installation.php
|
|
RUN { \
|
|
echo 'opcache.memory_consumption=128'; \
|
|
echo 'opcache.interned_strings_buffer=8'; \
|
|
echo 'opcache.max_accelerated_files=4000'; \
|
|
echo 'opcache.revalidate_freq=60'; \
|
|
} > /usr/local/etc/php/conf.d/opcache-recommended.ini
|
|
RUN echo 'realpath_cache_size = 4096k;' > /usr/local/etc/php/conf.d/realpath_cache_size.ini
|
|
|
|
# Redis
|
|
RUN pecl install -o -f redis \
|
|
&& rm -rf /tmp/pear \
|
|
&& docker-php-ext-enable redis
|
|
|
|
# Jobs
|
|
RUN apt-get update && apt-get -y install cron && rm -rf /var/lib/apt/lists/*
|
|
COPY jobs-cron /etc/cron.d/jobs-cron
|
|
RUN chmod 0644 /etc/cron.d/jobs-cron
|
|
RUN crontab /etc/cron.d/jobs-cron
|
|
|
|
RUN cp $PHP_INI_DIR/php.ini-development $PHP_INI_DIR/php.ini
|
|
RUN echo 'memory_limit = 4G' >> /usr/local/etc/php/conf.d/docker-php-memlimit.ini;
|
|
|
|
RUN apt-get update && apt-get install -y wget unzip && rm -rf /var/lib/apt/lists/*
|
|
|
|
# Imagick
|
|
RUN apt-get update && apt-get install -y libmagickwand-dev libmagickcore-dev && rm -rf /var/lib/apt/lists/* && pecl install -o -f imagick \
|
|
&& rm -rf /tmp/pear \
|
|
&& docker-php-ext-enable imagick
|
|
|
|
# Version
|
|
ENV MEDIAWIKI_MAJOR_VERSION 1.39
|
|
ENV MEDIAWIKI_VERSION 1.39.1
|
|
|
|
WORKDIR /var/www/html
|
|
|
|
COPY nginx_config /etc/nginx/sites-available/default
|
|
RUN mkdir -p /var/cache/nginx && chown www-data:www-data /var/cache/nginx && mkdir /var/www/html/sitemap && chown www-data:www-data /var/www/html/sitemap
|
|
|
|
COPY nginx.conf /etc/nginx/nginx.conf
|
|
COPY robots.txt /var/www/html/robots.txt
|
|
|
|
# MediaWiki setup
|
|
RUN set -eux; \
|
|
fetchDeps=" \
|
|
gnupg \
|
|
dirmngr \
|
|
"; \
|
|
apt-get update; \
|
|
apt-get install -y --no-install-recommends $fetchDeps; \
|
|
\
|
|
curl -fSL "https://releases.wikimedia.org/mediawiki/${MEDIAWIKI_MAJOR_VERSION}/mediawiki-${MEDIAWIKI_VERSION}.tar.gz" -o mediawiki.tar.gz; \
|
|
curl -fSL "https://releases.wikimedia.org/mediawiki/${MEDIAWIKI_MAJOR_VERSION}/mediawiki-${MEDIAWIKI_VERSION}.tar.gz.sig" -o mediawiki.tar.gz.sig; \
|
|
export GNUPGHOME="$(mktemp -d)"; \
|
|
# gpg key from https://www.mediawiki.org/keys/keys.txt
|
|
gpg --batch --keyserver keyserver.ubuntu.com --recv-keys \
|
|
D7D6767D135A514BEB86E9BA75682B08E8A3FEC4 \
|
|
441276E9CCD15F44F6D97D18C119E1A64D70938E \
|
|
F7F780D82EBFB8A56556E7EE82403E59F9F8CD79 \
|
|
1D98867E82982C8FE0ABC25F9B69B3109D3BB7B0 \
|
|
; \
|
|
gpg --batch --verify mediawiki.tar.gz.sig mediawiki.tar.gz; \
|
|
tar -x --strip-components=1 -f mediawiki.tar.gz; \
|
|
gpgconf --kill all; \
|
|
rm -r "$GNUPGHOME" mediawiki.tar.gz.sig mediawiki.tar.gz; \
|
|
chown -R www-data:www-data extensions skins cache images; \
|
|
\
|
|
apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false $fetchDeps; \
|
|
rm -rf /var/lib/apt/lists/*
|
|
|
|
|
|
|
|
# Plugins
|
|
COPY ./extensions /var/www/html/extensions
|
|
COPY ./skins /var/www/html/skins
|
|
|
|
COPY composer.local.json /var/www/html/
|
|
|
|
|
|
RUN mkdir -p /usr/local/bin && wget -O composer-setup.php https://getcomposer.org/installer && php composer-setup.php --install-dir=/usr/local/bin --filename=composer && rm composer-setup.php && ls -la /usr/local/bin/composer
|
|
|
|
RUN cd /var/www/html/ && COMPOSER=composer.local.json /usr/local/bin/composer config --no-plugins allow-plugins.composer/installers true
|
|
RUN cd /var/www/html/ && COMPOSER=composer.local.json /usr/local/bin/composer config --no-plugins allow-plugins.wikimedia/composer-merge-plugin true
|
|
RUN cd /var/www/html/ && COMPOSER=composer.local.json /usr/local/bin/composer install --no-dev --apcu-autoloader --optimize-autoloader
|
|
RUN cd /var/www/html/ && COMPOSER=composer.local.json /usr/local/bin/composer update --no-dev --apcu-autoloader --optimize-autoloader
|
|
RUN cd /var/www/html/ && /usr/local/bin/composer config --no-plugins allow-plugins.composer/installers true
|
|
RUN cd /var/www/html/ && /usr/local/bin/composer update --no-dev --apcu-autoloader --optimize-autoloader
|
|
|
|
EXPOSE 80
|
|
CMD php-fpm -F & nginx -g 'daemon off;' & cron -f
|