Serveur mediawiki basé docker

De knowledge
Aller à la navigation Aller à la recherche

Présentation

Pur exemple de récursivité, cette page décrit la mise en place du site sur lequel elle est écrite. C'est donc un texte "cosmogonique" conceptuellement "Apocryphe"... comme la bible!

Préparation

Prérequis

  • Un serveur FRONT (une VM) avec Docker installé et Apache configuré en "reverse proxy". Un Virtual host est également configuré pour notre site.
  • Un serveur de base de données mysql ou mariaDB (moi il est installé sur un sous réseau "back" non accessible d'internet mais accessible du serveur FRONT (réseau 10.0.0.0/8)
  • Le fichier de configuration LocalSettings.php et le fichier image qui symbolise le wiki (pour moi c'est homer.png que l'on retrouve ce contre en haut a gauche).

Nettoyage

Si on avait "joué" avant avec le serveur il est préférable d'ffacer tout ce qui ne sert plus à rien.

sudo docker system prune -a

Efface tout les containers qui ne tournent pas. (attention à ce que vous faites).

Installation

On va créer le réseau local sur lequel notre container mediawiki va tourner. Si ce n'est pas le premier container "en frontal" sur ce serveur cette ligne est inutiles votre réseau existe déjà

sudo docker network create --subnet=172.18.0.0/16 front-net

On instancie une image de "mediawiki" sous le nom de "knowledge-mediawiki" en l'attachant au réseau "front-net" et en lui donnant l'adresse IP 172.18.0.100 (c'est un choix arbitraire on peut changer cette adresse n'importe où dans le "netmask" 172.10.x.x.

sudo docker container run --net front-net --ip 172.18.0.100 -d --name knowledge-mediawiki mediawiki

On vérifie la création :

sudo docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e1868b5c70e4 mediawiki "docker-php-entrypoi…" 7 minutes ago Up 7 minutes 80/tcp knowledge-mediawiki

On vérifie que la machine est connectée au réseau en faisant la liste des serveurs sur le sous réseau

nmap -sP 172.18.0.0/16 #pour la liste des IP associées

nmap -sP 172.18.0.0/24 #pour les 256 premères

Starting Nmap 7.80 ( https://nmap.org ) at 2023-06-10 19:30 CEST
Nmap scan report for xxxxx (172.18.0.1)
Host is up (0.049s latency).
Nmap scan report for 172.18.0.100
Host is up (0.0035s latency).
Nmap done: 256 IP addresses (2 hosts up) scanned in 4.92 seconds

On voit bien notre container en 172.18.0.100

On teste la connectivité http:

curl -i http://172.18.0.100

Qui nous dit :

HTTP/1.1 301 Moved Permanently
Date: Sat, 10 Jun 2023 17:33:30 GMT
Server: Apache/2.4.56 (Debian)
X-Powered-By: PHP/8.1.19
X-Content-Type-Options: nosniff
Vary: Accept-Encoding,Cookie
Expires: Thu, 01 Jan 1970 00:00:00 GMT
Cache-Control: private, must-revalidate, max-age=0
Last-Modified: Sat, 10 Jun 2023 17:33:30 GMT
Location: https://knowledge.pinon-hebert.fr/index.php/Accueil
X-Request-Id: b2c445af2999da8469c434c1
Transfer-Encoding: chunked
Content-Type: text/html; charset=UTF-8

On va donc chercher la page où on nous dit d'aller.

https://knowledge.pinon-hebert.fr/index.php/Accueil

On reçoit une page qui nous dit :

LocalSettings.php not found.

Tout tourne bien il reste plus qu'a configurer.

Configuration

Les fichiers de config

sudo docker cp LocalSettings.php knowledge-mediawiki:/var/www/html
sudo docker cp homer.png knowledge-mediawiki:/var/www/html/resources/assets/homer.png

Si le fichier "LocalSettings.php" est correctement remplis le site marchera bien. Sinon on peut utiliser l'interface de configuration de mediawiki sur la page de garde principale du serveur "non configuré".

Passage du serveur apache du container en "prod"

On commence par récupérer le fichier /etc/apache2/conf-available/security.conf.

sudo docker cp knowledge-mediawiki:/etc/apache2/conf-available/security.conf .

On le modifie pour mettre les deux variables de cette façon;

ServerTokens Prod
ServerSignature Off

On le renvoie sur le container knowledge-mediawiki.

sudo docker cp knowledge-mediawiki:/etc/apache2/conf-available/security.conf .
sudo docker container restart knowledge-mediawiki

Et c'est bon pour le container.

La configuration du "reverse proxy"

On modifie le fichier de conf du reverse proxy Apache (un autre RP est utilisable mais moi c'est ... Apache).

On modifie le fichier knowledge-ssl.conf.

sudo vi /etc/apache2/sites-available/knowledge-ssl.conf

Et, dans le "virtual host" on ajoute :

               ProxyPass / http://172.18.0.100/
               ProxyPassReverse / http://172.18.0.100/

On recharge la conf apache:

sudo systemctl reload apache2

Et on peut se connecter depuis l'internet "public" https://knowledge.pinon-hebert.fr/index.php/Accueil dans un navigateur !!!!

Mainpage.png

Et ça marche!

Remarque

Ca marche ca marche on s'emballe la. Dans l'état actuel des choses on a un mediawiki dans un container qui a ses fichiers dans un FS qui est dans le container. En particulier les images (les pages sont dans la base de données).

Les répertoires :

/var/www/html/images et /var/www/html/config contiennent des données importantes.

Tant que l'on relance le container avec :

sudo docker container start knowledge-mediawiki

Tout se passe bien. En revanche si on fait un :

sudo docker rm mediawiki
sudo docker container run --net front-net --ip 172.18.0.100 -d --name knowledge-mediawiki mediawiki

On perds les images !!!!! On se moque pas ça m'est arrivé. Si on veut être propre il faut donc lancer le container avec les commandes :

#!/bin/bash
echo "Creation du container pour le mediawiki knowledge"
echo "  Creation des repertoires"
# On crée les repertoires dans le host
sudo mkdir -p /srv/mediawiki/images
sudo mkdir -p /srv/mediawiki/config
printf "  \033[32mOK\033[0m\n"
# On arrete si ca tourne
echo "  Arret du container knowledge-mediawiki"
sudo docker stop knowledge-mediawiki
sudo docker rm -f knowledge-mediawiki
printf "  \033[32mOK\033[0m\n"
# On crée un container avec les indirections
echo "  ON redémarre avec les liens"
sudo docker run -d \
  --net front-net \
  --ip 172.18.0.100 \
  --name knowledge-mediawiki \
  -v /srv/mediawiki/images:/var/www/html/images \
  -v /srv/mediawiki/config:/var/www/html/config \
  mediawiki
printf "  \033[32mOK\033[0m\n"
# On configure
echo "  On reconfigure"
sudo docker cp LocalSettings.php knowledge-mediawiki:/var/www/html
sudo docker cp homer.png knowledge-mediawiki:/var/www/html/resources/assets/homer.png
printf "  \033[32mOK\033[0m\n"

Maintenance

Les logs

Afin de pouvoir consulter les logs de façons aisée et de les conserver après avoir relancé le container elles sont stockées sur le disque de l'hote.

Pour retrouver où on demande à docker la liste des container "running" avec leur id.

$ docker ps
CONTAINER ID   IMAGE       COMMAND                  CREATED       STATUS        PORTS     NAMES
b8ed1253fc02   mediawiki   "docker-php-entrypoi…"   2 years ago   Up 3 months   80/tcp    knowledge-mediawiki

Dans notre cas l'ID est b8ed1253fc02 (ou du moins commence par "b8ed1253fc02") Pour avoir plus de détails :

docker inspect b8ed1253fc02

Qui nous déballe un JSON énorme! On simplifie la réponse par :

docker inspect b8ed1253fc02 | grep LogPath

Qui nous donne quelque chose comme :

        "LogPath": "/var/lib/docker/containers/b8ed1253fc022136668452b4f113fa587a593104bf7859617a3e64e32b08af2f/b4bd1253fc022136668452b4f113fa587a593104bf7859617a3e64e32b08af2f-json.log",

c'est là que se trouvent les logs!

Attention ces logs ont tendances a grossir grossir tant et si bien que le FS devient full.

Problème d'affichage des textes en mode "Syntax highlighting"

Il m'est arrivé un problème étrange. Le site s'affichait correctement, je pouvais faire des MAJ sans problèmes mais impossible de traiter les textes en Syntax highlighting. Ni pour les afficher ni pour les éditer. J'ai mis un moment à comprendre ce qu'il se passait mais c'était un bête problème de "file system full".

C'était le fichier de log ci dessus qui s'était remplis a cause d'un bot qui me sollicitait toutes les 3 secondes. Je l'ai bloqué au niveau du RP Apache !