
Page de téléchargement : mediawiki.org – Download Latest Release
MediaWiki est un moteur de wiki Open Source sous licence GPLv2+ né en 2002 et développé en PHP par la société Wikimedia. Sa notoriété vient principalement du fait que Wikipedia l’utilise et contribue à son évolution. Ses versions actuelles sont la 1.33.0 et 1.31.3 LTS.
Alternatives Open Source à MediaWiki :
OBJECTIF
L’objectif de cet article est l’installation et la configuration d’un serveur LAMP7 (Linux Apache 2.4 MariaDB 10.3 PHP 7.3) auto-hébergé MediaWiki en version 1.33.0 sur une distribution Linux Debian Buster 10.0 64bits.
SCHÉMA LOGIQUE

PRÉREQUIS
1. Prérequis avant réalisation
- Un serveur Debian Buster 10.0 64 bits fonctionnel (installation basique avec utilitaires usuels du système et service SSH)
- Packages de base supplémentaires : sudo, dnsutils, git, resolvconf, terminator, tree
- Domaine utilisé : opensharing.priv
2. Configuration réseau initiale
Serveur MediaWiki | |
FQDN | mywiki.opensharing.priv |
Adresse IP | 192.168.1.10 |
Réseau | 192.168.1.0/24 |
Passerelle | 192.168.1.1 |
dns-nameservers | 8.8.8.8 8.8.4.4 |
dns-search | opensharing.priv |
Contenu initial du fichier /etc/network/interfaces :
nano /etc/network/interfaces
auto lo iface lo inet loopback allow-hotplug enp0s3 iface enp0s3 inet static address 192.168.1.10 netmask 255.255.255.0 network 192.168.1.0 broadcast 192.168.1.255 gateway 192.168.1.1 dns-search opensharing.priv dns-nameservers 8.8.8.8 8.8.4.4
Contenu initial du fichier /etc/hosts :
nano /etc/hosts
127.0.0.1 localhost.localdomain localhost 192.168.1.10 mywiki.opensharing.priv mywiki
Rmq : L’adresse 127.0.1.1 doit être retirée sur un serveur à IP fixe et remplacée par cette dernière, tel que l’exemple ci-dessus.
Contenu initial du fichier /etc/host.conf :
nano /etc/host.conf
order hosts, bind multi on
Contenu initial du fichier /etc/resolv.conf (généré automatiquement) :
cat /etc/resolv.conf
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8) # DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN nameserver 8.8.8.8 nameserver 8.8.4.4 search opensharing.priv
Rmq : Le fichier /etc/resolv.conf ne doit pas être édité dès lors que le paquet resolvconf a été installé.
Pour prendre en compte les modifications des fichiers de configuration relatifs au réseau, redémarrage du service réseau et de l’interface réseau configurée en IP fixe :
systemctl restart networking ifup enp0s3
Vérification de la bonne configuration réseau :
ping 8.8.8.8 dig opensharing.fr
RÉALISATION
1. Installation de Apache (LAMP 2/4)
apt-get update apt-get upgrade
apt-get install apache2 apache2-doc
Installe les paquets suivants par dépendances :
apache2 | apache2-data | apache2-doc | apache2-utils |
ssl-cert |
2. Configuration de Apache (LAMP2/4)
Création d’une configuration minimale pour notre Wiki
nano /etc/apache2/sites-available/mywiki.conf
<VirtualHost *:80> DocumentRoot /var/www/mywiki/ ServerName mywiki.opensharing.priv <Directory /var/www/mywiki/> Options -Indexes +FollowSymlinks +MultiViews AllowOverride None Require all granted </Directory> ErrorLog /var/log/apache2/mywiki.error.log CustomLog /var/log/apache2/mywiki.access.log combined </VirtualHost>
Désactivation du site par défaut :
a2dissite 000-default
Activation du site hébergeant notre Wiki :
a2ensite mywiki
3. Sécurisation de notre site en HTTPS (LAMP2/4)
Création d’une clé privée de 2048 bits de type RSA :
openssl genrsa -out /etc/ssl/private/mywikiperso.key 2048
Generating RSA private key, 2048 bit long modulus (2 primes) ..............................................................................+++++ ....................................................................+++++ e is 65537 (0x010001)
Création d’une demande de signature de certificat (CSR, Certificate Signing Request) générée avec la clé privée RSA précédemment créée :
openssl req -new -key /etc/ssl/private/mywikiperso.key -out /etc/ssl/certs/mywikiperso.csr
You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]:FR State or Province Name (full name) [Some-State]:Ile-de-France Locality Name (eg, city) []:Paris Organization Name (eg, company) [Internet Widgits Pty Ltd]:OpenSharing Organizational Unit Name (eg, section) []:IT Common Name (e.g. server FQDN or YOUR name) []:mywiki.opensharing.priv Email Address []:admin@opensharing.priv Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []:
Auto-signature de la demande de certificat générant un certificat auto-signé (CRT) valable 1 an :
openssl x509 -req -days 365 -in /etc/ssl/certs/mywikiperso.csr -signkey /etc/ssl/private/mywikiperso.key -out /etc/ssl/certs/mywikiperso.crt
Signature ok subject=C = FR, ST = Ile-de-France, L = Paris, O = OpenSharing, OU = IT, CN = mywiki.opensharing.priv, emailAddress = admin@opensharing.priv Getting Private key
Activation du module SSL :
a2enmod ssl
Modification de la configuration de notre site pour prendre en compte la sécurisation par le protocole HTTPS :
- Redirection du port 80 (HTTP) vers le port 443 (HTTPS)
- Directives de sécurisation (moteur SSL/TLS, certificat public, clé privée, etc.)
nano /etc/apache2/sites-available/mywiki.conf
<VirtualHost *:80> ServerName mywiki.opensharing.priv Redirect permanent / https://mywiki.opensharing.priv/ </VirtualHost> <VirtualHost *:443> DocumentRoot /var/www/mywiki/ ServerName mywiki.opensharing.priv <Directory /var/www/mywiki/> Options -Indexes +FollowSymlinks +MultiViews AllowOverride None Require all granted </Directory> ErrorLog /var/log/apache2/mywiki.error.log CustomLog /var/log/apache2/mywiki.access.log combined SSLEngine On SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire SSLCertificateFile /etc/ssl/certs/mywikiperso.crt SSLCertificateKeyFile /etc/ssl/private/mywikiperso.key </VirtualHost>
Redémarrage du démon Apache :
systemctl restart apache2
4. Installation de MariaDB (LAMP 3/4)
apt-get install mariadb-server mariadb-client
Installe les paquets suivants par dépendances :
galera-3 | gawk | libaio1 | libcgi-fast-perl |
libcgi-pm-perl | libconfig-inifiles-perl | libdbd-mysql-perl | libdbi-perl |
libfcgi-perl | libhtml-template-perl | libreadline5 | libsigsegv2 |
libterm-readkey-perl | mariadb-client | mariadb-client-10.3 | mariadb-client-core-10.3 |
mariadb-server | mariadb-server-10.3 | mariadb-server-core-10.3 | rsync |
socat |
Vérifier si les démons mariadb et apache sont actifs au démarrage du systèmes :
systemctl list-unit-files --type=service --state=enabled
Les services apache2.service et {mariadb, mysql, mysqld}.service doivent être dans l’état enabled.
Si ce n’est pas le cas, les activer avec la commande suivante :
systemctl enable name[.service]
5. Configuration de MariaDB (LAMP 3/4)
Par défaut, le plugin unix_socket est actif et permet l’authentification avec les comptes locaux de mêmes noms. En d’autres termes, root-DB utilise root-system pour se connecter aux bases de données.
Si vous souhaitez différencier ces comptes et donc utiliser un mot de passe différent, il vous faudra activer le plugin mysql_native_password, ou encore mieux le plugin ed25519, mais ici nous resterons sur la configuration unix_socket et nous ne définirons pas de mot de passe pour root-DB.
Sécurisation de l’accès aux bases de données.
mysql_secure_installation
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY! In order to log into MariaDB to secure it, we'll need the current password for the root user. If you've just installed MariaDB, and you haven't set the root password yet, the password will be blank, so you should just press enter here. Enter current password for root (enter for none): OK, successfully used password, moving on... Setting the root password ensures that nobody can log into the MariaDB root user without the proper authorisation. Set root password? [Y/n] n ... skipping. By default, a MariaDB installation has an anonymous user, allowing anyone to log into MariaDB without having to have a user account created for them. This is intended only for testing, and to make the installation go a bit smoother. You should remove them before moving into a production environment. Remove anonymous users? [Y/n] Y ... Success! Normally, root should only be allowed to connect from 'localhost'. This ensures that someone cannot guess at the root password from the network. Disallow root login remotely? [Y/n] Y ... Success! By default, MariaDB comes with a database named 'test' that anyone can access. This is also intended only for testing, and should be removed before moving into a production environment. Remove test database and access to it? [Y/n] Y - Dropping test database... ... Success! - Removing privileges on test database... ... Success! Reloading the privilege tables will ensure that all changes made so far will take effect immediately. Reload privilege tables now? [Y/n] Y ... Success! Cleaning up... All done! If you've completed all of the above steps, your MariaDB installation should now be secure. Thanks for using MariaDB!
Création d’une base de données et de son administrateur :
mysql -u root
> CREATE DATABASE IF NOT EXISTS mywikidb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; > CREATE USER mywikiadmin@localhost IDENTIFIED BY "mywikiadminpw"; > GRANT ALL PRIVILEGES ON mywikidb.* TO mywikiadmin@localhost; > FLUSH PRIVILEGES; > SHOW DATABASES; > QUIT;
Redémarrage du démon MariaDB :
systemctl restart mariadb
6. Installation de PHP et ses modules (LAMP 4/4)
⚠ Le module php-mcrypt est obsolète avec PHP 7.3, qui est la version par défaut sous Debian Buster.
apt-get install php php-apcu php-bcmath php-bz2 php-curl php-fpm php-gd php-geoip php-gmp php-imagick php-intl php-ldap php-mbstring php-memcached php-msgpack php-mysql php-pear php-soap php-xml php-xmlrpc php-zip libapache2-mod-php
Installe les paquets suivants par dépendances :
ghostscript | gsfonts | imagemagick-6-common | libapache2-mod-php |
libapache2-mod-php7.3 | libheif1 | liblqr-1-0 | libmagickcore-6.q16-6 |
libmagickwand-6.q16-6 | libmemcached11 | libmemcachedutil2 | libxmlrpc-epi0 |
libzip4 | php | php-apcu | php-apcu-bc |
php-bcmath | php-bz2 | php-common | php-curl |
php-fpm | php-gd | php-geoip | php-gmp |
php-igbinary | php-imagick | php-intl | php-ldap |
php-mbstring | php-memcached | php-msgpack | php-mysql |
php-pear | php-soap | php-xml | php-xmlrpc |
php-zip | php7.3 | php7.3-bcmath | php7.3-bz2 |
php7.3-cli | php7.3-common | php7.3-curl | php7.3-fpm |
php7.3-gd | php7.3-gmp | php7.3-intl | php7.3-json |
php7.3-ldap | php7.3-mbstring | php7.3-mysql | php7.3-opcache |
php7.3-readline | php7.3-soap | php7.3-xml | php7.3-xmlrpc |
php7.3-zip | ttf-dejavu-core |
7. Configuration de PHP (LAMP 4/4)
Configuration de OPcache pour l’optimisation des performances par la mise en cache des scripts PHP compilés :
nano /etc/php/7.3/mods-available/opcache.ini
opcache.memory_consumption=128 opcache.interned_strings_buffer=8 opcache.max_accelerated_files=3907 opcache.revalidate_freq=60 opcache.fast_shutdown=1 opcache.enable_cli=1
Configuration de PHP spécifique à MediaWiki :
nano -c /etc/php/7.3/apache2/php.ini
ligne 385 ligne 406 ligne 693 ligne 845 ligne 960 ligne 1794
max_execution_time = 300 memory_limit = 256M post_max_size = 128M upload_max_filesize = 32M date.timezone = 'Europe/Paris' opcache.enable = 1
8. Installation de MediaWiki (phase ligne de commandes)
Téléchargement et extraction de l’archive MediaWiki :
wget https://releases.wikimedia.org/mediawiki/1.33/mediawiki-1.33.0.tar.gz tar zxvf mediawiki-1.33.0.tar.gz mv mediawiki-1.33.0/ /var/www/mywiki/ rm mediawiki-1.33.0.tar.gz chown -R www-data:root /var/www/mywiki/
Redémarrage des services Apache et MariaDB :
systemctl restart mariadb systemctl restart apache2
9. Installation de MediaWiki (phase web)
Pour l’installation par le navigateur, il faut se connecter à l’URL suivante :
https://mywiki.opensharing.priv
Accepter l’exception de sécurité liée au certificat auto-signé de notre serveur Apache.
Il n’y a pour le moment pas de fichier de configuration LocalSettings.php, nous pouvons donc en créer un en cliquant sur set up the wiki. Les étapes qui suivent consisteront en la génération d’un fichier de configuration que nous téléchargerons puis déplacerons à la racine de notre site :

