Install MediaWiki

MediaWiki is the most popular wiki package and is the open source software that powers Wikipedia, among a great many other sites. This article covers installing MediaWiki to a UNPM Server.

This article assumes that MediaWiki is to be installed to a sub-directory called, though it can be installed to a sub-directory of any name or depth (additional sub-directories) or even to the site's root directory.

Package-configs files
Create the  files   and  :

username@servername:~$ sudo nano /etc/nginx/package-configs/mediawiki.conf

Add to the new file: location /wiki/ { rewrite ^/wiki/([^?]*)(?:\?(.*))? /wiki/index.php?title=$1&$2 last; location ~* ^/images/.*.(html|htm|shtml|php|js)$ { types { } default_type text/plain; }    location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ { try_files $uri /wiki/index.php; expires max; log_not_found off; }    location ~ (index|load|api).*\.php$ { include global-configs/php.conf; }    location ~ /cache/ { deny all; } location ~ \.php$ { deny all; } }

username@servername:~$ sudo nano /etc/nginx/package-configs/mediawiki_https.conf

Add to the new file: location /wiki/ { rewrite ^/wiki/([^?]*)(?:\?(.*))? /wiki/index.php?title=$1&$2 last; location ~* ^/images/.*.(html|htm|shtml|php|js)$ { types { } default_type text/plain; }    location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ { try_files $uri /wiki/index.php; expires max; log_not_found off; }    location ~ (index|load|api).*\.php$ { include global-configs/php_https.conf; }    location ~ /cache/ { deny all; } location ~ \.php$ { deny all; } }

Sites-available file
Open the sites-available file for the domain:

username@servername:~$ sudo nano /etc/nginx/sites-available/example.com

In the HTTP server block, add: include package-configs/mediawiki.conf;

In the HTTPS server block, add: include package-configs/mediawiki_https.conf;

404 error_page
Note that if the  directive is being used to redirect 404 errors, be sure it is in the   block: location / { try_files $uri $uri/ =404; error_page 404 /404.html; }

If it is directly in the  block, MediaWiki will not attempt to create pages when a wrong page is requested.

Create MediaWiki database and database user
Create a MediaWiki database and database user: username@servername:~$ sudo mysql -uroot -p MariaDB [(none)]> create database databasename default character set utf8 default collate utf8_general_ci; MariaDB [(none)]> grant all on databasename.* to 'databasenameusername'@'localhost' identified by 'databasenameusernamepassword'; MariaDB [(none)]> exit

Note that the,   and   will be required for the MediaWiki configuration process.

Install Mediawiki
Mediawiki will require a few packages to be installed to run:

username@servername:~$ sudo aptitude install imagemagick php5-intl username@servername:~$ sudo nano /etc/php5/fpm/php-fpm.conf

Add to the file: security.limit_extensions = .php .html .php5

Test nginx and restart services: username@servername:~$ sudo nginx -t username@servername:~$ sudo service php5-fpm restart username@servername:~$ sudo service nginx restart

Download Mediawiki: username@servername:~$ wget https://releases.wikimedia.org/mediawiki/1.24/mediawiki-1.24.0.tar.gz username@servername:~$ tar -xzf mediawiki-1.24.0.tar.gz username@servername:~$ mv mediawiki-1.24.0/ /var/www/example.com/public/wiki username@servername:~$ find /var/www/example.com/public/wiki/ -type d | xargs chmod 775 username@servername:~$ find /var/www/example.com/public/wiki/ -type f | xargs chmod 664 username@servername:~$ sudo chown -R www-data:www-data /var/www/example.com/public/wiki/ username@servername:~$ rm mediawiki-1.24.0.tar.gz

Navigate to secure  https://www.example.com/wiki  and complete the Mediawiki installation. Most admins will prefer to use the 'Authorized editors only' option under 'User rights profile:'. Select 'PHP object caching (APC, XCache or WinCache)' in the Advanced Configuration options and be sure to sign up for update notifications.

LocalSettings.php
After completing the online setup, MediaWiki will prompt to download the  file. This is the main configuration file for MediaWiki. It is easiest to open the file in a text editor and then copy and paste the contents into the  file on the server. However, before doing that, the file still requires at least a few edits.

To support loading MediaWiki in non-secure sessions, but require secure session for logging in, change: $wgserver = "//www.example.com";

Enable : $wgCacheDirectory = "$IP/cache";

To create a user rights management system better suited to smaller wikis, change: $wgGroupPermissions['*']['createaccount'] = true;

