MediaWiki - ArchWiki

Jump to content
From ArchWiki

MediaWiki is a free and open source wiki software written in PHP, originally developed for Wikipedia. It also powers this wiki (see Special:Version and the GitHub repository).

## Installation

To run MediaWiki you need three things:

- the mediawiki package, which pulls in PHP
- a web server, such as Apache HTTP Server, nginx or lighttpd
- a database system – one of MariaDB, PostgreSQL, SQLite or MySQL

To install MediaWiki on XAMPP, see mw:Manual:Installing MediaWiki on XAMPP

## Configuration

The steps to achieve a working MediaWiki configuration involve editing the PHP settings and adding the MediaWiki configuration snippets.

### PHP

MediaWiki requires the `iconv` and the `intl` extensions, so you need to uncomment `extension=iconv` and `extension=intl` in `/etc/php/php.ini`.

Optional dependencies:

- For thumbnail rendering, install either ImageMagick or php-gd. If you choose the latter, you also need to uncomment `extension=gd`.

Enable the API for your DBMS:

- If you use MariaDB, uncomment `extension=mysqli`.
- If you use PostgreSQL, install php-pgsql and uncomment `extension=pgsql`.
- If you use SQLite, install php-sqlite and uncomment `extension=pdo_sqlite`.

Second, tweak the session handling or you might get a fatal error (`PHP Fatal error: session_start(): Failed to initialize storage module[...]`) by finding the `session.save_path` path. A good choice can be `/var/lib/php/sessions` or `/tmp/`.

    /etc/php/php.ini

    session.save_path = "/var/lib/php/sessions"

You will need to create the directory if it does not exist and then restrict its permissions:

    # mkdir -p /var/lib/php/sessions/
    # chown http:http /var/lib/php/sessions
    # chmod go-rwx /var/lib/php/sessions

If you use PHP's open_basedir and want to allow file uploads, you need to include `/var/lib/mediawiki/` (mediawiki symlinks `images/` to `/var/lib/mediawiki/`).

### Web server

#### Apache

Follow Apache HTTP Server#PHP.

Copy `/etc/webapps/mediawiki/apache.example.conf` to `/etc/httpd/conf/extra/mediawiki.conf` and edit it as needed.

Add the following line to `/etc/httpd/conf/httpd.conf`:

    Include conf/extra/mediawiki.conf

Restart the `httpd.service` daemon.

Note: The default file from `/etc/webapps/mediawiki/apache.example.conf` will overwrite the PHP open_basedir setting, possibly conflicting with other pages. This behavior can be changed by moving line starting with `php_admin_value` between the `<Directory>` tags. Further, if you are running multiple applications that depend on the same server, this value could also be added to the open_basedir value in `/etc/php/php.ini` instead of `/etc/httpd/conf/extra/mediawiki.conf`

#### Nginx

The factual accuracy of this article or section is disputed.

Reason: `/mw-config/index.php` should not be exposed, see Talk:MediaWiki#/mw-config/index.php is exposed with Nginx config. (Discuss in Talk:MediaWiki)

To get MediaWiki working with Nginx, create the following file:

    /etc/nginx/mediawiki.conf

    location / {
       index index.php;
       try_files $uri $uri/ @mediawiki;
    }
    location @mediawiki {
       rewrite ^/(.*)$ /index.php;
    }
    location ~ \.php$ {
       include /etc/nginx/fastcgi_params;
       fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
       fastcgi_index index.php;
       fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
       try_files $uri @mediawiki;
    }
    location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
       try_files $uri /index.php;
       expires max;
       log_not_found off;
    }
    # Restrictions based on the .htaccess files
    location ~ ^/(cache|includes|maintenance|languages|serialized|tests|images/deleted)/ {
       deny all;
    }
    location ~ ^/(bin|docs|extensions|includes|maintenance|mw-config|resources|serialized|tests)/ {
       internal;
    }
    location ^~ /images/ {
       try_files $uri /index.php;
    }
    location ~ /\. {
       access_log off;
       log_not_found off;
       deny all;
    }
    location /rest.php {
       try_files $uri $uri/ /rest.php?$args;
    }

