Changes

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