Documentation de l’opération de maintenance 19-062 : conteneurisation des services.

Le but étant de sécuriser les sauvegardes et de faciliter les redéploiements à partir des sauvegardes en cas de problème. Cela permettrait aussi une réplication plus simple entre deux serveurs, en configuration « failover ». Sur cette page, vous trouverez alors toutes les étapes de ces opérations de maintenance, documentées. Vous pouvez aussi trouver des informations concernant l’avancement des opérations sur le bugtracker.

Cette opération est la genèse de la version ClusterOne du projet, succédant à CrimeOfTheCentury.

Recensement des services

/!\ Le choix technique ayant varié depuis le lancement de cette étude, cette section ne s’avère plus être pertinente et doit être mise à jour (18/11/2020) /!\

Cette étape consiste en la liste des services actuellement installés et de leurs dépendances systèmes, afin de connaître exhaustivement ce qu’il sera nécessaire de réinstaller dans les conteneurs. Tout ce qui est téléchargeable comme certains services web ne nécessiteront que la copie des répertoires d’installation avec parfois éventuellement l’installation de dépendances systèmes. Pour les autres services, seules les configurations seront utiles, il faut donc lister exhaustivement les fichiers/répertoires de configuration.

Services orientés web

Sans mention contraire, la version de PHP est 7.3 (FPM et CLI). Concernant MySQL, une étude devra être réalisée pour la migration vers MariaDB.

  • Wiki

    • Mediawiki 1.32

    • Dépendances : Parsoid, librsvg, PHP (pcre, session, spl, openssl/libressl, json, mbstring, fileinfo, intl, curl, pdo_mysql), MySQL

  • Status

    • Flyspray

    • Dépendances : PHP, MySQL

  • Cloud

    • Nextcloud 16 (disponible via snap)

    • Dépendances : PHP (ctype, curl, dom, gd, iconv, json, libxml, mbstring, openssl, posix, session, simplexml, xmlreader, xmlwriter, zip, zlib, pdo_mysql, fileinfo, bz2, intl, exif, apcu, memcached, imagick), MySQL, ffmpeg, LibreOffice

  • Webmail

    • Rainloop

    • Dépendances : PHP (curl, iconv, json, libxml, dom, openssl, datetime, pcre, spl, pdo_mysql), MySQL

  • Gestion service mail

    • postfixadmin

    • Dépendances : PHP (pdo_mysql), MySQL

  • Pastebin

    • Privatebin

    • Dépendances : PHP (mcrypt, gd, pdo_mysql), MySQL

  • tinyze.me

    • YOURLS

    • Dépendances : PHP (curl, pdo_mysql), MySQL

  • Portfolio

    • Lychee

    • Dépendances : PHP (session, exif, mbstring, gd, mysqli, json, zip, imagick), MySQL, ffmpeg

  • Gestion service bdd

    • Adminer

    • Dépendances : PHP (pdo_mysql), MySQL

Services mail

  • Postifx

  • Dovecot

  • Spam filtering

    • amavisd-new

    • clamav

    • rspamd

Migration

  • Durée estimée : 153h

  • Référence : #68

Base de données

#102

Cette première migration a été l’occasion de penser l’architecture de plus près et de “se faire la main” sur Docker. Une arborescence dédiée a ainsi été crée sur le serveur afin d’y conserver les configurations, scripts de déploiement, volumes et autres ressources. Toujours en termes d’architecture, un réseau bridge personnalisé Docker a été créé (tru-net). Il permet de disposer d’un réseau auquel rattacher l’ensemble des conteneurs.

Deux conteneurs ont été créés : tru-mariadb, une instance MariaDB qui accueille les données de l’ancienne instance MySQL ; tru-adminer, issu d’une image officielle Adminer et disponible à l’adresse admin.the-redunicorn.fr/adminer. L’ensemble des services utilisent dorénavant cette nouvelle instance. Cette migration a été l’occasion de nettoyer la base de données et de les isoler correctement les unes des autres.

Quelques remarques ou points de vigilance :

  • Le volume où se trouvent les logs doit disposer des droits de groupe docker

  • L’authentification de l’administrateur root de la base de données se fait via l’utilisateur Unix, un compte admin spécifique pour un accès distant est à créer

Commandes utiles :

sed \-i "s/latin1/utf8/" file
sudo sh \-c 'mysqldump -u root -p db > db.sql'
sudo sh \-c 'docker exec -i container sh -c \\'exec mysql \-u root \-p db\\' < db.sql'

Flyspray (bugs.the-redunicorn.fr)

#103

Une première idée pour cette migration était de construire un unique conteneur à partir d’une image PHP Alpine en y ajoutant ensuite NGINX (apk add nginx). Finalement, l’idée de séparer le plus possible les applications a été préférée. On dispose alors de deux conteneurs : tru-flyspray, sur la base d’une image NGINX Alpine dans lequel on copie la sommaire configuration ; tru-flyspray_php, à partir d’une image PHP-FPM Alpine à laquelle on ajoute l’extension php mysqli (docker-php-ext-install mysqli).

Les quelques points de vigilance sont :

  • l’ajout du paramètre force_baseurl dans flyspray.conf.php afin qu’il utilise l’URL d’origine et non celle du conteneur NGINX,

  • le montage impératif du répertoire racine du serveur web dans les deux conteneurs afin que NGINX et PHP puissent y accéder,

  • le nom du point de montage précédemment cité devrait être le même pour les deux conteneurs afin d’en faciliter la gestion au niveau des fastcgi_params.

Intégration

  • Durée estimée : 35h

  • Référence : #69