Then, just below the permissions created by MediaWiki, add: $wgGroupPermissions['*']['createtalk'] = false; $wgGroupPermissions['*']['createpage'] = false; $wgGroupPermissions['*']['writeapi'] = false; $wgGroupPermissions['user']['edit'] = false; $wgGroupPermissions['user']['createtalk'] = false; $wgGroupPermissions['user']['createpage'] = false; $wgGroupPermissions['user']['minoredit'] = false; $wgGroupPermissions['user']['move'] = false; $wgGroupPermissions['user']['movefile'] = false; $wgGroupPermissions['user']['move-subpages'] = false; $wgGroupPermissions['user']['move-rootuserpages'] = false; $wgGroupPermissions['user']['reupload-shared'] = false; $wgGroupPermissions['user']['reupload'] = false; $wgGroupPermissions['user']['purge'] = false; $wgGroupPermissions['user']['sendemail'] = false; $wgGroupPermissions['user']['upload'] = false; $wgGroupPermissions['user']['writeapi'] = false; $wgGroupPermissions['editor'] = $wgGroupPermissions['user']; $wgGroupPermissions['editor']['edit'] = true; $wgGroupPermissions['editor']['createtalk'] = true; $wgGroupPermissions['editor']['createpage'] = true; $wgGroupPermissions['editor']['minoredit'] = true; $wgGroupPermissions['editor']['move'] = true; $wgGroupPermissions['editor']['move-subpages'] = true; $wgGroupPermissions['editor']['upload'] = true; $wgGroupPermissions['editor']['reupload'] = true; $wgGroupPermissions['editor']['sendemail'] = true; $wgGroupPermissions['sysop']['edit'] = true; $wgGroupPermissions['sysop']['createpage'] = true; $wgGroupPermissions['sysop']['createtalk'] = true; $wgGroupPermissions['sysop']['minoredit'] = true; $wgWikiEditorModules['toolbar']['global'] = true; $wgWikiEditorModules['toolbar']['user'] = false; $wgGroupPermissions['bureaucrat']['usermerge'] = true;
 * 1) The following permissions were added to allow user account creation without
 * 2) granting new users the ability to edit. The admin accounts may elevate new
 * 3) users to the added editor role to grant permission to edit

The  user group means all users, including anonymous users.

Below that, add: $wgSecureLogin = true; $wgUsePathInfo = true; $wgArticlePath = "/wiki/$1";
 * 1) Enable requirement for secure login:
 * 1) Enable pretty URLs

Now paste the entire contents from the computer's text editor to the  file on the server: username@servername:~$ nano /var/www/example.com/public/wiki/LocalSettings.php

Note that depending on the operating system and editor used, the code may paste in without things such as returns between paragraphs. This does happen with Notepad++ in Windows 7, but can easily be fixed by first pasting into a new Notepad++ tab and copying from there.

Configuring MediaWiki
MediaWiki configuration is different from most of the popular PHP packages. Configuring is done through the  file, extensions, which must be installed server-side with accompanied   entries, and various different hard-to-find pages in the web interface. The MediaWiki Manual is an invaluable resource. Below are some simple and common extension and configuration settings.

Sidebar
To edit the MediaWiki Sidebar, while logged in with an admin account, simply navigate to  https://www.example.com/wiki/MediaWiki:Sidebar .

Disable page counts
By default, MediaWiki will display page counts at the bottom of every page. This can be disabled with the following:

username@servername:~$ nano /var/www/example.com/public/wiki/LocalSettings.php

Add to the bottom of the file: $wgDisableCounters = true;
 * 1) Disables page counters

Change logo image
The logo image location is set in  with the   directive, for which the default is. Replacing  with a different image while using the same name will be overwritten when updating MediaWiki, so it is better to use a file in a different location. MediaWiki updates generally ignore anything in the  directory, so putting the logo there and setting   is a reasonable solution, though other locations may work just as well.

MobileFrontend extension
Although there are options to automatically detect mobile devices and display a mobile-friendly theme, the disadvantage of this feature is it requires disabling caching unless an additional domain is used, such as placing an m in the subdomain. A compromise is to install the MobileFrontend extension which creates a Mobile view link at the bottom of every page. It is important to check the extension page and verify the latest version.

MobileFrontend requires the Mantle extension as a prerequisite.

