\chapter{Migration des services de jails FreeBSD vers 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 de 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' etait 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 attachees. En frontal, 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} \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{Finalisation des configuration} \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.