| Line 1: |
Line 1: |
| | + | [[Category:How to]] |
| | [[Category:Software]] | | [[Category:Software]] |
| − | {{ Note|'''This document is a work in progress and should be considered a draft until this message disappears.''' }}
| |
| − | = Docker MediaWiki Server =
| |
| | Notes and configuration files for setting up MediaWiki in a dockerized environment. | | Notes and configuration files for setting up MediaWiki in a dockerized environment. |
| | | | |
| Line 29: |
Line 28: |
| | ===MediaWiki=== | | ===MediaWiki=== |
| | Copy the following to '''/srv/wiki/docker-compose.yml''' | | Copy the following to '''/srv/wiki/docker-compose.yml''' |
| − | | + | <syntaxhighlight lang="yaml"> |
| − | version: '3'
| + | version: '3' |
| − | services:
| + | services: |
| − | web:
| + | web: |
| − | image: mediawiki
| + | image: mediawiki |
| − | build: build/.
| + | build: build/. |
| − | container_name: wiki
| + | container_name: wiki |
| − | depends_on:
| + | depends_on: |
| − | - database
| + | - database |
| − | ## parsoid is bundled as part of 1.35+, only uncomment if using an older version
| + | ## parsoid is bundled as part of 1.35+, only uncomment if using an older version |
| − | #- parsoid
| + | #- parsoid |
| − | restart: always
| + | restart: always |
| − | ports:
| + | ports: |
| − | - 8080:80
| + | - 80:80 |
| − | links:
| + | links: |
| − | - database
| + | - database |
| − | volumes:
| + | volumes: |
| − | - /srv/wiki/html/images:/var/www/html/images
| + | - /srv/wiki/html/images:/var/www/html/images |
| − | ## TODO: remove the # below AFTER you have downloaded the LocalSettings.php file
| + | ## TODO: remove the # below AFTER you have downloaded the LocalSettings.php file |
| − | #- /srv/wiki/LocalSettings.php:/var/www/html/LocalSettings.php
| + | #- /srv/wiki/LocalSettings.php:/var/www/html/LocalSettings.php |
| − | database:
| + | database: |
| − | image: mariadb
| + | image: mariadb |
| − | container_name: db
| + | container_name: db |
| − | restart: always
| + | restart: always |
| − | environment:
| + | environment: |
| − | MYSQL_DATABASE: mediawiki
| + | MYSQL_DATABASE: mediawiki |
| − | ## TODO: Change the password below
| + | ## TODO: Change the password below |
| − | MYSQL_USER: wikiuser
| + | MYSQL_USER: wikiuser |
| − | ## TODO: Change the password below
| + | ## TODO: Change the password below |
| − | MYSQL_PASSWORD: wiki
| + | MYSQL_PASSWORD: wiki |
| − | MYSQL_ROOT_PASSWORD: changeme
| + | MYSQL_ROOT_PASSWORD: changeme |
| − | volumes:
| + | volumes: |
| − | - /srv/wiki/db:/var/lib/mysql
| + | - /srv/wiki/db:/var/lib/mysql |
| − |
| + | |
| − | ## parsoid is bundled as part of 1.35+, only uncomment if using an older version
| + | ## parsoid is bundled as part of 1.35+, only uncomment if using an older version |
| − | #parsoid:
| + | #parsoid: |
| − | # image: thenets/parsoid:0.10
| + | # image: thenets/parsoid:0.10 |
| − | # container_name: parsoid
| + | # container_name: parsoid |
| − | # restart: always
| + | # restart: always |
| − | # environment:
| + | # environment: |
| − | # - PARSOID_NUM_WORKERS=0
| + | # - PARSOID_NUM_WORKERS=0 |
| − | # - PARSOID_DOMAIN_wiki=http://web/api.php
| + | # - PARSOID_DOMAIN_wiki=http://web/api.php |
| − | # networks:
| + | </syntaxhighlight> |
| − | # - default
| |
| − | | |
| | | | |
| | ==Internet== | | ==Internet== |
| Line 79: |
Line 76: |
| | | | |
| | ===NGINX-Proxy=== | | ===NGINX-Proxy=== |
| − | Copy the following to '''/srv/nginx-proxy/docker-compose.yml''' | + | *Copy the following to '''/srv/nginx-proxy/docker-compose.yml''' |
| | + | <syntaxhighlight lang="yaml"> |
| | + | version: '2' |
| | + | services: |
| | + | nginx-proxy: |
| | + | image: jwilder/nginx-proxy |
| | + | container_name: nginx-proxy |
| | + | environment: |
| | + | - "HTTPS_METHOD=noredirect" |
| | + | labels: |
| | + | - "com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy" |
| | + | ports: |
| | + | - "80:80" |
| | + | - "443:443" |
| | + | restart: always |
| | + | volumes: |
| | + | - "./data/etc/certs:/etc/nginx/certs" |
| | + | - "./data/etc/nginx/vhost.d:/etc/nginx/vhost.d" |
| | + | - "./data/etc/nginx/htpasswd:/etc/nginx/htpasswd" |
| | + | - "./data/etc/nginx/html:/usr/share/nginx/html" |
| | + | - "./data/etc/nginx/conf.d:/etc/nginx/conf.d" |
| | + | - "/var/run/docker.sock:/tmp/docker.sock:ro" |
| | | | |
| − | version: '2'
| + | letsencrypt: |
| − | services: | + | image: jrcs/letsencrypt-nginx-proxy-companion |
| − | nginx-proxy:
| + | environment: |
| − | image: jwilder/nginx-proxy
| + | ### ToDo: Change to your e-mail address |
| − | container_name: nginx-proxy
| + | # - DEFAULT_EMAIL=admin@demo.io |
| − | environment:
| + | - NGINX_PROXY_CONTAINER=nginx-proxy |
| − | - "HTTPS_METHOD=noredirect"
| + | volumes_from: |
| − | labels:
| + | - nginx-proxy |
| − | - "com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy"
| + | volumes: |
| − | ports:
| + | - /var/run/docker.sock:/var/run/docker.sock:ro |
| − | - "80:80"
| + | - ./data/etc/certs:/etc/nginx/certs:rw |
| − | - "443:443"
| + | restart: always |
| − | restart: always
| + | |
| − | volumes:
| + | networks: |
| − | - "./data/etc/certs:/etc/nginx/certs"
| + | default: |
| − | - "./data/etc/nginx/vhost.d:/etc/nginx/vhost.d"
| + | external: |
| − | - "./data/etc/nginx/htpasswd:/etc/nginx/htpasswd"
| + | name: nginx-proxy |
| − | - "./data/etc/nginx/html:/usr/share/nginx/html"
| + | </syntaxhighlight> |
| − | - "/var/run/docker.sock:/tmp/docker.sock:ro"
| + | |
| − |
| + | *Copy the following to '''/srv/nginx-proxy/data/etc/nginx/conf.d/proxy-settings.conf''' |
| − | letsencrypt:
| + | <syntaxhighlight lang="text"> |
| − | image: jrcs/letsencrypt-nginx-proxy-companion
| + | proxy_connect_timeout 300; |
| − | environment:
| + | proxy_send_timeout 300; |
| − | ### ToDo: Change to your e-mail address
| + | proxy_read_timeout 30m; |
| − | # - DEFAULT_EMAIL=admin@demo.io
| + | send_timeout 300; |
| − | - NGINX_PROXY_CONTAINER=nginx-proxy
| + | </syntaxhighlight> |
| − | volumes_from:
| + | |
| − | - nginx-proxy
| + | Note: Add the following line to the file above for large file upload issues: |
| − | volumes:
| + | <syntaxhighlight lang="text"> |
| − | - /var/run/docker.sock:/var/run/docker.sock:ro
| + | client_max_body_size 5000m; |
| − | - ./data/etc/certs:/etc/nginx/certs:rw
| + | </syntaxhighlight> |
| − | restart: always
| + | You will need to adjust the size to a value suitable for your environment. |
| − |
| |
| − | networks:
| |
| − | default:
| |
| − | external:
| |
| − | name: nginx-proxy
| |
| | | | |
| | ====Create docker network==== | | ====Create docker network==== |
| Line 125: |
Line 138: |
| | ===MediaWiki=== | | ===MediaWiki=== |
| | Copy the following to '''/srv/wiki/docker-compose.yml''' | | Copy the following to '''/srv/wiki/docker-compose.yml''' |
| − | | + | <syntaxhighlight lang="yaml"> |
| − | version: '3'
| + | version: '3' |
| − | services:
| + | services: |
| − | web:
| + | web: |
| − | image: mediawiki
| + | image: mediawiki |
| − | build: build/.
| + | build: build/. |
| − | container_name: wiki
| + | container_name: wiki |
| − | depends_on:
| + | depends_on: |
| − | - database
| + | - database |
| − | ## parsoid is bundled as part of 1.35+, only uncomment if using an older version
| + | ## parsoid is bundled as part of 1.35+, only uncomment if using an older version |
| − | # - parsoid
| + | # - parsoid |
| − | restart: always
| + | restart: always |
| − | environment:
| + | environment: |
| − | ## TODO: CHANGE VIRTUAL_HOST, LETSENCRYPT_HOST, and LETSENCRYPT_EMAIL TO YOUR OWN
| + | ## TODO: CHANGE VIRTUAL_HOST, LETSENCRYPT_HOST, and LETSENCRYPT_EMAIL TO YOUR OWN |
| − | - VIRTUAL_HOST=wiki.example.com
| + | - VIRTUAL_HOST=wiki.example.com |
| − | - HTTPS_METHOD=nohttp
| + | - HTTPS_METHOD=nohttp |
| − | - LETSENCRYPT_HOST=wiki.example.com
| + | - LETSENCRYPT_HOST=wiki.example.com |
| − | - LETSENCRYPT_EMAIL=nobody@example.com
| + | - LETSENCRYPT_EMAIL=nobody@example.com |
| − | links:
| + | links: |
| − | - database
| + | - database |
| − | volumes:
| + | volumes: |
| − | - /srv/wiki/html/images:/var/www/html/images
| + | - /srv/wiki/html/images:/var/www/html/images |
| − | ## TODO: remove the # below AFTER you have downloaded the LocalSettings.php file
| + | ## TODO: remove the # below AFTER you have downloaded the LocalSettings.php file |
| − | #- /srv/wiki/LocalSettings.php:/var/www/html/LocalSettings.php
| + | #- /srv/wiki/LocalSettings.php:/var/www/html/LocalSettings.php |
| − | networks:
| + | networks: |
| − | - default
| + | - default |
| − | - nginx-proxy
| + | - nginx-proxy |
| − |
| + | |
| − | database:
| + | database: |
| − | image: mariadb
| + | image: mariadb |
| − | container_name: db
| + | container_name: db |
| − | restart: always
| + | restart: always |
| − | environment:
| + | environment: |
| − | MYSQL_DATABASE: mediawiki
| + | MYSQL_DATABASE: mediawiki |
| − | MYSQL_USER: wikiuser
| + | MYSQL_USER: wikiuser |
| − | ## TODO: Change the password below
| + | ## TODO: Change the password below |
| − | MYSQL_PASSWORD: wiki
| + | MYSQL_PASSWORD: wiki |
| − | ## TODO: Change the password below
| + | ## TODO: Change the password below |
| − | MYSQL_ROOT_PASSWORD: changeme
| + | MYSQL_ROOT_PASSWORD: changeme |
| − | volumes:
| + | volumes: |
| − | - /srv/wiki/db:/var/lib/mysql
| + | - /srv/wiki/db:/var/lib/mysql |
| − | networks:
| + | networks: |
| − | - default
| + | - default |
| − | ## parsoid is bundled as part of 1.35+, only uncomment if using an older version
| + | ## parsoid is bundled as part of 1.35+, only uncomment if using an older version |
| − | #parsoid:
| + | #parsoid: |
| − | # image: thenets/parsoid:0.10
| + | # image: thenets/parsoid:0.10 |
| − | # container_name: parsoid
| + | # container_name: parsoid |
| − | # restart: always
| + | # restart: always |
| − | # environment:
| + | # environment: |
| − | # - PARSOID_NUM_WORKERS=0
| + | # - PARSOID_NUM_WORKERS=0 |
| − | # - PARSOID_DOMAIN_wiki=http://web/api.php
| + | # - PARSOID_DOMAIN_wiki=http://web/api.php |
| − | # networks:
| + | # networks: |
| − | # - default
| + | # - default |
| | | | |
| − | networks:
| + | networks: |
| − | nginx-proxy:
| + | nginx-proxy: |
| − | external:
| + | external: |
| − | name: nginx-proxy
| + | name: nginx-proxy |
| | + | </syntaxhighlight> |
| | | | |
| | =Mediawiki Docker Image= | | =Mediawiki Docker Image= |
| Line 201: |
Line 215: |
| | | | |
| | Note: You can change the version of the MediaWiki docker image used by changing the FROM line. | | Note: You can change the version of the MediaWiki docker image used by changing the FROM line. |
| − | | + | <syntaxhighlight lang="dockerfile"> |
| − | FROM mediawiki:1.35.3
| + | FROM mediawiki:1.35.3 |
| − | COPY ./extensions /var/www/html/extensions
| + | COPY ./extensions /var/www/html/extensions |
| | + | </syntaxhighlight> |
| | | | |
| | ==== Advanced ==== | | ==== Advanced ==== |
| | Note: You can change the version installed by changing: | | Note: You can change the version installed by changing: |
| − | * ENV MEDIAWIKI_MAJOR_VERSION 1.36 | + | * '''ENV MEDIAWIKI_MAJOR_VERSION 1.36''' |
| − | * ENV MEDIAWIKI_VERSION 1.36.1 | + | * '''ENV MEDIAWIKI_VERSION 1.36.1''' |
| − | * ENV MW_VERSION REL1_36 | + | * '''ENV MW_VERSION REL1_36''' |
| | | | |
| − | To change to version 1.35 (LTS until 2023) you can substitute 1.35, 1.35.3,and REL1_35 for the values above. | + | To change to version 1.35 (LTS until 2023) you can substitute 1.35, 1.35.3, and REL1_35 for the values above. |
| | | | |
| | Copy the following to '''/srv/wiki/build/Dockerfile''' | | Copy the following to '''/srv/wiki/build/Dockerfile''' |
| | + | <syntaxhighlight lang="dockerfile"> |
| | + | FROM php:7.4-apache |
| | + | |
| | + | COPY --from=composer /usr/bin/composer /usr/bin/composer |
| | + | |
| | + | # System dependencies |
| | + | RUN set -eux; \ |
| | + | \ |
| | + | apt-get update; \ |
| | + | apt-get install -y --no-install-recommends \ |
| | + | git \ |
| | + | librsvg2-bin \ |
| | + | imagemagick \ |
| | + | # Required for SyntaxHighlighting |
| | + | python3 \ |
| | + | ; \ |
| | + | 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 \ |
| | + | ; \ |
| | + | \ |
| | + | pecl install APCu-5.1.20; \ |
| | + | 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/* |
| | + | |
| | + | # Enable Short URLs |
| | + | RUN set -eux; \ |
| | + | 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" |
| | + | |
| | + | # 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 |
| | + | |
| | + | # SQLite Directory Setup |
| | + | RUN set -eux; \ |
| | + | mkdir -p /var/www/data; \ |
| | + | chown -R www-data:www-data /var/www/data |
| | + | |
| | + | # Version |
| | + | ENV MEDIAWIKI_MAJOR_VERSION 1.35 |
| | + | ENV MEDIAWIKI_VERSION 1.35.3 |
| | + | ENV MW_VERSION=REL1_35 |
| | + | |
| | + | # Home folder location |
| | + | ENV MW_HOME=/var/www/html |
| | + | |
| | + | |
| | + | # 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/* |
| | + | |
| | + | RUN set -eux; \ |
| | + | apt update; \ |
| | + | apt install -y --no-install-recommends \ |
| | + | unzip |
| | + | |
| | + | ##### Commonly used extensions |
| | + | RUN set -x; \ |
| | + | cd $MW_HOME/extensions \ |
| | + | && git clone --depth 1 -b $MW_VERSION https://gerrit.wikimedia.org/r/p/mediawiki/extensions/Echo \ |
| | + | && git clone --depth 1 -b $MW_VERSION https://gerrit.wikimedia.org/r/p/mediawiki/extensions/Thanks \ |
| | + | && git clone --depth 1 -b $MW_VERSION https://gerrit.wikimedia.org/r/p/mediawiki/extensions/CheckUser |
| | + | |
| | + | # Flow extension |
| | + | RUN set -x; \ |
| | + | cd $MW_HOME/extensions \ |
| | + | && git clone --depth 1 -b $MW_VERSION https://gerrit.wikimedia.org/r/p/mediawiki/extensions/Flow \ |
| | + | && cd Flow \ |
| | + | && composer install --no-dev \ |
| | + | && cd .. |
| | + | |
| | + | ### MediaWiki Language Extension Bundle |
| | + | # Translate |
| | + | RUN set -x; \ |
| | + | cd $MW_HOME/extensions \ |
| | + | && git clone --depth 1 -b $MW_VERSION https://gerrit.wikimedia.org/r/p/mediawiki/extensions/Babel \ |
| | + | && git clone --depth 1 -b $MW_VERSION https://gerrit.wikimedia.org/r/p/mediawiki/extensions/cldr \ |
| | + | && git clone --depth 1 -b $MW_VERSION https://gerrit.wikimedia.org/r/p/mediawiki/extensions/CleanChanges \ |
| | + | && git clone --depth 1 -b $MW_VERSION https://gerrit.wikimedia.org/r/p/mediawiki/extensions/UniversalLanguageSelector |
| | + | |
| | + | ##### ElasticSearch extensions |
| | + | RUN set -x; \ |
| | + | cd $MW_HOME/extensions \ |
| | + | && git clone --depth 1 -b $MW_VERSION https://gerrit.wikimedia.org/r/p/mediawiki/extensions/CirrusSearch \ |
| | + | && git clone --depth 1 -b $MW_VERSION https://gerrit.wikimedia.org/r/p/mediawiki/extensions/Elastica \ |
| | + | && cd Elastica \ |
| | + | && composer install --no-dev \ |
| | + | && cd .. |
| | + | |
| | + | ##### MobileFrontend extension |
| | + | RUN set -x; \ |
| | + | cd $MW_HOME/extensions \ |
| | + | && git clone --depth 1 -b $MW_VERSION https://gerrit.wikimedia.org/r/p/mediawiki/extensions/MobileFrontend |
| | + | |
| | + | ##### ElectronPdfService extension |
| | + | RUN set -x; \ |
| | + | cd $MW_HOME/extensions \ |
| | + | && git clone --depth 1 -b $MW_VERSION https://gerrit.wikimedia.org/r/p/mediawiki/extensions/ElectronPdfService |
| | + | |
| | + | ##### ConfirmAccount, UploadWizard |
| | + | RUN set -x; \ |
| | + | cd $MW_HOME/extensions \ |
| | + | && git clone --depth 1 -b $MW_VERSION https://gerrit.wikimedia.org/r/p/mediawiki/extensions/ConfirmAccount \ |
| | + | && git clone --depth 1 -b $MW_VERSION https://gerrit.wikimedia.org/r/p/mediawiki/extensions/UploadWizard |
| | + | |
| | + | |
| | + | #### Add AutoSitemap extension ** disable if wiki is not reacahble from Internet! |
| | + | RUN set -x; \ |
| | + | cd $MW_HOME/extensions \ |
| | + | && git clone --depth 1 https://github.com/dolfinus/AutoSitemap.git |
| | + | |
| | + | # Copy any other extenions from the ./build/extensions folder |
| | + | COPY ./extensions $MW_HOME/extensions |
| | | | |
| − | FROM php:7.4-apache
| + | CMD ["apache2-foreground"] |
| − |
| + | </syntaxhighlight> |
| − | COPY --from=composer /usr/bin/composer /usr/bin/composer
| |
| − |
| |
| − | # System dependencies
| |
| − | RUN set -eux; \
| |
| − | \
| |
| − | apt-get update; \
| |
| − | apt-get install -y --no-install-recommends \
| |
| − | git \
| |
| − | librsvg2-bin \
| |
| − | imagemagick \
| |
| − | # Required for SyntaxHighlighting
| |
| − | python3 \
| |
| − | ; \
| |
| − | 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 \
| |
| − | ; \
| |
| − | \
| |
| − | pecl install APCu-5.1.20; \
| |
| − | 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/*
| |
| − |
| |
| − | # Enable Short URLs
| |
| − | RUN set -eux; \
| |
| − | 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"
| |
| − |
| |
| − | # 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
| |
| − |
| |
| − | # SQLite Directory Setup
| |
| − | RUN set -eux; \
| |
| − | mkdir -p /var/www/data; \
| |
| − | chown -R www-data:www-data /var/www/data
| |
| − |
| |
| − | # Version
| |
| − | ENV MEDIAWIKI_MAJOR_VERSION 1.35
| |
| − | ENV MEDIAWIKI_VERSION 1.35.3
| |
| − | ENV MW_VERSION=REL1_35
| |
| − |
| |
| − | # Home folder location
| |
| − | ENV MW_HOME=/var/www/html
| |
| − |
| |
| − |
| |
| − | # 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/*
| |
| − |
| |
| − | RUN set -eux; \
| |
| − | apt update; \
| |
| − | apt install -y --no-install-recommends \
| |
| − | unzip
| |
| − |
| |
| − | ##### Commonly used extensions
| |
| − | RUN set -x; \
| |
| − | cd $MW_HOME/extensions \
| |
| − | && git clone --depth 1 -b $MW_VERSION https://gerrit.wikimedia.org/r/p/mediawiki/extensions/Echo \
| |
| − | && git clone --depth 1 -b $MW_VERSION https://gerrit.wikimedia.org/r/p/mediawiki/extensions/Thanks \
| |
| − | && git clone --depth 1 -b $MW_VERSION https://gerrit.wikimedia.org/r/p/mediawiki/extensions/CheckUser
| |
| − |
| |
| − | # Flow extension
| |
| − | RUN set -x; \
| |
| − | cd $MW_HOME/extensions \
| |
| − | && git clone --depth 1 -b $MW_VERSION https://gerrit.wikimedia.org/r/p/mediawiki/extensions/Flow \
| |
| − | && cd Flow \
| |
| − | && composer install --no-dev \
| |
| − | && cd ..
| |
| − |
| |
| − | ### MediaWiki Language Extension Bundle
| |
| − | # Translate
| |
| − | RUN set -x; \
| |
| − | cd $MW_HOME/extensions \
| |
| − | && git clone --depth 1 -b $MW_VERSION https://gerrit.wikimedia.org/r/p/mediawiki/extensions/Babel \
| |
| − | && git clone --depth 1 -b $MW_VERSION https://gerrit.wikimedia.org/r/p/mediawiki/extensions/cldr \
| |
| − | && git clone --depth 1 -b $MW_VERSION https://gerrit.wikimedia.org/r/p/mediawiki/extensions/CleanChanges \
| |
| − | && git clone --depth 1 -b $MW_VERSION https://gerrit.wikimedia.org/r/p/mediawiki/extensions/UniversalLanguageSelector
| |
| − |
| |
| − | ##### ElasticSearch extensions
| |
| − | RUN set -x; \
| |
| − | cd $MW_HOME/extensions \
| |
| − | && git clone --depth 1 -b $MW_VERSION https://gerrit.wikimedia.org/r/p/mediawiki/extensions/CirrusSearch \
| |
| − | && git clone --depth 1 -b $MW_VERSION https://gerrit.wikimedia.org/r/p/mediawiki/extensions/Elastica \
| |
| − | && cd Elastica \
| |
| − | && composer install --no-dev \
| |
| − | && cd ..
| |
| − |
| |
| − | ##### MobileFrontend extension
| |
| − | RUN set -x; \
| |
| − | cd $MW_HOME/extensions \
| |
| − | && git clone --depth 1 -b $MW_VERSION https://gerrit.wikimedia.org/r/p/mediawiki/extensions/MobileFrontend
| |
| − |
| |
| − | ##### ElectronPdfService extension
| |
| − | RUN set -x; \
| |
| − | cd $MW_HOME/extensions \
| |
| − | && git clone --depth 1 -b $MW_VERSION https://gerrit.wikimedia.org/r/p/mediawiki/extensions/ElectronPdfService
| |
| − |
| |
| − | ##### ConfirmAccount, UploadWizard
| |
| − | RUN set -x; \
| |
| − | cd $MW_HOME/extensions \
| |
| − | && git clone --depth 1 -b $MW_VERSION https://gerrit.wikimedia.org/r/p/mediawiki/extensions/ConfirmAccount \
| |
| − | && git clone --depth 1 -b $MW_VERSION https://gerrit.wikimedia.org/r/p/mediawiki/extensions/UploadWizard
| |
| − |
| |
| − |
| |
| − | #### Add AutoSitemap extension ** disable if wiki is not reacahble from Internet!
| |
| − | RUN set -x; \
| |
| − | cd $MW_HOME/extensions \
| |
| − | && git clone --depth 1 https://github.com/dolfinus/AutoSitemap.git
| |
| − |
| |
| − | # Copy any other extenions from the ./build/extensions folder
| |
| − | COPY ./extensions $MW_HOME/extensions
| |
| − |
| |
| − | CMD ["apache2-foreground"]
| |
| | | | |
| | =Running= | | =Running= |
| Line 406: |
Line 422: |
| | * Update the /srv/wiki/docker-compose.yml file with the hostname (or FQDN for Internet), your email, and database passwords. | | * Update the /srv/wiki/docker-compose.yml file with the hostname (or FQDN for Internet), your email, and database passwords. |
| | * Run '''''docker-compose up -d''''' to start | | * Run '''''docker-compose up -d''''' to start |
| − | * Login to wiki to complete setup (use https://<fqdn> specified in the files above) | + | * Login to wiki to complete setup (use http://<hostname/IP> for Intranet or https://<FQDN> for Internet) |
| | | | |
| | ===Database connection details=== | | ===Database connection details=== |
| | * When prompted for the database enter '''db://localhost''' | | * When prompted for the database enter '''db://localhost''' |
| | | | |
| − | ''Note: When prompted have MediaWiki use the same user (root) account for the database that was used for setup. Attempting to use a different user will result in an error and failure. This is due to the MediaWiki setup script attempting to use the database connection string as the hostname for the user (<username>@<connection string>) when granting user access to the database.'' | + | ''Note: When prompted have MediaWiki use the same user account (root) for the database that was used for setup. Attempting to use a different user will result in an error and failure. This is due to the MediaWiki setup script attempting to use the database connection string as the hostname for the user (<username>@<connection string>) when granting user access to the database.'' |
| | | | |
| | ==LocalSettings File== | | ==LocalSettings File== |
| Line 421: |
Line 437: |
| | * chmod 755 the LocalSettings.php file | | * chmod 755 the LocalSettings.php file |
| | * Run '''''docker-compose up -d''''' | | * Run '''''docker-compose up -d''''' |
| − | * Wait a minute then navigate to your wiki with https://<fqdn> | + | * Wait a minute then navigate to your wiki with https://<hostname/IP> for Intranet or https://<FQDN> for Internet. |
| | + | |
| | + | ===Private IPs=== |
| | + | Mediawiki will only use the IP presented by the NGINX Proxy server (which will not be the client's real IP). To have Mediawiki trust the X-Forwarded-For (and record them), add the following to the LocalSettings.php file: |
| | + | <syntaxhighlight lang="php"> |
| | + | # Use X-ForwardedFor instead for Real IP |
| | + | $wgUseCdn = true; |
| | + | $wgCdnServersNoPurge = []; |
| | + | $wgCdnServersNoPurge[] = "172.18.0.0/24"; |
| | + | </syntaxhighlight> |
| | + | Change the '''172.18.0.0/24''' to the subnet your container is using for talking to the NGINX Proxy. |
| | + | |
| | + | Reference: https://www.mediawiki.org/wiki/Manual:$wgUsePrivateIPs |
| | | | |
| | =Misc= | | =Misc= |
| Line 440: |
Line 468: |
| | # Run '''''cd maintenance''''' | | # Run '''''cd maintenance''''' |
| | # Run '''''php update.php''''' | | # Run '''''php update.php''''' |
| | + | |
| | + | ==File uploads== |
| | + | |
| | + | ===Allow .pdf files to be uploaded=== |
| | + | |
| | + | See https://www.mediawiki.org/wiki/Manual:Configuring_file_uploads#Configuring_file_types |
| | + | |
| | + | Add this to your '''LocalSettings.php''' file: |
| | + | <syntaxhighlight lang="php> |
| | + | $wgFileExtensions = array( 'png', 'gif', 'jpg', 'jpeg', 'doc', |
| | + | 'xls', 'mpp', 'pdf', 'ppt', 'tiff', 'bmp', 'docx', 'xlsx', |
| | + | 'pptx', 'ps', 'odt', 'ods', 'odp', 'odg' |
| | + | ); |
| | + | </syntaxhighlight> |
| | + | |
| | + | ===Increase file upload size=== |
| | + | |
| | + | See https://www.mediawiki.org/wiki/Manual:Configuring_file_uploads#Set_maximum_size_for_file_uploads |
| | + | |
| | + | * Add this to your '''LocalSettings.php''' file to allow uploading of 2G files: |
| | + | <syntaxhighlight lang="php> |
| | + | $wgUploadSizeWarning = 2147483647; |
| | + | $wgMaxUploadSize = 2147483647; |
| | + | </syntaxhighlight> |
| | + | * Then create '''/srv/wiki/uploads.ini''' with the following: |
| | + | <syntaxhighlight lang="php> |
| | + | upload_max_filesize = 2048M |
| | + | post_max_size = 2048M |
| | + | max_execution_time = 7200 |
| | + | max_file_uploads = 1000 |
| | + | </syntaxhighlight> |
| | + | * Add the following line to the '''/srv/wiki/docker-compose.yml''' file under volumes |
| | + | |
| | + | - /srv/wiki/uploads.ini:/usr/local/etc/php/conf.d/uploads.ini:ro |