-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathDockerfile
206 lines (184 loc) · 6.04 KB
/
Dockerfile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
FROM php:8.1-apache
LABEL maintainer="[email protected]"
# Version
ENV MEDIAWIKI_MAJOR_VERSION 1.39
ENV MEDIAWIKI_VERSION 1.39.10
# System dependencies
RUN set -eux; \
\
apt-get update; \
apt-get install -y --no-install-recommends \
ffmpeg \
ghostscript \
git \
imagemagick \
librsvg2-bin \
poppler-utils \
# Required for SyntaxHighlighting
python3 \
python3-pygments \
unzip \
webp \
zip \
libavif-bin \
libavif15 \
libheif1 \
libwebp7 \
liblua5.1-0 \
libzip4 \
; \
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 \
libavif-dev \
libicu-dev \
libonig-dev \
libcurl4-gnutls-dev \
libgmp-dev \
libmagickwand-dev \
libxml2-dev \
libzip-dev \
liblua5.1-0-dev \
; \
\
docker-php-ext-configure gd --enable-gd --with-webp --with-jpeg --with-freetype --with-avif; \
docker-php-ext-install -j "$(nproc)" \
calendar \
gd \
gmp \
intl \
mysqli \
opcache \
sockets \
zip \
; \
\
pecl install \
APCu-5.1.21 \
luasandbox \
imagick \
redis \
; \
docker-php-ext-enable \
apcu \
luasandbox \
imagick \
redis \
; \
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/*
# Enable RemoteIP Short URLs
RUN set -eux; \
a2enmod remoteip; \
a2enmod rewrite; \
{ \
echo "<Directory /var/www/html>"; \
echo " RewriteEngine On"; \
echo " RewriteCond %{REQUEST_FILENAME} !-f"; \
echo " RewriteCond %{REQUEST_FILENAME} !-d"; \
echo " RewriteRule ^ %{DOCUMENT_ROOT}/index.php [L]"; \
echo "</Directory>"; \
} > "$APACHE_CONFDIR/conf-available/short-url.conf"; \
a2enconf short-url
# Enable AllowEncodedSlashes for VisualEditor
RUN sed -i "s/<\/VirtualHost>/\tAllowEncodedSlashes NoDecode\n<\/VirtualHost>/" "$APACHE_CONFDIR/sites-available/000-default.conf"; \
sed -i "s/LogFormat \"%h/LogFormat \"%a/" "$APACHE_CONFDIR/apache2.conf"; \
sed -i "s/<\/VirtualHost>/\tRemoteIPHeader X-Forwarded-For\n\tRemoteIPInternalProxy 172.16.0.2\n<\/VirtualHost>/" "$APACHE_CONFDIR/sites-available/000-default.conf"
# 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
# Raise PHP Mem limit and execution time
RUN echo 'memory_limit = 512M' >> /usr/local/etc/php/conf.d/docker-php-memlimit.ini; \
echo 'max_execution_time = 60' >> /usr/local/etc/php/conf.d/docker-php-executiontime.ini
# SQLite Directory Setup
RUN set -eux; \
mkdir -p /var/www/data; \
chown -R www-data:www-data /var/www/data
# 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/*
# Post MediaWiki Setup
COPY --chown=www-data:www-data --chmod=770 ./queue.sh /usr/local/bin/queue
COPY ./config /var/www/
COPY ./includes/libs/mime/MimeMap.php /var/www/html/includes/libs/mime/MimeMap.php
COPY ./includes/page/Article.php /var/www/html/includes/page/Article.php
COPY ./container-config/php-config.ini /usr/local/etc/php/conf.d/php-config.ini
COPY ./container-config/robots.txt /var/www/html/robots.txt
COPY ./container-config/favicon.ico /var/www/html/favicon.ico
COPY --from=composer /usr/bin/composer /usr/bin/composer
COPY ./composer.json /var/www/html/composer.local.json
RUN set -eux; chown -R www-data:www-data /var/www
WORKDIR /var/www/html
USER www-data
RUN set -eux; \
/usr/bin/composer config --no-plugins allow-plugins.composer/installers true; \
/usr/bin/composer install --no-dev \
--ignore-platform-reqs \
--no-ansi \
--no-interaction \
--no-scripts; \
\
/usr/bin/composer update --no-dev \
--no-ansi \
--no-interaction \
--no-scripts; \
\
# Move extension folders to match their name
mv /var/www/html/extensions/Cirrussearch /var/www/html/extensions/CirrusSearch; \
mv /var/www/html/extensions/Oauth /var/www/html/extensions/OAuth; \
mv /var/www/html/extensions/Webauthn /var/www/html/extensions/WebAuthn; \
mv /var/www/html/extensions/Quickinstantcommons /var/www/html/extensions/QuickInstantCommons; \
mv /var/www/html/extensions/Pageviewinfo /var/www/html/extensions/PageViewInfo; \
mv /var/www/html/skins/citizen /var/www/html/skins/Citizen; \
cp /var/www/html/extensions/PictureHtmlSupport/includes/ThumbnailImage.php /var/www/html/includes/media
VOLUME /var/www/html/sitemap
VOLUME /var/www/html/images
EXPOSE 80
CMD ["apache2-foreground"]