username@servername:~$ wget https://extdist.wmflabs.org/dist/extensions/Mantle-REL1_24-8fa4c6e.tar.gz username@servername:~$ tar -xzf Mantle-REL1_24-8fa4c6e.tar.gz username@servername:~$ mv Mantle/ /var/www/example.com/public/wiki/extensions/ username@servername:~$ find /var/www/example.com/public/wiki/extensions/Mantle/ -type d | xargs chmod 775 username@servername:~$ find /var/www/example.com/public/wiki/extensions/Mantle/ -type f | xargs chmod 664 username@servername:~$ sudo chown -R www-data:www-data /var/www/example.com/public/wiki/extensions/Mantle username@servername:~$ rm Mantle-REL1_24-8fa4c6e.tar.gz username@servername:~$ nano /var/www/example.com/public/wiki/LocalSettings.php

Add: require_once "$IP/extensions/Mantle/Mantle.php";
 * 1) Enable Mantle extension

username@servername:~$ wget https://extdist.wmflabs.org/dist/extensions/MobileFrontend-REL1_24-011e6c1.tar.gz username@servername:~$ tar -xzf MobileFrontend-REL1_24-011e6c1.tar.gz username@servername:~$ mv MobileFrontend/ /var/www/example.com/public/wiki/extensions/ username@servername:~$ find /var/www/example.com/public/wiki/extensions/MobileFrontend/ -type d | xargs chmod 775 username@servername:~$ find /var/www/example.com/public/wiki/extensions/MobileFrontend/ -type f | xargs chmod 664 username@servername:~$ sudo chown -R www-data:www-data /var/www/example.com/public/wiki/extensions/MobileFrontend/ username@servername:~$ rm MobileFrontend-2e0af84.tar.gz username@servername:~$ nano /var/www/example.com/public/wiki/LocalSettings.php

Add to the bottom of the file: require_once "$IP/extensions/MobileFrontend/MobileFrontend.php"; $wgMFAutodetectMobileView = false;
 * 1) Enables MobileFrontend extension

Tracking with Piwik
Piwik may be used by simply enabling and configuring the MediaWiki:Common.js feature or by installing the Piwik extension.

MediaWiki:Common.js
The easiest way to use Piwik to track users of the wiki is to simply use the Common.js feature of MediaWiki. Enable it in :

username@servername:~$ nano /var/www/example.com/public/wiki/LocalSettings.php

Add to the file:

$wgUseSiteJS = true;
 * 1) Use the site's JavaScript (MediaWiki:Common.js)

Navigate to  https://www.example.com/wiki/MediaWiki:Common.js  while logged in as an administrator and add the Piwik javascript code:

var _paq = _paq || []; _paq.push(['trackPageView']); _paq.push(['enableLinkTracking']); (function {  var u="//www.example.com/randomsymlinkname/";   _paq.push(['setTrackerUrl', u+'js/']);   _paq.push(['setSiteId', 1]);   var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];   g.type='text/javascript'; g.async=true; g.defer=true; g.src=u+'js/'; s.parentNode.insertBefore(g,s); });

Refer to the Piwik article for an explanation of  and   usage.

Piwik Integration extension
If more sophisticated tracking is required, such as ignoring certain users or user types, Using the Piwik extension may be preferable to the Common.js method. It is important to note that this extension may not support tracking while in Mobile view due to a bug.

Upgrading MediaWiki
Upgrading MediaWiki is done through the command line. For minor version upgrades, a patch file may be made available, otherwise a complete reinstall from backup is essentially performed. The best way to find the locations of an update's files and options is from the announcement email, presumably subscribed to during the setup process.

Maintenance mode
To prevent user edits to the wiki during upgrade, which might be saved to the old database, place the following statement at the bottom of.

username@servername:~$ nano /var/www/example.com/public/wiki/LocalSettings.php

$wgReadOnly="We are upgrading MediaWiki, please be patient. This wiki will be back shortly.";
 * 1) Use $wgReadOnly to prevent changes to the database.
 * 2) Text in "" maybe changed as desired
 * 3) The database will be locked from edits as long as the line below
 * 4) is uncommented.

Upgrading via patch
The first step is to backup the database. Log in to phpMyAdmin as the root MySQL user. Select the database used by MediaWiki and navigate to the Operations page. Enter the name of the backup database in the Copy database to: field, leaving the default selections for copying and select Go</tt>. It may be a good idea to include the MediaWiki version number in the backup name for future reference.

