\chapter{Migration des services de jails FreeBSD vers docker} \label{chap:migration_docker} \large \paragraph{} L'intégralité des services utilisé par le service informatique fonctionnaient dans des \textit{jails FreeBSD}\footnote{Système de conteneur propre aux système BSD. La première version est sortie en mars 2000 avec FreeBSD 4}. Étant la seule personne au service informatique a avoir des compétences dans l'administration de serveur FreeBSD, at afin d'anticiper mon départ prévu début août, nous avons décidé de tout migrer vers des conteneurs \textit{Docker}. \normalsize \paragraph{} \textit{Docker} a l'avantage d'être une solution beaucoup plus répandue et accessible. Notre alternant Lucas la maitrisait déjà, ce qui n'était pas mon cas. Nous avons donc travailler ensemble sur ce point. \section{Migration de services existants} \subsection{Inventaire} \paragraph{} Nous avons commencé par faire un inventaire complet de l'existant. Tous les conteneurs fonctionnaient sur une seule machine physique, il y en avait 3 en production~: \begin{itemize} \item \textbf{un serveur web} avec dessus GLPI, NextCloud et Dokuwiki \item \textbf{un serveur MariaDB} pour les bases GLPI et Nextcloud \item \textbf{une instance Gitea}, utilisant le serveur web comme frontal \end{itemize} \paragraph{} Le tout était sauvegardé sur une machine distante en SSH avec \link{https://www.borgbackup.org/}{Borg Backup} piloté par un script maison. \subsection{Défintion de la nouvelle architecture} \paragraph{} Nous sommes partis du principe d'un conteneur par service, et ce même pour les base de données attachées. En frontal, \link{https://taefik.io}{Træfik} a été retenu pour son intégration poussée avec Docker. Il fera office de reverse-proxy et de chiffrer le traffic. Un schéma du fonctionnement attendu de la nouvelle installation est disponible figure \ref{Fig:docker} (page \pageref{Fig:docker}). \begin{figure}[H] \includegraphics[width=\linewidth]{generated/plan_docker} \caption{Instalation attendue des conteneurs Docker afin de remplacer les \textit{Jails BSD}} \label{Fig:docker} \end{figure} \section{L'installation en laboratoire} \subsubsection{La machine hôte} \paragraph{} Le système retenu pour la machine hôte est \textit{Debian Stable}\footnote{Debian 10 au moment de l'installation du serveur}. Le système est installé sur un ensemble en \textit{RAID 1} afin d'être tolérant à la panne. Il a fallu prendre des précautions afin d'obtenir une vrai tolérance. Ainsi le chargeur de démarrage est installé \textbf{sur les deux disques}. \subsubsection{les conteneurs} \paragraph{} La définition des conteneurs s'est faites avec \textit{Docker-Compose}. Ce fichier contient les paramètres relatifs au conteneurs~: source des images, variables d'environnement, volumes de données. \paragraph{} Lucas s'est chargé de l'écriture du premier jet de ce fichier pendant que je me chargeait de tester l'importation des données dans des conteneurs. \subsubsection{Le cas GLPI} \paragraph{} Le principe des image docker est simple~: il suffit souvent d'aller faire \textit{\flqq ses courses\frqq} sur le \textit{dockerhub} où l'on trouve des inages toute faites pour beaucoup de services. \textbf{Problème}~: aucune des images GLPI testée ne fonctionne. \paragraph{} Lucas a donc décidé de créer une image à partir d'une autre de base. Je suis intervenu ensuite pour intégrer le plugin \textit{Fusion inventory}, le point d'entrée des agents et des tâches \textit{cron}\footnote{système de planification des tâches}. \subsubsection{Le cas Gitea} \paragraph{} La migration de cette application impliquait aussi la migratoion de sa base de données de \textit{SQLite} vers \textit{MariaDB}. J'ai passé deux jours complets afin de \textbf{tester plusieurs système de migration} mais rien n'a fonctionné correctement~: \begin{itemize} \item utilisation de la fonction d'export de Gitea dans un format compatible MariaDB \item écriture d'un script transformant l'export SQLite en fichier SQL compatible MariaDB. \end{itemize} \paragraph{} Comme les données des dépôts pouvaient être \textbf{facilement restaurées} avec l'export réalisé depuis la \textit{Jail}, j'ai décidé de repartir de zéro du côté de la base de données. J'ai donc recréé les comptes uilisateurs et chacun a replacé sa clef SSH\footnote{nous n'utilisions aucune fonctionnalité liées à la base de données à part l'authentification}; évitant de perdre davantage de temps. \section{Le passage en production} \paragraph{} Une fois l'écriture du \textit{Docker-Compose} par Lucas finalisée, je suis intervenu sur la correction de certains problèmes et le peaufinage des configurations. Nous avons ensuite plannifié le passage en production. \paragraph{} Pour le passage en production, il nous a fallu réutiliser le serveur FreeBSD. Les services à migrer étant exclusivement utilisés par le service informatique, nous avons défini une demi-journée de coupure de l'ensemble des services pour la migration. \paragraph{} Comme nous avions passé beaucoup de temps à tester --- que se soit la mise en place du système hôte ou les conteneurs --- la mise en production s'est \textbf{globalement bien passée}. \section{En conclusion} \paragraph{} Ce projet a sûrement été \textbf{le plus intéressant de ces derniers mois}. Travailler de concert avec Lucas a été source de motivations et de plaisir. J'ai d'ailleurs beaucoup appris à ses côtés.