MediaWiki Installation and Configuration

MediaWiki is the free and open-source wiki software powering Wikipedia and countless other wikis. It provides a collaborative environment for creating and sharing knowledge with powerful editing tools, version control, and access management. This guide covers PHP setup, MySQL database configuration, Apache/Nginx installation, extension installation, and custom skin configuration.

Table of Contents

Prerequisites

Ensure you have:

  • Ubuntu 20.04 LTS or later
  • Root or sudo access
  • A registered domain name
  • Minimum 2GB RAM
  • 20GB available disk space
  • Basic Linux administration knowledge

Update system:

sudo apt update && sudo apt upgrade -y

System Requirements

Verify system specifications:

Check OS version:

cat /etc/os-release
uname -m

Check available resources:

free -h
df -h

Web Server Installation

Install Apache with mod_php:

sudo apt install -y apache2 apache2-utils libapache2-mod-php

Or install Nginx with PHP-FPM:

sudo apt install -y nginx php-fpm

Enable Apache modules:

sudo a2enmod rewrite
sudo a2enmod headers
sudo a2enmod ssl

Start services:

sudo systemctl start apache2
sudo systemctl start nginx
sudo systemctl enable apache2
sudo systemctl enable nginx

PHP and Extensions

Install PHP 8.0 or later:

sudo apt install -y php php-common php-mysql php-xml php-mbstring php-json php-curl php-gd php-intl php-opcache php-cli

Check PHP version:

php --version

Verify extensions:

php -m | grep -E "mysql|xml|mbstring|json|curl|gd|intl"

Configure PHP:

sudo nano /etc/php/8.0/apache2/php.ini

Update settings:

memory_limit = 256M
max_execution_time = 300
post_max_size = 100M
upload_max_filesize = 100M
display_errors = Off
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT

Restart PHP:

sudo systemctl restart php8.0-fpm

Database Setup

Install MySQL Server:

sudo apt install -y mysql-server

Start and secure MySQL:

sudo systemctl start mysql
sudo systemctl enable mysql
sudo mysql_secure_installation

Create MediaWiki database:

sudo mysql -u root -p << EOF
CREATE DATABASE mediawiki;
CREATE USER 'mediawiki'@'localhost' IDENTIFIED BY 'SecurePassword123!';
GRANT ALL PRIVILEGES ON mediawiki.* TO 'mediawiki'@'localhost';
FLUSH PRIVILEGES;
EXIT;
EOF

Test connection:

mysql -u mediawiki -p -h localhost mediawiki
EXIT;

MediaWiki Installation

Create installation directory:

sudo mkdir -p /var/www/mediawiki
sudo chown -R www-data:www-data /var/www/mediawiki
cd /var/www/mediawiki

Download MediaWiki:

