Changes

Jump to navigation Jump to search
m
no edit summary
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
   −
    FROM php:7.4-apache
+
COPY --from=composer /usr/bin/composer /usr/bin/composer
−
   
+
 
−
    COPY --from=composer /usr/bin/composer /usr/bin/composer
+
# System dependencies
−
   
+
RUN set -eux; \
−
    # System dependencies
+
\
−
    RUN set -eux; \
+
apt-get update; \
−
    \
+
apt-get install -y --no-install-recommends \
−
    apt-get update; \
+
git \
−
    apt-get install -y --no-install-recommends \
+
librsvg2-bin \
−
    git \
+
imagemagick \
−
    librsvg2-bin \
+
# Required for SyntaxHighlighting
−
    imagemagick \
+
python3 \
−
    # Required for SyntaxHighlighting
+
; \
−
    python3 \
+
rm -rf /var/lib/apt/lists/*
−
    ; \
+
 
−
    rm -rf /var/lib/apt/lists/*
+
# Install the PHP extensions we need
−
   
+
RUN set -eux; \
−
    # Install the PHP extensions we need
+
\
−
    RUN set -eux; \
+
savedAptMark="$(apt-mark showmanual)"; \
−
    \
+
\
−
    savedAptMark="$(apt-mark showmanual)"; \
+
apt-get update; \
−
    \
+
apt-get install -y --no-install-recommends \
−
    apt-get update; \
+
libicu-dev \
−
    apt-get install -y --no-install-recommends \
+
libonig-dev \
−
    libicu-dev \
+
; \
−
    libonig-dev \
+
\
−
    ; \
+
docker-php-ext-install -j "$(nproc)" \
−
    \
+
intl \
−
    docker-php-ext-install -j "$(nproc)" \
+
mbstring \
−
    intl \
+
mysqli \
−
    mbstring \
+
opcache \
−
    mysqli \
+
; \
−
    opcache \
+
\
−
    ; \
+
pecl install APCu-5.1.20; \
−
    \
+
docker-php-ext-enable \
−
    pecl install APCu-5.1.20; \
+
apcu \
−
    docker-php-ext-enable \
+
; \
−
    apcu \
+
rm -r /tmp/pear; \
−
    ; \
+
\
−
    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; \
−
    # reset apt-mark's "manual" list so that "purge --auto-remove" will remove all build dependencies
+
apt-mark manual $savedAptMark; \
−
    apt-mark auto '.*' > /dev/null; \
+
ldd "$(php -r 'echo ini_get("extension_dir");')"/*.so \
−
    apt-mark manual $savedAptMark; \
+
| awk '/=>/ { print $3 }' \
−
    ldd "$(php -r 'echo ini_get("extension_dir");')"/*.so \
+
| sort -u \
−
    | awk '/=>/ { print $3 }' \
+
| xargs -r dpkg-query -S \
−
    | sort -u \
+
| cut -d: -f1 \
−
    | xargs -r dpkg-query -S \
+
| sort -u \
−
    | cut -d: -f1 \
+
| xargs -rt apt-mark manual; \
−
    | sort -u \
+
\
−
    | xargs -rt apt-mark manual; \
+
apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false; \
−
    \
+
rm -rf /var/lib/apt/lists/*
−
    apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false; \
+
 
−
    rm -rf /var/lib/apt/lists/*
+
# Enable Short URLs
−
   
+
RUN set -eux; \
−
    # Enable Short URLs
+
a2enmod rewrite; \
−
    RUN set -eux; \
+
{ \
−
    a2enmod rewrite; \
+
echo "<Directory /var/www/html>"; \
−
    { \
+
echo "  RewriteEngine On"; \
−
    echo "<Directory /var/www/html>"; \
+
echo "  RewriteCond %{REQUEST_FILENAME} !-f"; \
−
    echo "  RewriteEngine On"; \
+
echo "  RewriteCond %{REQUEST_FILENAME} !-d"; \
−
    echo "  RewriteCond %{REQUEST_FILENAME} !-f"; \
+
echo "  RewriteRule ^ %{DOCUMENT_ROOT}/index.php [L]"; \
−
    echo "  RewriteCond %{REQUEST_FILENAME} !-d"; \
+
echo "</Directory>"; \
−
    echo "  RewriteRule ^ %{DOCUMENT_ROOT}/index.php [L]"; \
+
} > "$APACHE_CONFDIR/conf-available/short-url.conf"; \
−
    echo "</Directory>"; \
+
a2enconf short-url
−
    } > "$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"
−
    # 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
−
    # set recommended PHP.ini settings
+
RUN { \
−
    # see https://secure.php.net/manual/en/opcache.installation.php
+
echo 'opcache.memory_consumption=128'; \
−
    RUN { \
+
echo 'opcache.interned_strings_buffer=8'; \
−
    echo 'opcache.memory_consumption=128'; \
+
echo 'opcache.max_accelerated_files=4000'; \
−
    echo 'opcache.interned_strings_buffer=8'; \
+
echo 'opcache.revalidate_freq=60'; \
−
    echo 'opcache.max_accelerated_files=4000'; \
+
} > /usr/local/etc/php/conf.d/opcache-recommended.ini
−
    echo 'opcache.revalidate_freq=60'; \
+
 
−
    } > /usr/local/etc/php/conf.d/opcache-recommended.ini
+
# SQLite Directory Setup
−
   
+
RUN set -eux; \
−
    # SQLite Directory Setup
+
mkdir -p /var/www/data; \
−
    RUN set -eux; \
+
chown -R www-data:www-data /var/www/data
−
    mkdir -p /var/www/data; \
+
 
−
    chown -R www-data:www-data /var/www/data
+
# Version
−
   
+
ENV MEDIAWIKI_MAJOR_VERSION 1.35
−
    # Version
+
ENV MEDIAWIKI_VERSION 1.35.3
−
    ENV MEDIAWIKI_MAJOR_VERSION 1.35
+
ENV MW_VERSION=REL1_35
−
    ENV MEDIAWIKI_VERSION 1.35.3
+
 
−
    ENV MW_VERSION=REL1_35
+
# Home folder location
−
   
+
ENV MW_HOME=/var/www/html
−
    # Home folder location
+
 
−
    ENV MW_HOME=/var/www/html
+
 
−
   
+
# MediaWiki setup
−
   
+
RUN set -eux; \
−
    # MediaWiki setup
+
fetchDeps=" \
−
    RUN set -eux; \
+
gnupg \
−
    fetchDeps=" \
+
dirmngr \
−
    gnupg \
+
"; \
−
    dirmngr \
+
apt-get update; \
−
    "; \
+
apt-get install -y --no-install-recommends $fetchDeps; \
−
    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; \
−
    curl -fSL "https://releases.wikimedia.org/mediawiki/${MEDIAWIKI_MAJOR_VERSION}/mediawiki-${MEDIAWIKI_VERSION}.tar.gz" -o mediawiki.tar.gz; \
+
export GNUPGHOME="$(mktemp -d)"; \
−
    curl -fSL "https://releases.wikimedia.org/mediawiki/${MEDIAWIKI_MAJOR_VERSION}/mediawiki-${MEDIAWIKI_VERSION}.tar.gz.sig" -o mediawiki.tar.gz.sig; \
+
# gpg key from https://www.mediawiki.org/keys/keys.txt
−
    export GNUPGHOME="$(mktemp -d)"; \
+
gpg --batch --keyserver keyserver.ubuntu.com --recv-keys \
−
    # gpg key from https://www.mediawiki.org/keys/keys.txt
+
D7D6767D135A514BEB86E9BA75682B08E8A3FEC4 \
−
    gpg --batch --keyserver keyserver.ubuntu.com --recv-keys \
+
441276E9CCD15F44F6D97D18C119E1A64D70938E \
−
    D7D6767D135A514BEB86E9BA75682B08E8A3FEC4 \
+
F7F780D82EBFB8A56556E7EE82403E59F9F8CD79 \
−
    441276E9CCD15F44F6D97D18C119E1A64D70938E \
+
1D98867E82982C8FE0ABC25F9B69B3109D3BB7B0 \
−
    F7F780D82EBFB8A56556E7EE82403E59F9F8CD79 \
+
; \
−
    1D98867E82982C8FE0ABC25F9B69B3109D3BB7B0 \
+
gpg --batch --verify mediawiki.tar.gz.sig mediawiki.tar.gz; \
−
    ; \
+
tar -x --strip-components=1 -f mediawiki.tar.gz; \
−
    gpg --batch --verify mediawiki.tar.gz.sig mediawiki.tar.gz; \
+
gpgconf --kill all; \
−
    tar -x --strip-components=1 -f mediawiki.tar.gz; \
+
rm -r "$GNUPGHOME" mediawiki.tar.gz.sig mediawiki.tar.gz; \
−
    gpgconf --kill all; \
+
chown -R www-data:www-data extensions skins cache images; \
−
    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/*
−
      apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false $fetchDeps; \
+
 
−
      rm -rf /var/lib/apt/lists/*
+
RUN set -eux; \
−
   
+
        apt update; \
−
    RUN set -eux; \
+
        apt install -y --no-install-recommends \
−
            apt update; \
+
            unzip
−
            apt install -y --no-install-recommends \
+
 
−
                unzip
+
##### Commonly used extensions
−
   
+
RUN set -x; \
−
    ##### Commonly used extensions
+
    cd $MW_HOME/extensions \
−
    RUN set -x; \
+
    && git clone --depth 1 -b $MW_VERSION https://gerrit.wikimedia.org/r/p/mediawiki/extensions/Echo \
−
        cd $MW_HOME/extensions \
+
    && 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/Echo \
+
    && git clone --depth 1 -b $MW_VERSION https://gerrit.wikimedia.org/r/p/mediawiki/extensions/CheckUser
−
        && 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; \
−
    # Flow extension
+
    cd $MW_HOME/extensions \
−
    RUN set -x; \
+
    && git clone --depth 1 -b $MW_VERSION https://gerrit.wikimedia.org/r/p/mediawiki/extensions/Flow \
−
        cd $MW_HOME/extensions \
+
    && cd Flow \
−
        && git clone --depth 1 -b $MW_VERSION https://gerrit.wikimedia.org/r/p/mediawiki/extensions/Flow \
+
    && composer install --no-dev \
−
        && cd Flow \
+
    && cd ..
−
        && composer install --no-dev \
+
 
−
        && cd ..
+
### MediaWiki Language Extension Bundle
−
   
+
# Translate
−
    ### MediaWiki Language Extension Bundle
+
RUN set -x; \
−
    # Translate
+
    cd $MW_HOME/extensions \
−
    RUN set -x; \
+
    && git clone --depth 1 -b $MW_VERSION https://gerrit.wikimedia.org/r/p/mediawiki/extensions/Babel \
−
        cd $MW_HOME/extensions \
+
    && 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/Babel \
+
    && 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/cldr \
+
    && git clone --depth 1 -b $MW_VERSION https://gerrit.wikimedia.org/r/p/mediawiki/extensions/UniversalLanguageSelector
−
        && 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; \
−
    ##### ElasticSearch extensions
+
    cd $MW_HOME/extensions \
−
    RUN set -x; \
+
    && git clone --depth 1 -b $MW_VERSION https://gerrit.wikimedia.org/r/p/mediawiki/extensions/CirrusSearch \
−
        cd $MW_HOME/extensions \
+
    && git clone --depth 1 -b $MW_VERSION https://gerrit.wikimedia.org/r/p/mediawiki/extensions/Elastica \
−
        && git clone --depth 1 -b $MW_VERSION https://gerrit.wikimedia.org/r/p/mediawiki/extensions/CirrusSearch \
+
    && cd Elastica \
−
        && git clone --depth 1 -b $MW_VERSION https://gerrit.wikimedia.org/r/p/mediawiki/extensions/Elastica \
+
    && composer install --no-dev \
−
        && cd Elastica \
+
    && cd ..
−
        && composer install --no-dev \
+
 
−
        && cd ..
+
##### MobileFrontend extension
−
   
+
RUN set -x; \
−
    ##### MobileFrontend extension
+
    cd $MW_HOME/extensions \
−
    RUN set -x; \
+
    && git clone --depth 1 -b $MW_VERSION https://gerrit.wikimedia.org/r/p/mediawiki/extensions/MobileFrontend
−
        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; \
−
    ##### ElectronPdfService extension
+
    cd $MW_HOME/extensions \
−
    RUN set -x; \
+
    && git clone --depth 1 -b $MW_VERSION https://gerrit.wikimedia.org/r/p/mediawiki/extensions/ElectronPdfService
−
        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; \
−
    ##### ConfirmAccount, UploadWizard
+
    cd $MW_HOME/extensions \
−
    RUN set -x; \
+
    && git clone --depth 1 -b $MW_VERSION https://gerrit.wikimedia.org/r/p/mediawiki/extensions/ConfirmAccount \
−
        cd $MW_HOME/extensions \
+
    && git clone --depth 1 -b $MW_VERSION https://gerrit.wikimedia.org/r/p/mediawiki/extensions/UploadWizard
−
        && 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; \
−
    #### Add AutoSitemap extension ** disable if wiki is not reacahble from Internet!
+
    cd $MW_HOME/extensions \
−
    RUN set -x; \
+
    && git clone --depth 1 https://github.com/dolfinus/AutoSitemap.git
−
        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
−
    # Copy any other extenions from the ./build/extensions folder
+
 
−
    COPY ./extensions $MW_HOME/extensions
+
CMD ["apache2-foreground"]
−
   
+
</syntaxhighlight>
−
    CMD ["apache2-foreground"]
      
=Running=
 
=Running=
 
==First start==
 
==First start==
−
* Update the /srv/wiki/docker-compose.yml file with the host, email and database password
+
* 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 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 419: 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 438: 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

Navigation menu