Installing MediaWiki Guide

From Elvanör's Technical Wiki
Jump to navigation Jump to search

MediaWiki, the Wiki engine powering this site, is fully open-source and free. It seems to be robust, and reasonably fast. Configuring and installing it, however, is not so easy. This guide is a tutorial for MediaWiki administrators.

Dependencies

Required Software

  • Apache
  • PHP
  • MySQL with InnoDB support! The tables created by MediaWiki will use the InnoDB engine. I don't think it is possible to use MyISAM tables.

Optional Software

  • APC. This is a PHP accelerator. It no longer works in PHP 5.5, where it is normally replaced by OpCache (built in the core). However it seems opcache cannot be used yet with Mediawiki, so the best in PHP 5.5 is to install APCu instead of APC. Be sure to build it with PHP_TARGETS="php-5.5".
  • memcached. This is a daemon caching SQL requests in memory. If you run two Wikis on the same machine, beware that it can cause serious problems. If there is a single memcached daemon running, and both Wikis use it, they will interfere and one Wiki will end up serving the contents of the other. A solution can be to run memcached on several machines, or maybe on the same machine but with different ports. However, this last option on Mac OS X seems to be tricky.
  • ImageMagick, in order to generate the images thumbnails. This can also be done via PHP if GD support is included; however ImageMagick is recommended since it produces better quality thumbnails. Don't forget to set $wgImageMagickConvertCommand to the correct location:
$wgImageMagickConvertCommand = "/usr/local/bin/convert";

Installation

  • Installation is easy, just download MediaWiki from Sourceforge and uncompress the tarball in a directory that Apache can serve. Then follow the instructions on the README to perform the initial configuration. It involves running a PHP script that will configure the Wiki for you.
  • Warning: the initial administrator account is named "WikiSysop", and is case sensitive. If you forget it, search it on the MySQL database directly.
  • It is also recommended to increase your PHP memory_limit variable in php.ini. Else sometimes MediaWiki will fail with a message such as:
Fatal error: Allowed memory size of 8388608 bytes exhausted (tried to allocate 80629 bytes) in /var/www/wikistuff/includes/Parser.php on line 206

I set this variable to 30 MB. Note that with PHP 5.2.4+ it should be set at least to 128MB.

Multiple installations

  • It is possible to serve multiple wikis (different databases and/or themes) from the same MediaWiki installation. Just create as many configuration files as you need (LocalSettings.php, which obviously needs to be renamed for each wiki), and then create a LocalSettings.php file with code discriminating based on the SERVER_NAME. Example:
<?php
	switch ($_SERVER["SERVER_NAME"])
	{
		case "wiki.shoopz.net":
			require_once "wiki_shoopz_net_settings.php";
			break;
	
		case "help.shoopz.com":
			require_once "help_shoopz_com_settings.php";
			break;
			
		default:
			echo "This wiki is not available. Check configuration.";
			exit(0);
	}
?>
  • In order to add a new wiki, temporarily move your custom LocalSettings.php file. The wiki then believes it is not installed yet. Then point a browser at the wiki and follow the normal installation procedure. Once the installation script created your DB and your configuration file, move it from config/LocalSettings.php to a new file and modify the switch in LocalSettings.php accordingly. Also don't forget to move back LocalSettings.php.
  • All this is not needed with Gentoo support for web applications.

Configuration

  • Using an accelerator. I am not sure how it exactly works. This seems to be needed for using APC (at least as the "main" accelerator):
$wgMainCacheType = CACHE_ACCEL;
$wgMemCachedServers = array();

And this would setup support for a memcached server running on the local machine on port 11212:

$wgMainCacheType = CACHE_MEMCACHED;
$wgMemCachedServers = array (
 0 => '127.0.0.1:11212',
);
  • Obtaining nice URLs: A guide to remove "index.php" from the URL is available online. However I don't find it very clear. The important steps are:
    • Unpack the MediaWiki in a directory NOT named "wiki", for example "wikistuff" will do.
    • In LocalSettings.php, set $wgScriptPath = "/wikistuff"; and $wgArticlePath = "/wiki/$1";
    • Write an Alias rule for Apache: add the line
Alias /wiki /filesystem/path/to/wikistuff/index.php

in the Apache configuration file. Note: don't add the second line as mentionned in the guide!

  • Alias in Apache is just a primitive form of URL rewriting. The main installation directory for MediaWiki should not be named "wiki" because then pathes to static resources (skins, etc) will conflict with URLs for pages. I now name the installation directory just "mediawiki".
  • Disabling automatic account creation and anonymous edits. Add the following lines to LocalSettings.php:
$wgGroupPermissions['*']['edit'] = false;
$wgGroupPermissions['*']['createaccount'] = false;
  • Disabling anonymous reading. Add the following lines to LocalSettings.php:
# Pages anonymous (not-logged-in) users may see
$wgWhitelistRead = array( "Main Page", "Special:Userlogin", "-", "MediaWiki:Monobook.css" );

$wgGroupPermissions['*']['read'] = false;
  • Customizing logo (note that it should start with the name of the wiki directory, eg /wiki here):
$wgLogo = "/wiki/path/to/logo.png";
  • Allowing images uploads (set $wgUseImageMagick to false if you want to use GD instead of ImageMagick to create the thumbnails):
$wgEnableUploads = true;
$wgUseImageResize = true;
$wgUseImageMagick = true;
$wgImageMagickConvertCommand = "/usr/bin/convert";

Search Features

  • The default search feature is based on MySQL MyISAM engine full text search. It by default indexes only words of 4 characters at least, so searching for "tar" would not return anything. You can fix this by changing MySQL configuration, see this link.

Permissions Features

Usage

Administration

  • Deleting/removing an user is not possible with MediaWiki. You can, however, change the password with the following SQL request:
UPDATE user SET user_password = MD5(CONCAT(user_id, '-', 
  MD5('somepass'))) WHERE user_name = 'someuser';

Customization with styles / CSS

  • Link to the official skins tutorial
  • There is a site wide CSS style page, accessible at MediaWiki:Common.css. There is also a corresponding page for each user. Note that this CSS page can be modified directly, this is very nice. Of course you could also edit directly the CSS files present in the software distribution of MediaWiki.

Problems

  • If the first page seems slow to load, it may be a redirect problem. I had this problem when accessing the wiki directly, which normally redirects to index.php/Main_Page, was very slow (15 seconds). It was a problem with the redirection via a 301 HTTP code. Changing the 301 code to a 302 in includes/Wiki.php solved the problem. However the root cause needs to be investigated (it is probably a problem with the lighttpd in front of Apache configuration).