480 lines
15 KiB
HTML
480 lines
15 KiB
HTML
<!DOCTYPE html>
|
||
<html>
|
||
<head>
|
||
<title>etude.md</title>
|
||
<meta http-equiv="Content-type" content="text/html;charset=UTF-8">
|
||
|
||
<style>
|
||
/* https://github.com/microsoft/vscode/blob/master/extensions/markdown-language-features/media/markdown.css */
|
||
/*---------------------------------------------------------------------------------------------
|
||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||
* Licensed under the MIT License. See License.txt in the project root for license information.
|
||
*--------------------------------------------------------------------------------------------*/
|
||
|
||
body {
|
||
font-family: var(--vscode-markdown-font-family, -apple-system, BlinkMacSystemFont, "Segoe WPC", "Segoe UI", "Ubuntu", "Droid Sans", sans-serif);
|
||
font-size: var(--vscode-markdown-font-size, 14px);
|
||
padding: 0 26px;
|
||
line-height: var(--vscode-markdown-line-height, 22px);
|
||
word-wrap: break-word;
|
||
}
|
||
|
||
#code-csp-warning {
|
||
position: fixed;
|
||
top: 0;
|
||
right: 0;
|
||
color: white;
|
||
margin: 16px;
|
||
text-align: center;
|
||
font-size: 12px;
|
||
font-family: sans-serif;
|
||
background-color:#444444;
|
||
cursor: pointer;
|
||
padding: 6px;
|
||
box-shadow: 1px 1px 1px rgba(0,0,0,.25);
|
||
}
|
||
|
||
#code-csp-warning:hover {
|
||
text-decoration: none;
|
||
background-color:#007acc;
|
||
box-shadow: 2px 2px 2px rgba(0,0,0,.25);
|
||
}
|
||
|
||
body.scrollBeyondLastLine {
|
||
margin-bottom: calc(100vh - 22px);
|
||
}
|
||
|
||
body.showEditorSelection .code-line {
|
||
position: relative;
|
||
}
|
||
|
||
body.showEditorSelection .code-active-line:before,
|
||
body.showEditorSelection .code-line:hover:before {
|
||
content: "";
|
||
display: block;
|
||
position: absolute;
|
||
top: 0;
|
||
left: -12px;
|
||
height: 100%;
|
||
}
|
||
|
||
body.showEditorSelection li.code-active-line:before,
|
||
body.showEditorSelection li.code-line:hover:before {
|
||
left: -30px;
|
||
}
|
||
|
||
.vscode-light.showEditorSelection .code-active-line:before {
|
||
border-left: 3px solid rgba(0, 0, 0, 0.15);
|
||
}
|
||
|
||
.vscode-light.showEditorSelection .code-line:hover:before {
|
||
border-left: 3px solid rgba(0, 0, 0, 0.40);
|
||
}
|
||
|
||
.vscode-light.showEditorSelection .code-line .code-line:hover:before {
|
||
border-left: none;
|
||
}
|
||
|
||
.vscode-dark.showEditorSelection .code-active-line:before {
|
||
border-left: 3px solid rgba(255, 255, 255, 0.4);
|
||
}
|
||
|
||
.vscode-dark.showEditorSelection .code-line:hover:before {
|
||
border-left: 3px solid rgba(255, 255, 255, 0.60);
|
||
}
|
||
|
||
.vscode-dark.showEditorSelection .code-line .code-line:hover:before {
|
||
border-left: none;
|
||
}
|
||
|
||
.vscode-high-contrast.showEditorSelection .code-active-line:before {
|
||
border-left: 3px solid rgba(255, 160, 0, 0.7);
|
||
}
|
||
|
||
.vscode-high-contrast.showEditorSelection .code-line:hover:before {
|
||
border-left: 3px solid rgba(255, 160, 0, 1);
|
||
}
|
||
|
||
.vscode-high-contrast.showEditorSelection .code-line .code-line:hover:before {
|
||
border-left: none;
|
||
}
|
||
|
||
img {
|
||
max-width: 100%;
|
||
max-height: 100%;
|
||
}
|
||
|
||
a {
|
||
text-decoration: none;
|
||
}
|
||
|
||
a:hover {
|
||
text-decoration: underline;
|
||
}
|
||
|
||
a:focus,
|
||
input:focus,
|
||
select:focus,
|
||
textarea:focus {
|
||
outline: 1px solid -webkit-focus-ring-color;
|
||
outline-offset: -1px;
|
||
}
|
||
|
||
hr {
|
||
border: 0;
|
||
height: 2px;
|
||
border-bottom: 2px solid;
|
||
}
|
||
|
||
h1 {
|
||
padding-bottom: 0.3em;
|
||
line-height: 1.2;
|
||
border-bottom-width: 1px;
|
||
border-bottom-style: solid;
|
||
}
|
||
|
||
h1, h2, h3 {
|
||
font-weight: normal;
|
||
}
|
||
|
||
table {
|
||
border-collapse: collapse;
|
||
}
|
||
|
||
table > thead > tr > th {
|
||
text-align: left;
|
||
border-bottom: 1px solid;
|
||
}
|
||
|
||
table > thead > tr > th,
|
||
table > thead > tr > td,
|
||
table > tbody > tr > th,
|
||
table > tbody > tr > td {
|
||
padding: 5px 10px;
|
||
}
|
||
|
||
table > tbody > tr + tr > td {
|
||
border-top: 1px solid;
|
||
}
|
||
|
||
blockquote {
|
||
margin: 0 7px 0 5px;
|
||
padding: 0 16px 0 10px;
|
||
border-left-width: 5px;
|
||
border-left-style: solid;
|
||
}
|
||
|
||
code {
|
||
font-family: Menlo, Monaco, Consolas, "Droid Sans Mono", "Courier New", monospace, "Droid Sans Fallback";
|
||
font-size: 1em;
|
||
line-height: 1.357em;
|
||
}
|
||
|
||
body.wordWrap pre {
|
||
white-space: pre-wrap;
|
||
}
|
||
|
||
pre:not(.hljs),
|
||
pre.hljs code > div {
|
||
padding: 16px;
|
||
border-radius: 3px;
|
||
overflow: auto;
|
||
}
|
||
|
||
pre code {
|
||
color: var(--vscode-editor-foreground);
|
||
tab-size: 4;
|
||
}
|
||
|
||
/** Theming */
|
||
|
||
.vscode-light pre {
|
||
background-color: rgba(220, 220, 220, 0.4);
|
||
}
|
||
|
||
.vscode-dark pre {
|
||
background-color: rgba(10, 10, 10, 0.4);
|
||
}
|
||
|
||
.vscode-high-contrast pre {
|
||
background-color: rgb(0, 0, 0);
|
||
}
|
||
|
||
.vscode-high-contrast h1 {
|
||
border-color: rgb(0, 0, 0);
|
||
}
|
||
|
||
.vscode-light table > thead > tr > th {
|
||
border-color: rgba(0, 0, 0, 0.69);
|
||
}
|
||
|
||
.vscode-dark table > thead > tr > th {
|
||
border-color: rgba(255, 255, 255, 0.69);
|
||
}
|
||
|
||
.vscode-light h1,
|
||
.vscode-light hr,
|
||
.vscode-light table > tbody > tr + tr > td {
|
||
border-color: rgba(0, 0, 0, 0.18);
|
||
}
|
||
|
||
.vscode-dark h1,
|
||
.vscode-dark hr,
|
||
.vscode-dark table > tbody > tr + tr > td {
|
||
border-color: rgba(255, 255, 255, 0.18);
|
||
}
|
||
|
||
</style>
|
||
|
||
<style>
|
||
/* Tomorrow Theme */
|
||
/* http://jmblog.github.com/color-themes-for-google-code-highlightjs */
|
||
/* Original theme - https://github.com/chriskempson/tomorrow-theme */
|
||
|
||
/* Tomorrow Comment */
|
||
.hljs-comment,
|
||
.hljs-quote {
|
||
color: #8e908c;
|
||
}
|
||
|
||
/* Tomorrow Red */
|
||
.hljs-variable,
|
||
.hljs-template-variable,
|
||
.hljs-tag,
|
||
.hljs-name,
|
||
.hljs-selector-id,
|
||
.hljs-selector-class,
|
||
.hljs-regexp,
|
||
.hljs-deletion {
|
||
color: #c82829;
|
||
}
|
||
|
||
/* Tomorrow Orange */
|
||
.hljs-number,
|
||
.hljs-built_in,
|
||
.hljs-builtin-name,
|
||
.hljs-literal,
|
||
.hljs-type,
|
||
.hljs-params,
|
||
.hljs-meta,
|
||
.hljs-link {
|
||
color: #f5871f;
|
||
}
|
||
|
||
/* Tomorrow Yellow */
|
||
.hljs-attribute {
|
||
color: #eab700;
|
||
}
|
||
|
||
/* Tomorrow Green */
|
||
.hljs-string,
|
||
.hljs-symbol,
|
||
.hljs-bullet,
|
||
.hljs-addition {
|
||
color: #718c00;
|
||
}
|
||
|
||
/* Tomorrow Blue */
|
||
.hljs-title,
|
||
.hljs-section {
|
||
color: #4271ae;
|
||
}
|
||
|
||
/* Tomorrow Purple */
|
||
.hljs-keyword,
|
||
.hljs-selector-tag {
|
||
color: #8959a8;
|
||
}
|
||
|
||
.hljs {
|
||
display: block;
|
||
overflow-x: auto;
|
||
color: #4d4d4c;
|
||
padding: 0.5em;
|
||
}
|
||
|
||
.hljs-emphasis {
|
||
font-style: italic;
|
||
}
|
||
|
||
.hljs-strong {
|
||
font-weight: bold;
|
||
}
|
||
</style>
|
||
|
||
<style>
|
||
/*
|
||
* Markdown PDF CSS
|
||
*/
|
||
|
||
body {
|
||
font-family: -apple-system, BlinkMacSystemFont, "Segoe WPC", "Segoe UI", "Ubuntu", "Droid Sans", sans-serif, "Meiryo";
|
||
padding: 0 12px;
|
||
}
|
||
|
||
pre {
|
||
background-color: #f8f8f8;
|
||
border: 1px solid #cccccc;
|
||
border-radius: 3px;
|
||
overflow-x: auto;
|
||
white-space: pre-wrap;
|
||
overflow-wrap: break-word;
|
||
}
|
||
|
||
pre:not(.hljs) {
|
||
padding: 23px;
|
||
line-height: 19px;
|
||
}
|
||
|
||
blockquote {
|
||
background: rgba(127, 127, 127, 0.1);
|
||
border-color: rgba(0, 122, 204, 0.5);
|
||
}
|
||
|
||
.emoji {
|
||
height: 1.4em;
|
||
}
|
||
|
||
code {
|
||
font-size: 14px;
|
||
line-height: 19px;
|
||
}
|
||
|
||
/* for inline code */
|
||
:not(pre):not(.hljs) > code {
|
||
color: #C9AE75; /* Change the old color so it seems less like an error */
|
||
font-size: inherit;
|
||
}
|
||
|
||
/* Page Break : use <div class="page"/> to insert page break
|
||
-------------------------------------------------------- */
|
||
.page {
|
||
page-break-after: always;
|
||
}
|
||
|
||
</style>
|
||
<link rel="stylesheet" href="file:///run/user/1000/gvfs/sftp%3Ahost%3Deolebase.ac-test.fr%2Cuser%3Droot/root/git/envole/src/envole-1.0/doc/misc/tools/cadoles_theme.css" type="text/css">
|
||
<script src="https://unpkg.com/mermaid/dist/mermaid.min.js"></script>
|
||
</head>
|
||
<body>
|
||
<script>
|
||
mermaid.initialize({
|
||
startOnLoad: true,
|
||
theme: document.body.classList.contains('vscode-dark') || document.body.classList.contains('vscode-high-contrast')
|
||
? 'dark'
|
||
: 'default'
|
||
});
|
||
</script>
|
||
<h1 id="envole">Envole</h1>
|
||
<h2 id="introduction">Introduction</h2>
|
||
<p>Envole est une solution qui propose un ensemble d'applicatifs web fédérés autour d'un annaire afin de gérer l'identité ainsi qu'un SSO afin de gérer l'authentification.</p>
|
||
<p>Il s'appuit sur la distrution EOLE pour déployer ses différents composants.</p>
|
||
<p>Envole rencontre depuis des années des problèmatiques :</p>
|
||
<ul>
|
||
<li>Elle doit se baser sur une version précise d'EOLE 2.5 ou 2.6 ou 2.7 ou 2.8 ou 2.9 qui ont chacune leur contrainte de version php</li>
|
||
<li>Les différentes applications Envole ont leur propre contrainte de version php.</li>
|
||
<li>Ce qui oblige de limiter les possibilités de montée de version de l'application dans une version x d'eole car cette dernière ne fournit pas la version minimum de php requise</li>
|
||
<li>Ou qui empéche le passage d'une application de fonctionner dans une version x d'eole car cette dernière propose une version trop résente de php pour l'application</li>
|
||
</ul>
|
||
<p>Ce document va chercher à évaluer la possibilité de conteneriser les applications Envole, afin qu'elles puissent fonctionner le moins possible en contrainte avec la version d'Eole</p>
|
||
<h2 id="architecture">Architecture</h2>
|
||
<h3 id="eolebase">EoleBase</h3>
|
||
<p>La présente étude part du principe qu'Envole ne serait plus installé sur une instance Scribe mais sur une installation EoleBase d'Eole</p>
|
||
<p><strong>Avantages</strong></p>
|
||
<ul>
|
||
<li>Décharger le serveur Scribe et lui laisser ses fonctions principales. C'est à dire
|
||
<ul>
|
||
<li>Contrôleur de Domaine</li>
|
||
<li>SSO</li>
|
||
<li>Annuaire</li>
|
||
<li>Imap (et SMTP ?)</li>
|
||
</ul>
|
||
</li>
|
||
<li>Faire évoluer plus facilement le serveur Envole vers des versions plus récente d'Eole avec moins de contrainte tout en assurant une mise à jour de sécurité plus régulière</li>
|
||
</ul>
|
||
<p><strong>Inconvéhients</strong></p>
|
||
<ul>
|
||
<li>L'adminstrateur devra configurer le lien SSO et Annaire qui eux restent sur le scribe.</li>
|
||
<li>Il devra donc fixer certains secrets sur le Scribe (notamment le compte reader/writer annuaire sur le scibe)</li>
|
||
<li>Connaitre et renseigner les hosts/ports des service SSO et Annuaire</li>
|
||
<li>Avoir un second nom de domaine pour l'accès aux applications Envole</li>
|
||
</ul>
|
||
<h3 id="paquet-debian">Paquet Debian</h3>
|
||
<p>Contrairement à la précédente logique Envole, il n'y aurait qu'un seul paquet Debian pour Envole. Il n'installerait pas les sources des applications, mais uniquement</p>
|
||
<ul>
|
||
<li>le dictionnaire eole de configuration</li>
|
||
<li>les templates de configuration</li>
|
||
<li>le dossier de définitions de l'ensemble des conteneurs possible pour Envole</li>
|
||
<li>un script qui viendrait monter ou non les conteneurs souhaités par l'administateur</li>
|
||
</ul>
|
||
<h3 id="poc">POC</h3>
|
||
<p>Afin de s'assurer de la faisabilité d'un tel changement, un POC a été initié, dans le cadre des éléments précédents cités. La première question fut de savoir quelle technologie de conteneurisation serait à utiliser PODMAN ou DOCKER, et dans leur logique de composer PODMAN-COMPOSE ou DOCKER-COMPOSER.</p>
|
||
<h3 id="podman-vs-docker-sur-eole">PODMAN vs DOCKER sur Eole</h3>
|
||
<p><strong>PODMAN</strong></p>
|
||
<p>Eole a intégré à partir de la 2.9 dans sa distribution podman. Ce qui de prime abord devrait-être la technologie à utiliser, sauf que</p>
|
||
<ul>
|
||
<li>Ubuntu 22.04 ne dispose pas de paquet pour podman-compose</li>
|
||
<li>Pour installer podman-compose, il est nécessaire de l'installer via pip</li>
|
||
<li>De plus la version de podman disponible sur Ubuntu 22.04 est une version 3.4 qui n'est pas compatible avec la version de podman-compose</li>
|
||
<li>Il est nécessaire d'installer la dernière version 4.4 de Podman PPA pour faire fonctionner l'ensemble</li>
|
||
<li>Par la suite il est possible de créer un composer d'image docker comme on pourrait le faire avec docker-compose. Podman est juste plus stricte dans sa synthaxe et certaines commandes ne sont pas tout à fait indentique</li>
|
||
<li>Mais il apparait qu'un reconfigure rendra totalement inopérant le réseau des conteneurs. Pour le rendre de nouveau opérant, il est nécessaire de le détruire pour le reconstruire.</li>
|
||
</ul>
|
||
<p><strong>DOCKER</strong></p>
|
||
<p>Eole n'a pas intégré nativement docker. Mais il est tout à fait possible de l'installer par ses propres moyens sauf que</p>
|
||
<ul>
|
||
<li>Tout comme Podman Ubuntu ne propose pas de paquet suffisament à jour de docker-ce et docker-compose</li>
|
||
<li>Il est nécessaire de les installer via la mise en place d'un PPA</li>
|
||
<li>Par la suite docker se comporte bien mieux que podman. Il est plus souple d'usage, moins verbeux</li>
|
||
<li>Mais tout comme podman, un reconfigure vient rendre totalement inopérant le reseau des conteneurs. Il est nécessaire de réinitialiser docker-ce pour rétablir le reseau.</li>
|
||
</ul>
|
||
<p><strong>CONCLUSION</strong></p>
|
||
<p>Quoi qu'il arrive, une intégration compléte que cela soit avec Podman ou avec Docker, demandera un travail d'intégration d'Eole</p>
|
||
<ul>
|
||
<li>afin de disposer des dernières versions possibles de l'un ou de l'autre</li>
|
||
<li>que l'un ou l'autre ne détruit pas le réseau associé au composer de conteneur</li>
|
||
</ul>
|
||
<p>Ma préférence va malgrés tout sur Docker, il est plus souple moins verbeux et me semble plus fiable à long terme. Il serait possible de maitenir les deux solutions en parrallèle avec un effort supplémentaire d'intégration et de maintenance.</p>
|
||
<h2 id="poc">POC</h2>
|
||
<h3 id="sources">Sources</h3>
|
||
<p>Les sources du POC sont disponible ici<br>
|
||
https://forge.cadoles.com/Envole/envole</p>
|
||
<p>Elles sont pour l'instant hébergé à Cadoles pour des raisons de simplicité de mise en oeuvre, mais à terme elles seront bien stockées chez Eole</p>
|
||
<h3 id="repository">Repository</h3>
|
||
<p>Certaines images sont hébergées elles aussi sur un repository public de Cadoles. Là aussi pour des raisons de simplicité de mise en oevre, mais à terme Eole devra fournir un repository propre aux images Envole.</p>
|
||
<p>Les images en questions sont celles des applications maintenues par Envole, en l'occurence pour l'instant uniquement Ninegate. Mais à terme pourra aussi y figurer des images d'applications tiers sur lesquelles nous aurions besion d'altérer légèrement le comportement.</p>
|
||
<h3 id="installation-du-poc">Installation du POC</h3>
|
||
<p>1- Instancier un eolebase 2.9</p>
|
||
<p>2- Installer eole-web</p>
|
||
<pre class="hljs"><code><div>apt-get install eole-web
|
||
Genconfig
|
||
Services > Activer l'interface web de l'EAD = non
|
||
Services > Activer le serveur de bases de données MySQL = non
|
||
Services > Activer l’interface d’administration du module (EAD3) = non
|
||
Applications Web > Nom de domaine des applications web = mondomaine.fr
|
||
save & quit
|
||
Reconfigure
|
||
</div></code></pre>
|
||
<p>3- Installer docker & docker-compose</p>
|
||
<pre class="hljs"><code><div>apt install git make apt-transport-https ca-certificates curl gnupg-agent software-properties-common
|
||
mkdir -p /etc/apt/keyrings
|
||
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
|
||
echo \
|
||
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
|
||
$(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
|
||
apt update
|
||
apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin docker-compose
|
||
</div></code></pre>
|
||
<p>4- Installer Envole</p>
|
||
<pre class="hljs"><code><div>cd /root
|
||
mkdir git
|
||
cd /root/git
|
||
git clone https://forge.cadoles.com/Envole/envole.git
|
||
cd /root/git/envole
|
||
make install
|
||
</div></code></pre>
|
||
<p>5- Configurer Envole</p>
|
||
|
||
</body>
|
||
</html>
|