Prérequis d’installation¶
L’installation de l’environnement INFRA sous Docker Swarm s’effectue à l’aide du rôle Ansible reemo-infra.
L’environnement INFRA se compose de plusieurs services dont les principaux sont :
Traefik : point d’entrée pour les utilisateurs
Signal : point d’enregistrement des Agents Reemo
Portal : portail d’accès utilisateurs
API : coeur de l’infrastructure
DB : base de donnée
Avant de démarrer, assurez-vous que votre environnement répond aux conditions suivantes.
Système d’exploitation supportés¶
Ubuntu (versions LTS récentes)
Red Hat Enterprise Linux
Rocky Linux
Spécifications matérielles minimales¶
Les ressources dépendent du type de base de données utilisé et de la taille de l’architecture (nombre de connexions simultanées). Les tableaux ci-dessous indiquent les valeurs minimales recommandées.
Cas 1 : Base MySQL interne¶
Environnement |
CPU |
RAM |
Disque |
|---|---|---|---|
Infra |
4 |
6 |
30G |
Portal |
2 |
4 |
30G |
API |
4 |
6 |
30G |
Cas 2 : Base MySQL NDB Cluster¶
Environnement |
CPU |
RAM |
Disque |
|---|---|---|---|
Infra |
4 |
10 |
30G |
Portal |
2 |
4 |
30G |
API |
4 |
8 |
30G |
Note
Pour un cluster NDB avec plus de 1000 connexions simultanées, prévoir 8 CPU et 16 Go RAM pour l’Infra, et 8 CPU et 14 Go RAM pour l’API.
Cas 3 : Base externe (MySQL ou PostgreSQL)¶
Environnement |
CPU |
RAM |
Disque |
|---|---|---|---|
Infra |
4 |
6 |
30G |
Portal |
2 |
4 |
30G |
API |
2 |
4 |
30G |
Dépendances Ansible¶
Le rôle reemo-infra s’appuie sur Ansible et plusieurs collections. Installez-les selon votre distribution :
Red Hat / RockyLinux¶
yum install ansible-core
yum install -y python3-pip
pip3 install docker
ansible-galaxy collection install community.docker
ansible-galaxy collection install community.crypto
Warning
Sous RockyLinux 9, il est nécessaire d’utiliser community.docker >= 3.10.2. Si besoin, forcez la mise à jour :
ansible-galaxy collection install community.docker --upgrade
Ubuntu¶
apt install ansible
apt install python3-docker
ansible-galaxy collection install community.docker
ansible-galaxy collection install community.crypto
Avant de procéder à l’installation de l’environnement INFRA Docker Swarm doit être installé.
Docker Swarm¶
INFRA s’appuie sur un cluster Docker Swarm pour déployer et gérer dynamiquement les services nécessaires à l’infrastructure Reemo. L’installation et l’initialisation de Docker Swarm constituent donc un prérequis avant toute mise en place de l’environnement INFRA.
Pour l’installation de Docker Swarm, deux approches sont possibles :
installation manuelle, réalisée directement sur les serveurs,
installation automatisée, via le rôle Ansible reemo-infra qui peut à la fois installer Docker et initialiser le cluster avec différents paramètres.
Warning
Fichier Inventaire minimal¶
Pour une installation de Docker Swarm, un fichier inventaire minimal est nécessaire regroupant les noeuds sur lesquels Docker Swarm sera installé et configuré.
L’installation s’appuie sur un inventaire Ansible. Celui-ci permet de définir l’architecture à déployer et de déclarer les hôtes sur lesquels les rôles seront appliqués.
Dans le reste de cette documentation, le fichier inventaire sera nommé inventory.yml.
Trois groupes principaux existent :
infra_manager : déploie l’environnement complet (API, Portal, DB, etc.)
portal_manager : déploie uniquement la partie frontale (services portal et signal)
api_manager : déploie uniquement la partie API (services api, apicron, proapi, prorelayapi, etc.)
Un même inventaire peut contenir un ou plusieurs de ces groupes selon l’architecture souhaitée.
Structure d’un fichier inventaire¶
Le fichier inventaire est au format YAML. Exemple minimal :
all:
vars:
API_LICENSE: "ewogICAg ... Uw5NXhGVDF0NFU2TkxOdjQvZU53PT0iCiAgICC9Cn0="
infra_manager:
hosts:
infra_manager1:
ansible_host: "10.0.0.1"
Exemple avec un seul serveur¶
all:
vars:
API_LICENSE: "ewogICAg ... Uw5NXhGVDF0NFU2TkxOdjQvZU53PT0iCiAgICC9Cn0="
infra_manager:
hosts:
infra_manager1:
ansible_host: "10.0.0.1"
Exemple avec un cluster de trois serveurs¶
all:
vars:
API_LICENSE: "ewogICAg ... Uw5NXhGVDF0NFU2TkxOdjQvZU53PT0iCiAgICC9Cn0="
infra_manager:
hosts:
infra_manager1:
ansible_host: "10.0.0.1"
infra_manager2:
ansible_host: "10.0.0.2"
infra_manager3:
ansible_host: "10.0.0.3"
Installation manuelle de Docker Swarm¶
Voici les commandes pour une installation manuelle de Docker qui inclut Docker Swarm
Ubuntu :
apt install docker.io python3-docker -y
RedHat :
yum install -y yum-utils
yum-config-manager --add-repo https://download.docker.com/linux/rhel/docker-ce.repo
yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
systemctl start docker
systemctl enable docker
yum install -y python3-pip
pip3 install docker
Après l’installation de docker, il faut initialiser le cluster. Deux options sont possibles:
Manuellement en utilisant la Documentation Docker
En utilisant le rôle Ansible reemo-infra et l’option SWARM_INIT. Les options d’initialisation sont détaillées plus bas dans cette documentation.
Installation automatisée de Docker Swarm¶
Le rôle Ansible reemo-infra permet d’installer et configurer automatiquement Docker Swarm. L’installation complète se fait automatiquement en utilisant l’option INSTALL_DOCKER
ansible-playbook -i inventory.yml playbooks/reemo-infra.yml --extra-vars "INSTALL_DOCKER=true"
Important
Initialisation du cluster Docker Swarm¶
Le rôle Ansible reemo-infra permet d’initialiser automatiquement Docker Swarm en utilisant l’option SWARM_INIT.
ansible-playbook -i inventory.yml playbooks/reemo-infra.yml --extra-vars "SWARM_INIT=true"
Plusieurs options sont disponibles pour l’initialisation du cluster (ex.):
all:
vars:
API_SWARM_INIT_DEFAULT_ADDR_POOL: "192.168.120.0/24"
INFRA_SWARM_INIT_DEFAULT_ADDR_POOL: "192.168.120.0/24"
PORTAL_SWARM_INIT_DEFAULT_ADDR_POOL: "192.168.120.0/24"
NETWORK_EXTERNAL: "10.0.6.0/24"
NETWORK_INTERNET: "10.0.1.0/24"
NETWORK_MYSQL: "10.0.2.0/24"
NETWORK_PROAPI: "10.0.3.0/24"
NETWORK_SMTP: "10.0.4.0/24"
NETWORK_INTERNAL: "10.0.5.0/24"
INFRA_SWARM_ADVERTISE_ADDR: "eth0"
INFRA_SWARM_DATA_PATH_PORT: 4789
API_SWARM_DATA_PATH_PORT: 4789
PORTAL_SWARM_DATA_PATH_PORT: 4789
infra_manager:
vars:
PORTAL_URL: "url.domain.tld"
TRAEFIK_SSL_CERTS:
- cert_file: "/localpath/to/cert.crt"
key_file: "/localpath/to/key.key"
hosts:
infra_manager1:
ansible_host: "10.0.0.1"
infra_manager2:
ansible_host: "10.0.0.2"
infra_manager3:
ansible_host: "10.0.0.3"
Pool d’adresses IP par défaut¶
Lors du déploiement sous Docker Swarm, plusieurs réseaux sont crées avec des plages d’adresses prises dans la plage d’adresses 10.0.0.0/8 de manière incrémental. Vous pouvez cependant définir la plage utilisée par Docker Swarm pour créer les réseaux overlay. /24 minimum.
API_SWARM_INIT_DEFAULT_ADDR_POOL: "192.168.120.0/24"
INFRA_SWARM_INIT_DEFAULT_ADDR_POOL: "192.168.120.0/24"
PORTAL_SWARM_INIT_DEFAULT_ADDR_POOL: "192.168.120.0/24"
Note
Il est possible d’utiliser la même plage pour plusieurs environnements (API, INFRA, PORTAL).
Plan d’adressage explicite¶
Spécifie les réseaux utilisés par Reemo sans passer par le pool par défaut.
all:
vars:
NETWORK_EXTERNAL: "10.0.6.0/24"
NETWORK_INTERNET: "10.0.1.0/24"
NETWORK_MYSQL: "10.0.2.0/24"
NETWORK_PROAPI: "10.0.3.0/24"
NETWORK_SMTP: "10.0.4.0/24"
NETWORK_INTERNAL: "10.0.5.0/24"
Note
En MySQL Cluster, un réseau additionnel peut être créé : NETWORK_MYSQLNDB.
Advertised address¶
Il est possible dans le cadre d’un cluster à plusieurs noeuds de spécifier la carte réseau ou l’adresse IP qui sera transmise aux noeuds pour s’enregistrer et discuter entre eux:
INFRA_SWARM_ADVERTISE_ADDR: "eth0"
PORTAL_SWARM_ADVERTISE_ADDR: "eth0"
API_SWARM_ADVERTISE_ADDR: "eth0"
Cette option sera utilisée uniquement à l’initialisation d’un cluster elle peut etre spécifiée dans un fichier inventaire ou dans la ligne de commande
ansible-playbook -i inventory.yml playbooks/reemo-infra.yml \
--limit infra_manager \
--extra-vars "INFRA_SWARM_ADVERTISE_ADDR=eth0"
Exemple dans un fichier inventaire:
all:
vars:
API_LICENSE: "ewogICAg ... Uw5NXhGVDF0NFU2TkxOdjQvZU53PT0iCiAgICC9Cn0="
infra_manager:
vars:
INFRA_SWARM_ADVERTISE_ADDR: "eth0"
PORTAL_URL: "url.domain.tld"
TRAEFIK_SSL_CERTS:
- cert_file: "/localpath/to/cert.crt"
key_file: "/localpath/to/key.key"
hosts:
infra_manager1:
ansible_host: "10.0.0.1"
infra_manager2:
ansible_host: "10.0.0.2"
infra_manager3:
ansible_host: "10.0.0.3"
Data Path Port¶
Par défaut Docker Swarm utilise le port UDP 4789 pour la communication des réseaux Overlay entre les différents noeuds d’un cluster. Vous pouvez modifier le port utilisé par Docker Swarm en utilisant les variables ci-dessous:
INFRA_SWARM_DATA_PATH_PORT: 4789
API_SWARM_DATA_PATH_PORT: 4789
PORTAL_SWARM_DATA_PATH_PORT: 4789
Warning
Dans des environnements VMware NSX, le port 4789 peut entrer en conflit. Définir un autre port à l’initialisation du Swarm.
Warning
Une fois Docker Swarm initialisé, ne modifiez plus sa configuration (plages IP, advertise addr, ports).