On définit tout d’abord la langue :

Puis on vérifie que tous les prérequis sont remplis :

On renseigne ensuite les informations d’authentification à la base de données mywikidb créée précédemment :

On choisit ensuite le moteur de stockage InnoDB :

Puis le nom du Wiki :

Ensuite on crée un administrateur pour la plateforme :

On peut choisir d’arrêter l’installation à cette étape :

Et on confirme :

On valide le résumé de l’installation :

Le fichier LocalSettings.php a été généré, nous pouvons le télécharger :

Pour le copier à la racine de notre site :
cp /home/sysadmin/Downloads/LocalSettings.php /var/www/mywiki/ chown www-data:root /var/www/mywiki/LocalSettings.php chmod 400 /var/www/mywiki/LocalSettings.php
On peut ensuite accéder à notre wiki :

Et se connecter avec notre administrateur :

Notre portail est installé et prêt à l’emploi :

Contenu du fichier LocalSettings.php généré et copié à la racine du site :
<?php if ( !defined( 'MEDIAWIKI' ) ) { exit; } $wgSitename = "MyWiki"; $wgScriptPath = ""; $wgServer = "https://mywiki.opensharing.priv"; $wgResourceBasePath = $wgScriptPath; $wgLogo = "$wgResourceBasePath/resources/assets/wiki.png"; $wgEnableEmail = true; $wgEnableUserEmail = true; # UPO $wgEmergencyContact = "apache@mywiki.opensharing.priv"; $wgPasswordSender = "apache@mywiki.opensharing.priv"; $wgEnotifUserTalk = false; # UPO $wgEnotifWatchlist = false; # UPO $wgEmailAuthentication = true; $wgDBtype = "mysql"; $wgDBserver = "localhost"; $wgDBname = "mywikidb"; $wgDBuser = "mywikiadmin"; $wgDBpassword = "mywikiadminpw"; $wgDBprefix = ""; $wgDBTableOptions = "ENGINE=InnoDB, DEFAULT CHARSET=binary"; $wgMainCacheType = CACHE_NONE; $wgMemCachedServers = []; $wgEnableUploads = false; $wgUseInstantCommons = false; $wgPingback = true; $wgShellLocale = "C.UTF-8"; $wgLanguageCode = "fr"; $wgSecretKey = "cdb2aafd543f695484869c8fa0a2c1634ab594308ed316a91ef304e65a28dc2d"; $wgAuthenticationTokenVersion = "1"; $wgUpgradeKey = "a1b28dabfbfa7d1d"; $wgRightsPage = ""; # Set to the title of a wiki page that describes your license/copyright $wgRightsUrl = ""; $wgRightsText = ""; $wgRightsIcon = ""; $wgDiff3 = "/usr/bin/diff3"; $wgDefaultSkin = "vector"; wfLoadSkin( 'MonoBook' ); wfLoadSkin( 'Timeless' ); wfLoadSkin( 'Vector' );
POUR ALLER PLUS LOIN
1. Effectuer une sauvegarde manuelle complète
mkdir -p /home/sysadmin/backup/1.33.0/ cd /home/sysadmin/backup/1.33.0/ tar -czvf backup-mediawiki-20190710.tar.gz -C /var/www/ mywiki/ mysqldump --user=mywikiadmin --password=mywikiadminpw --databases mywikidb > mediawiki-20190710.sql
2. Effectuer une restauration manuelle complète
cd /home/sysadmin/backup/1.33.0/ tar -xzvf backup-mediawiki-20190710.tar.gz -C /var/www/ mysql --user=mywikiadmin --password=mywikiadminpw mywikidb < mediawiki-20190710.sql