\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.
