**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 [[https://bugs.the-redunicorn.fr/index.php?do=details&task_id=62|le bugtracker]]. Cette opération est la genèse de la version [[the_red_unicorn:cluster_one|ClusterOne]] du projet, succédant à [[the_red_unicorn:crime_of_the_century|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 : [[https://bugs.the-redunicorn.fr/index.php?do=details&task_id=68|#68]] ===== Base de données ===== [[https://bugs.the-redunicorn.fr/index.php?do=details&task_id=102|#102]] {{ :fichier:arborescence_docker_clusterone.png|Création de l'arborescence pour le projet ClusterOne}} 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 [[https://admin.the-redunicorn.fr/adminer|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) ===== [[https://bugs.the-redunicorn.fr/index.php?do=details&task_id=103|#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 : [[https://bugs.the-redunicorn.fr/index.php?do=details&task_id=69|#69]]