wikibase/Dockerfile

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