Ensure that php-fpm is installed and `php-fpm.service` is started.

Include a server directive, similar to this

    /etc/nginx/nginx.conf

    server {
      listen 80;
      server_name mediawiki;
      root /usr/share/webapps/mediawiki;
      index index.php;
      charset utf-8;
    # For correct file uploads
      client_max_body_size    100m; # Equal or more than upload_max_filesize in /etc/php/php.ini
      client_body_timeout     60;
      include mediawiki.conf;

    }

Finally, restart `nginx.service` and `php-fpm.service` daemons.

#### Lighttpd

You should have Lighttpd installed and configured. "mod_alias" and "mod_rewrite" in server.modules array of lighttpd is required. Append to the lighttpd configuration file the following lines

    /etc/lighttpd/lighttpd.conf

    alias.url += ("/mediawiki" => "/usr/share/webapps/mediawiki/")
    url.rewrite-once += (
                    "^/mediawiki/wiki/upload/(.+)" => "/mediawiki/wiki/upload/$1",
                    "^/mediawiki/wiki/$" => "/mediawiki/index.php",
                    "^/mediawiki/wiki/([^?]*)(?:\?(.*))?" => "/mediawiki/index.php?title=$1&$2"
    )

Restart the `lighttpd.service` daemon.

### Database

Set up a database server as explained in the article of your DBMS: MariaDB, PostgreSQL, SQLite or MySQL.

If you have set a non-empty root password for the database server, MediaWiki can automatically create the database during the next step. (See MariaDB#Reset the root password for how to set this password retrospectively for MariaDB.) Otherwise the database needs to be created manually - see upstream instructions.

### LocalSettings.php

Open the wiki URL (usually `http://your_server/mediawiki/index.php`) in a browser and do the initial configuration. Follow upstream instructions.

The generated `LocalSettings.php` file is offered for download, save it to `/etc/webapps/mediawiki/LocalSettings.php`.

Since 1.38.0 it has a symbolic link included in `/usr/share/webapps/mediawiki/LocalSettings.php`.

Warning: LocalSettings.php contains database connection settings, such as the usename and password, and the MediaWiki web-based updater password. Make sure only the root and http users have access to `/etc/webapps/mediawiki/LocalSettings.php`:

    # chown root:http /etc/webapps/mediawiki/LocalSettings.php
    # chmod 640 /etc/webapps/mediawiki/LocalSettings.php

This file defines the specific settings of your wiki. Whenever you upgrade the mediawiki package, it will not be replaced.

#### LDAP Auth

Use PluggableAuth and LDAP Stack. Pay attention to "Compatibility Matrix" section. Currently LDAP works only with PluggableAuth-5.7.

You need to install and add to config ldap stack extensions and PluggableAuth:

- Extension:PluggableAuth
- Extension:LDAPProvider
- Extension:LDAPAuthentication2
- Extension:LDAPAuthorization
- Extension:LDAPUserInfo
- Extension:LDAPGroups

Then set up at least 3 variables:

- `$LDAPProviderDomainConfigProvider` - whole ldap config (can be in json file)
- `$wgPluggableAuth_Config` - list of auth plugins

    $wgPluggableAuth_Config = array(
           array('plugin' => 'LDAPAuthentication2'),
           array('plugin' => 'LDAPAuthorization'),
    );

- and `$LDAPProviderDefaultDomain`

Do not forget to run `php maintenance/update.php` after configuration.

## Upgrading

See mw:Manual:Upgrading, and do not forget to run:

    # cd /usr/share/webapps/mediawiki
    # php maintenance/update.php

## Tips and tricks

### Unicode

Check that PHP, Apache HTTP Server and MariaDB all use UTF-8. Otherwise you may face strange bugs because of encoding mismatch.

### VisualEditor

The VisualEditor MediaWiki extension provides a rich-text editor for MediaWiki. Follow mw:Extension:VisualEditor to install it.

Category:

- Wiki software

Hidden category:

- Pages or sections flagged with Template:Accuracy