Backup the  directory, download the patch from the location stated in the update notification email, decompress to the   directory, run a dry run to see what files are modified, backup any files to be changed by the patch that have been customized, then run the patch. Thea actual location of the patch will depend on current version and the version to be upgraded to and can be found somewhere in this directory.

username@servername:~$ cp -p /var/www/example.com/public/wiki/ /var/www/example.com/public/wiki-backup/ username@servername:~$ wget https://releases.wikimedia.org/mediawiki/1.24/mediawiki-1.24.1.patch.gz username@servername:~$ zcat mediawiki-1.23.6.patch.gz > /var/www/example.com/public/wiki/mediawiki-1.24.1.patch username@servername:~$ cd /var/www/example.com/public/wiki/ username@servername:/var/www/example.com/public/wiki$ patch -p1 --dry-run < mediawiki-1.24.1.patch username@servername:/var/www/example.com/public/wiki$ patch -p1 < mediawiki-1.24.1.patch username@servername:/var/www/example.com/public/wiki$ cd ~ username@servername:~$ sudo su www-data $ php /var/www/example.com/public/wiki/maintenance/update.php $ exit

After verifying the wiki is functioning properly, archive the original wiki.

username@servername:~$ mkdir /var/www/example.com/backup/wiki username@servername:~$ mv /var/www/example.com/public/wiki-backup /var/www/example.com/backup/wiki/mediawiki-1.22.2

Upgrade without patch
To upgrade to versions without a patch, near complete reinstallation is performed. Note that this procedure transfers current MediaWiki settings and sets up the new MediaWiki version on a copy of the working database. This is to facilitate easy recovery to the currently functioning wiki since no changes are made to the wiki or its database.

Install new version to new directory
The actual new version will depend on what version it is desired to upgrade to. All versions of MediaWiki may be found here.

username@servername:~$ wget https://releases.wikimedia.org/mediawiki/1.23/mediawiki-1.23.6.tar.gz username@servername:~$ tar -xzf mediawiki-1.23.6.tar.gz -C /var/www/example.com/public/ username@servername:~$ find /var/www/example.com/public/mediawiki-1.23.6/ -type d | xargs chmod 775 username@servername:~$ find /var/www/example.com/public/mediawiki-1.23.6/ -type f | xargs chmod 664 username@servername:~$ sudo chown -R www-data:www-data /var/www/example.com/public/mediawiki-1.23.6/ username@servername:~$ cp -p /var/www/example.com/public/wiki/LocalSettings.php /var/www/example.com/public/mediawiki-1.23.6/LocalSettings.php username@servername:~$ cp -rpfu /var/www/example.com/public/wiki/extensions/* /var/www/example.com/public/mediawiki-1.23.6/extensions username@servername:~$ cp -rpfu /var/www/example.com/public/wiki/images/* /var/www/example.com/public/mediawiki-1.23.6/images username@servername:~$ cp -rpfu /var/www/example.com/public/wiki/skins/* /var/www/example.com/public/mediawiki-1.23.6/skins

Note that any other additional files not a part of the MediaWiki package should also be copied to the new directory. Files that have been customized should be customized again using the file in the new installation.

Copy database to new database
Log in to phpMyAdmin as the root MySQL user. Select the database used by MediaWiki and navigate to the Operations</tt> page. Enter the name of the new database in the Copy database to:</tt> field, leaving the default selections for copying and select Go</tt>

Navigate to phpMyAdmin home page and select Users</tt>. Click Edit privileges</tt> next to the user assigned to the original MediaWiki database. Under Database-specific privileges</tt>, select the new database in the Add privileges on the following database:</tt> drop-down menu. In the following page, click Check all</tt>, then uncheck GRANT</tt> and click Go</tt>.

Now update the name of the database in the new  file:

username@servername:~$ nano /var/www/example.com/public/mediawiki-1.23.6/LocalSettings.php

Change:

$wgDBname = "newdatabasename";

Archive the original  installation, install the new installation in its place and run the update script:

username@servername:~$ mkdir /var/www/example.com/backup/wiki/ username@servername:~$ mv /var/www/example.com/public/wiki /var/www/example.com/backup/wiki/mediawiki-1.22.2 username@servername:~$ mv mediawiki-1.23.6/ /var/www/example.com/public/wiki username@servername:~$ sudo su www-data $ php /var/www/example.com/public/wiki/maintenance/update.php $ exit

Navigate to the wiki and verify it is functioning properly. If it is not functioning properly and the problem cannot repaired, then restore the archived version until the update can be successfully performed.