wget https://releases.wikimedia.org/mediawiki/1.39/mediawiki-1.39.1.tar.gz
tar -xzf mediawiki-1.39.1.tar.gz
sudo cp -r mediawiki-1.39.1/* /var/www/mediawiki/

Set permissions:

sudo chown -R www-data:www-data /var/www/mediawiki
sudo chmod -R 755 /var/www/mediawiki
sudo chmod 700 /var/www/mediawiki/config

Web Server Configuration

Apache Configuration

Create virtual host:

sudo nano /etc/apache2/sites-available/mediawiki.conf

Add configuration:

<VirtualHost *:80>
    ServerName wiki.example.com
    ServerAlias www.wiki.example.com
    DocumentRoot /var/www/mediawiki

    <Directory /var/www/mediawiki>
        AllowOverride All
        Require all granted
        
        <IfModule mod_rewrite.c>
            RewriteEngine On
            RewriteCond %{REQUEST_FILENAME} !-f
            RewriteCond %{REQUEST_FILENAME} !-d
            RewriteRule ^(.*)$ /index.php [QSA,L]
        </IfModule>
    </Directory>

    <Directory /var/www/mediawiki/config>
        Require all denied
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/mediawiki_error.log
    CustomLog ${APACHE_LOG_DIR}/mediawiki_access.log combined
</VirtualHost>

Enable site:

sudo a2ensite mediawiki.conf
sudo a2dissite 000-default.conf
sudo apache2ctl configtest
sudo systemctl reload apache2

Nginx Configuration

Create Nginx configuration:

sudo nano /etc/nginx/sites-available/mediawiki

Add configuration:

server {
    listen 80;
    server_name wiki.example.com www.wiki.example.com;
    root /var/www/mediawiki;
    index index.php;

    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    location /config {
        deny all;
    }

    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php/php8.0-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }

    location ~ /\. {
        deny all;
    }
}

Enable site:

sudo ln -s /etc/nginx/sites-available/mediawiki /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

Initial Configuration

Access MediaWiki installation wizard:

Navigate to http://wiki.example.com/mw-config/ and follow the setup wizard:

  1. Select language

  2. Configure database:

    • Database host: localhost
    • Database name: mediawiki
    • Database user: mediawiki
    • Database password: SecurePassword123!
  3. Configure wiki:

    • Wiki name
    • Admin username and password
    • Email address

Complete the installation. Move LocalSettings.php:

sudo mv /var/www/mediawiki/config/LocalSettings.php /var/www/mediawiki/
sudo rm -rf /var/www/mediawiki/config
sudo chmod 644 /var/www/mediawiki/LocalSettings.php

Verify installation:

Navigate to http://wiki.example.com

Extension Installation

Download useful extensions:

cd /var/www/mediawiki/extensions

Install VisualEditor:

sudo git clone https://gerrit.wikimedia.org/r/mediawiki/extensions/VisualEditor.git

Install ParserFunctions:

sudo git clone https://gerrit.wikimedia.org/r/mediawiki/extensions/ParserFunctions.git

Install Cite:

sudo git clone https://gerrit.wikimedia.org/r/mediawiki/extensions/Cite.git

Set permissions:

sudo chown -R www-data:www-data /var/www/mediawiki/extensions

Enable extensions in LocalSettings.php:

sudo nano /var/www/mediawiki/LocalSettings.php

Add at end:

wfLoadExtension( 'VisualEditor' );
wfLoadExtension( 'ParserFunctions' );
wfLoadExtension( 'Cite' );

$wgDefaultUserOptions['visualeditor-enable'] = 1;

Skin and Theme Configuration

View available skins:

ls -la /var/www/mediawiki/skins/

Download additional skins:

cd /var/www/mediawiki/skins
sudo git clone https://gerrit.wikimedia.org/r/mediawiki/skins/MinervaNeue.git

Configure skin in LocalSettings.php:

sudo nano /var/www/mediawiki/LocalSettings.php

Set default skin:

$wgDefaultSkin = 'vector-2022';

Or use alternative skin:

$wgDefaultSkin = 'minerva';

Configure skin appearance:

$wgVectorDefaultSkinVersion = '2';
$wgVectorResponsive = true;

Backup and Maintenance

Create backup script:

sudo nano /usr/local/bin/mediawiki-backup.sh

Add:

#!/bin/bash

BACKUP_DIR="/backups/mediawiki"
WIKI_DIR="/var/www/mediawiki"
DATE=$(date +%Y%m%d_%H%M%S)

mkdir -p $BACKUP_DIR

# Database backup
mysqldump -u mediawiki -p'SecurePassword123!' mediawiki | gzip > "$BACKUP_DIR/mediawiki-db-$DATE.sql.gz"

# Files backup
tar -czf "$BACKUP_DIR/mediawiki-files-$DATE.tar.gz" "$WIKI_DIR"

# Keep only 30 days
find $BACKUP_DIR -type f -mtime +30 -delete

echo "Backup completed: $DATE"

Make executable:

sudo chmod +x /usr/local/bin/mediawiki-backup.sh

Schedule daily backups:

sudo crontab -e

Add:

0 2 * * * /usr/local/bin/mediawiki-backup.sh >> /var/log/mediawiki-backup.log 2>&1

Run database maintenance:

cd /var/www/mediawiki/maintenance
sudo -u www-data php update.php
sudo -u www-data php rebuildrecentchanges.php

Schedule maintenance tasks:

sudo crontab -e

Add:

0 3 * * * cd /var/www/mediawiki/maintenance && php update.php >> /var/log/mediawiki-maintenance.log 2>&1

Conclusion

MediaWiki is now fully installed and configured, providing a collaborative wiki platform. With proper extension installation, skin customization, and regular backups, you have a complete knowledge management system. Configure user permissions, enable advanced features, and build your wiki content. MediaWiki's flexibility and power make it suitable for internal documentation, community wikis, and collaborative projects.