Docker Swarm
Installation du serveur Reemo Infra sous Docker Swarm à l’aide d’un role Ansible
Prérequis
Système d’exploitation
Ubuntu/Redhat/RockyLinux
Hardware
Minimum requis
Environnement |
INFRA |
PORTAL |
API |
---|---|---|---|
CPU |
4 |
2 |
4 |
RAM |
6 |
4 |
6 |
DD |
30G |
30G |
30G |
Environnement |
INFRA |
PORTAL |
API |
---|---|---|---|
CPU |
4 |
2 |
4 |
RAM |
10 |
4 |
8 |
DD |
30G |
30G |
30G |
Environnement |
INFRA |
PORTAL |
API |
---|---|---|---|
CPU |
8 |
4 |
8 |
RAM |
16 |
6 |
14 |
DD |
30G |
30G |
30G |
Environnement |
INFRA |
PORTAL |
API |
---|---|---|---|
CPU |
4 |
2 |
2 |
RAM |
6 |
4 |
4 |
DD |
30G |
30G |
30G |
L’installation s’effectue à l’aide du role Ansible reemo-infra qui a besoin de dépendances pour fonctionner:
yum install ansible-core
ansible-galaxy collection install community.docker
ansible-galaxy collection install community.crypto
apt install ansible
apt install python3-docker
Pour l’installation vers un environnement RockyLinux 9, il faut avoir une version du module community.docker >= 3.10.2
ansible-galaxy collection install community.docker --upgrade
Fichier Inventaire
L’installation se base sur des groupes dans l’inventaire Ansible
infra_manager: groupe permettant d’installer un environnement complet
portal_manager: groupe permettant d’installer la partie frontal : les services portal/signal
api_manager: groupe permettant d’installer la partie api: les services api/apicronlog/apicronldap/apicron/proapi/prorelayapi/mysql
Créer un fichier inventaire pour le role Ansible contenant la licence du serveur et déclarer les différents groupes en fonction de l’architecture que vous souhaitez
Voici quelques exemples:
all:
vars:
API_LICENSE: "ewogICAg ... Uw5NXhGVDF0NFU2TkxOdjQvZU53PT0iCiAgICC9Cn0="
infra_manager:
hosts:
infra_manager1:
ansible_host: "10.0.0.1"
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"
Warning
Il est très important de respecter la localisation des variables dans le fichier inventaire et une option qui est spécifiée pour un groupe ne doit pas être renseignée dans all et inversement.
Installation Docker
L’installation et l’initialisation de Docker Swarm peuvent être manuelles ou automatisées par le role Ansible reemo-infra
Manuel
apt install docker.io python3-docker -y
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
Une documentation sur le site de Docker permet d’avoir l’ensemble des options disponibles: Docker.
Warning
Le cluster doit être constitué uniquement de Node Manager
Auto
Le role Ansible reemo-infra embarque la possibilité d’installer et de configurer automatiquement un Docker Swarm, plusieurs options sont disponibles:
Par défaut le role Ansible effectue aucune opération sur l’installation ou l’initialisation de Docker Swarm. Pour l’activer vous pouvez ajouter cette option dans la ligne de commande:
ansible-playbook -i inventory.yml playbooks/reemo-infra-images.yml --extra-vars "INSTALL_DOCKER=true"
Warning
Il faut que les différents noeuds du cluster puissent joindre un repositorie pour installer Docker
Si vous souhaitez installer Docker de manière manuelle mais laisser le role Ansible éffectuer l’initialisation, il faut ajouter l’option SWARM_INIT dans la ligne de commande
ansible-playbook -i inventory.yml playbooks/reemo-infra-images.yml --extra-vars "SWARM_INIT=true"
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 définir une autre plage d’adresses si cela ne convient pas en utilisant les variables
API_SWARM_INIT_DEFAULT_ADDR_POOL
INFRA_SWARM_INIT_DEFAULT_ADDR_POOL
PORTAL_SWARM_INIT_DEFAULT_ADDR_POOL
La plage d’adresses définie doit etre au minimum en /24. les réseaux nécessaires pour faire fonctionner Reemo seront pris dans cette nouvelle plage d’adresses
Warning
La plage d’adresses minimum doit être en /24
Il est possible de renseigner la même plage d’adresses pour des environnements de cluster différent, par exemple:
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"
Si vous souhaitez renseigner vos propres plages d’IP pour ne pas avoir de conflit sur votre réseau interne, vous pouvez rajouter les options suivantes dans le fichier inventaire
Plutot que de prendre dans le pool d’adresses de Docker Swarm, il est possible de spécifier vos propres plage d’adresses pour chacun des réseaux utilisés dans l’environnement Reemo
all:
vars:
API_LICENSE: "ewogICAg ... Uw5NXhGVDF0NFU2TkxOdjQvZU53PT0iCiAgICC9Cn0="
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_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"
Note
Dans un environnement avec Mysql Cluster, un autre réseau sera crée pour relier les services NDB entre eux, la variable pour agir sur son adressage IP est : NETWORK_MYSQLNDB
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
PORTAL_SWARM_ADVERTISE_ADDR
API_SWARM_ADVERTISE_ADDR
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"
ou
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"
Par défaut Docker Swarm utilise le port 4789 en UDP pour la communication des réseaux Overlay entre les différents noeuds d’un cluster.
INFRA_SWARM_DATA_PATH_PORT
API_SWARM_DATA_PATH_PORT
PORTAL_SWARM_DATA_PATH_PORT
Warning
Le port par défaut peut rentrer en conflit dans un environnement Vmware NSX, il est alors souhaitable de le modifier à l’initialisation du Docker Swarm
Warning
Une fois que Docker Swarm a été initialisé, il ne faut plus modifier les options de sa configuration.
Load Image Docker
Avant de lancer l’installation vous devez avoir les images accessibles par l’ensemble des machines de votre architecture, vous avez 4 modes possibles
Toutes les machines doivent pouvoir joindre l’url registry.reemo.io sur le port 443. Il faut récupérer au niveau du support reemo vos identifiants pour vous authentifiez
Il faut ensuite renseigner ces informations dans votre fichier inventaire
REGISTRY_URL: l'url du registre
REGISTRY_ENV: le préfix des images docker pour constituer des noms d'images **REGISTRY_URL/REGISTRY_ENV**api
REGISTRY_USERNAME: "l'utilisateur pour le registre"
REGISTRY_PASSWORD: "le mot de passe pour le registre"
Exemple:
all:
vars:
API_LICENSE: "ewogICAg ... Uw5NXhGVDF0NFU2TkxOdjQvZU53PT0iCiAgICC9Cn0="
REGISTRY_URL: "registry.reemo.io"
REGISTRY_ENV: "reemoinfra"
REGISTRY_USERNAME: "user"
REGISTRY_PASSWORD: "password"
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"
Si pour accéder au registre reemo, les machines doivent utiliser un proxy, utiliser la même configuration que le mode Online et rajouter la configuration d’un proxy dans vos machines
Rajouter la ligne suivante dans la section [Service] du fichier /usr/lib/systemd/system/docker.service
EnvironmentFile=/etc/default/docker
Créer le fichier /etc/default/docker et renseigner les infos suivantes:
http_proxy="http://< IP du serveur Proxy >:< Port du service Proxy >"
https_proxy="http://< IP du serveur Proxy >:< Port du service Proxy >"
Au niveau du proxy autoriser les 2 urls suivantes:
registry.reemo.io
registry-auth.reemo.io
il a été incorporé dans le role Ansible reemo-infra la faculté de recupérer les images sur le registre Reemo et d’en générer des archives pour ensuite les loader sur la plateforme Reemo en mode Offline
Renseigner l’option TARBALL_PATH dans le fichier inventaire qui sera le répertoire où sera stocké l’ensemble des archives, il faut pévoir 2Go de stockage + la récupération des images Docker 2Go
ansible-playbook -i inventory.yml playbooks/reemo-infra.yml --extra-vars "TARBALL_GENERATE=true" --tags tarball_generate
Rajouter l’option –extra-vars “LOAD_IMAGE=true” dans la ligne de commande d’installation
ansible-playbook -i inventory.yml playbooks/reemo-infra.yml --extra-vars "INIT_DB=true" --extra-vars "LOAD_IMAGE=true" --extra-vars "INSTALL_DOCKER=true"
TARBALL_PATH: “chemin du stockage des archives Reemo”
TARBALL_REGISTRY_URL: “URL de connexion du registre : registry.reemo.io”
TARBALL_REGISTRY_USERNAME: “Utilisateur pour l’authentification sur le registre”
TARBALL_REGISTRY_PASSWORD: “Mot de passe pour l’authentification sur le registre”
ansible-playbook -i inventory.yml playbooks/reemo-infra-images.yml
Si vous souhaitez récupérer les images directement sur notre registry et les précharger vous mêmes, il faut avoir une machine avec l’authentification qui effectuera les docker pull des différentes images, créer des tarball pour ensuite les précharger dans vos machines ou dans un registre intermédiaire
Installation du serveur Infra
Créer un playbook Ansible
reemo-infra.yml
- name: Installation Reemo Infra Server
hosts: infra_manager
gather_facts: yes
roles:
- reemo-infra
Lancer l’installation du serveur Infra avec la commande
ansible-playbook -i inventory.yml playbooks/reemo-infra.yml --extra-vars "INIT_DB=true"
Warning
Cette commande est à executer qu’une seule fois, elle permet l’initialisation de la base de données.
Mise à jour
Pour prendre en compte une mise à jour complète, il faut executer la commande suivante:
ansible-playbook -i inventory.yml playbooks/reemo-infra.yml
Ou utiliser les tags suivants pour cibler la mise à jour
DB : ansible-playbook -i inventory.yml playbooks/reemo-infra.yml –tags db
API : ansible-playbook -i inventory.yml playbooks/reemo-infra.yml –tags api
APICRON : ansible-playbook -i inventory.yml playbooks/reemo-infra.yml –tags apicron
APICRONLOG : ansible-playbook -i inventory.yml playbooks/reemo-infra.yml –tags apicronlog
APICRONLDAP : ansible-playbook -i inventory.yml playbooks/reemo-infra.yml –tags apicronldap
APICRONCLOUD: ansible-playbook -i inventory.yml playbooks/reemo-infra.yml –tags apicroncloud
PORTAL : ansible-playbook -i inventory.yml playbooks/reemo-infra.yml –tags portal
SIGNAL : ansible-playbook -i inventory.yml playbooks/reemo-infra.yml –tags signal
PROAPI : ansible-playbook -i inventory.yml playbooks/reemo-infra.yml –tags proapi
PRORELAYAPI : ansible-playbook -i inventory.yml playbooks/reemo-infra.yml –tags prorelayapi
PROCLOUDAPI: ansible-playbook -i inventory.yml playbooks/reemo-infra.yml –tags procloudapi
MYSQL : ansible-playbook -i inventory.yml playbooks/reemo-infra.yml –tags mysql
TRAEFIK : ansible-playbook -i inventory.yml playbooks/reemo-infra.yml –tags traefik
EXIM4 : ansible-playbook -i inventory.yml playbooks/reemo-infra.yml –tags exim4
Warning
Si une mise à jour est passée en mode TAG, il est impératif de commencer par DB, puis API, tous les autres services et terminé par PORTAL
Warning
Uniquement la mise à jour du package MySQL implique une coupure du service
Note
Le micro-service reemo_db est toujours arreté, il n’est démarré qu’au moment d’une mise à jour de la base de données et s’éteindra automatiquement
Versionning
Par défaut le role Ansible reemo-infra embarque des numéros de versions dans le fichier default/main.yml qui sont compatibles. Vous pouvez modifier ces numéros de version en utilisant les variables suivantes:
all:
vars:
API_LICENSE: "ewogICAg ... Uw5NXhGVDF0NFU2TkxOdjQvZU53PT0iCiAgICC9Cn0="
REGISTRY_URL: "registry.reemo.io"
REGISTRY_ENV: "reemoinfra"
REGISTRY_USERNAME: "user"
REGISTRY_PASSWORD: "password"
DOCKER_VERSION_API: "2.13.10"
DOCKER_VERSION_APICRON: "2.3.0"
DOCKER_VERSION_APICRONLDAP: "1.0.0"
DOCKER_VERSION_APICRONLOG: "1.0.0"
DOCKER_VERSION_PORTAL: "2.12.6"
DOCKER_VERSION_SIGNAL: "2.5.3"
DOCKER_VERSION_PROAPI: "2.6.2"
DOCKER_VERSION_EXIM4: "4.97"
DOCKER_VERSION_HAPROXY: "2.8.13-8eb4f8c"
DOCKER_VERSION_DB: "2.13.10"
DOCKER_VERSION_PRORELAYAPI: "1.2.2"
DOCKER_VERSION_WS_RELAY_SERVER: "1.0.0"
DOCKER_VERSION_MYSQL: "8.0.40-0ubuntu0.24.04.1"
DOCKER_VERSION_TRAEFIK: "v2.11"
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"
Note
Pour trouver les différentes numéros de version, il faut se rendre à la page : Environnement Infra.
Base de données
L’environnement Infra s’appuie sur l’emploi d’une base de données qui peut être interne ou externe à Docker Swarm
Externe
Rajouter dans l’inventaire Ansible, les informations suivantes:
DB_USER: "< Utilisateur pour s'authentifier sur la base de données >"
DB_USER_PASSWORD: "< Mot de passe pour s'authentifier sur la base de données >"
DB_NAME: "< Nom de la base de données >"
DB_HOST: "< IP >"
DB_DIALECT: "mysql"
Rajouter dans l’inventaire Ansible, les informations suivantes:
DB_USER: "< Utilisateur pour s'authentifier sur la base de données >"
DB_USER_PASSWORD: "< Mot de passe pour s'authentifier sur la base de données >"
DB_NAME: "< Nom de la base de données >"
DB_HOST: "< IP >"
DB_DIALECT: "postgresql"
Pour ajouter le support SSL pour la connexion à la base de données, vous pouvez utiliser les options suivantes, à rajouter dans le fichier inventaire d’Ansible
DB_SSL_REQUIRE: "true"
DB_SSL_CERT_LOCALPATH: "/local/path/cert.crt"
DB_SSL_KEY_LOCALPATH: "/local/path/key.key"
DB_SSL_CA_LOCALPATH: "/local/path/ca.crt"
Interne
Par défaut un serveur Mysql est présent dans le role reemo-infra, il sera déployé et configuré automatiquement, un montage
Par défaut une base de données MySQL est déployée dans l’environnement Docker Swarm.
1 serveur: sur une architecture à un seul serveur, le répertoire local /opt/reemo sera monté dans le conteneur MySQL pour y installer la base de données
3 serveurs: dans une architecture si vous souhaitez conserver le module MySQL, il faut prévoir une réplication entre les répertoires /opt/reemo pour que le conteneur MySQL puisse se relancer sur un autre noeud et conserver l’ensemble de ces données.
Pour activer l’utilisation d’un environnement MySQL NDBCLUSTER, ajouter l’option DB_DIALECT=NDBCLUSTER dans le fichier inventaire, et les noms des différents hostnames composant votre cluster Swarm
all:
vars:
API_LICENSE: "ewogICAg ... Uw5NXhGVDF0NFU2TkxOdjQvZU53PT0iCiAgICC9Cn0="
infra_manager:
vars:
DB_DIALECT: "NDBCLUSTER"
MYSQL_NODE_HOSTNAME_DB1: "infra1"
MYSQL_NODE_HOSTNAME_DB2: "infra2"
MYSQL_NODE_HOSTNAME_DB3: "infra3"
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"
8Go RAM minimum par noeud
La latence recommandée est de l’ordre de moins de 1 ms entre les noeuds, entre 1 et 5 ms les performances peuvent chuter, au dessus de 5 ms risque de ralentissements et d’instabilités
MYSQL_CLUSTER_DataMemory: permet d'augmenter la mémoire de la base de données par défaut 2G
MYSQL_CLUSTER_PATH: Chemin où seront stockés les informations des différents services NDBCLUSTER par défaut "/data/mysqlcluster"
Certificats SSL
Dans la mesure du possible il est conseillé d’utiliser 2 pki différentes, l’une pour les communications internes à la plateforme et une pki pour les communications externes ( utilisateur -> plateforme )
interne
L’ensemble des micro-services discute entre eux en mTLS imposant une gestion des certificats. Vous avez 3 choix possibles
Dans les roles Ansible, est disponible une pki complète permettant de déployer automatiquement un système prêt à l’emploi, avec des communications chiffrées et authentifiées
Il est possible d’utiliser une CA qui sera automatiquement générée au moment du lancement du role reemo-infra
Pour cela il faut créer un répertoire en local de la machine Ansible où l’utilisateur a les droits d’écriture. Ajouter dans le fichier inventaire les options suivantes:
all:
vars:
API_LICENSE: "ewogICAg ... Uw5NXhGVDF0NFU2TkxOdjQvZU53PT0iCiAgICC9Cn0="
LOCAL_PATH: "/opt/reemo/ssl"
INITCA_ENABLE: "true"
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"
Automatiquement au lancement une CA sera créée dans le répertoire précédemment crée, les clés et certificats seront exportés sur le cluster Swarm en Secret et loader dans les différents conteneurs
Il faut générer les bi-clés SSL pour les URL suivantes:
reemo_portal
reemo_portaladmin
reemo_api
reemo_proapi
reemo_signal
reemo_provision
reemo_prorelayapi
reemo_procloudapi
reemo_relayws
Il faut ensuite renseigner dans le fichier inventaire les chemins locaux sur la machine Ansible des clés et certificats qui seront ensuite copiés vers le Cluster Docker Swarm par le role Ansible
Exemple:
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"
vars:
CA_SSL_CRT_LOCALPATH: "/local/path/ca.crt"
API_SSL_CRT_LOCALPATH: "/local/path/reemo_api.crt"
API_SSL_KEY_LOCALPATH: "/local/path/reemo_api.key"
PROAPI_SSL_CRT_LOCALPATH: "/local/path/reemo_proapi.crt"
PROAPI_SSL_KEY_LOCALPATH: "/local/path/reemo_proapi.key"
PRORELAYAPI_SSL_CRT_LOCALPATH: "/local/path/reemo_prorelayapi.crt"
PRORELAYAPI_SSL_KEY_LOCALPATH: "/local/path/reemo_prorelayapi.key"
SIGNAL_SSL_CRT_LOCALPATH: "/local/path/reemo_signal.crt"
SIGNAL_SSL_KEY_LOCALPATH: "/local/path/reemo_signal.key"
PORTAL_SSL_CRT_LOCALPATH: "/local/path/reemo_portal.crt"
PORTAL_SSL_KEY_LOCALPATH: "/local/path/reemo_portal.key"
TRAEFIK_SSL_CERTS:
- cert_file: "/local/path/domain.crt"
key_file: "/local/path/domain.key"
Externe
Toute entrée utilisateur s’effectue par un service Traefik où il est possible de lui spécifier une certificat pour l’accès utilisateur
Par défaut un certificat autosigné est crée automatiquement à la création du conteneur Traefik
Vous pouvez spécifier le chemin d’un certificat local au role Ansible pour ensuite être déployé sur les différents serveurs où Traefik sera déployé.
Rajouter les options suivantes dans votre fichier inventaire:
TRAEFIK_SSL_CERTS:
- cert_file: "/localpath/to/cert.crt"
key_file: "/localpath/to/key.key"
Vous pouvez spécifier le chemin du certificat qui est déjà présent sur le serveur où sera déployé Traefik, il sera ensuite monter dans le conteneur traefik.
TRAEFIK_SSL_CERTS_REMOTE:
- cert_file_remotepath: "/remotepath/to/cert.crt"
key_file_remotepath: "/remotepath/to/key.key"
Gestion des Portails
URL
Par défaut les serveurs Infra et Portal répondent sur toutes les requêtes avec un certificat autosigné, Si vous avec besoin de paramètrer une URL spécifique, il faut utiliser la variable suivante:
all:
vars:
API_LICENSE: "ewogICAg ... Uw5NXhGVDF0NFU2TkxOdjQvZU53PT0iCiAgICC9Cn0="
infra_manager:
vars:
PORTAL_URL: "url.domain.tld"
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"
Note
Si vous utilisez plusieurs nodes dans un mode docker swarm, pensez à renseigner dans votre DNS l’url avec les différentes IP pour obtenir un système de répartition de charge à base de round-robin DNS
Pour mettre en place une URL qui sera dédiée à l’accès des comptes d’administration comme le montre l’image suivante:

Rajouter dans le fichier inventaire la variable PORTALADMIN_URL
all:
vars:
API_LICENSE: "ewogICAg ... Uw5NXhGVDF0NFU2TkxOdjQvZU53PT0iCiAgICC9Cn0="
infra_manager:
vars:
PORTAL_URL: "url.domain.tld"
PORTALADMIN_URL: "urladmin.domain.ltd"
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"
Avoir sur la même URL des portails différents qui authentifient les utilisateurs sur des connecteurs différents. Il faut activer la fonctionnalité dans les Global Settings menu SSO et activer l’option nécessaire

le menu connectors apparaitra dans chaque organisation

Une fois configuré votre connecteur, vous pouvez récupérer l’url permettant de l’utiliser

Filtrage IP
Il est possible de mettre un système de filtrage IP sur l’URL du portal. Dans le fichier inventaire ajouté la variable PORTAL_URL_RESTRICT_IP:
all:
vars:
API_LICENSE: "ewogICAg ... Uw5NXhGVDF0NFU2TkxOdjQvZU53PT0iCiAgICC9Cn0="
infra_manager:
vars:
PORTAL_URL: "url.domain.tld"
PORTAL_URL_RESTRICT_IP: "10.1.1.1,10.2.2.0/24"
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"
all:
vars:
API_LICENSE: "ewogICAg ... Uw5NXhGVDF0NFU2TkxOdjQvZU53PT0iCiAgICC9Cn0="
infra_manager:
vars:
PORTAL_URL: "url.domain.tld"
PORTALADMIN_URL: "urladmin.domain.ltd"
PORTALADMIN_URL_RESTRICT_IP: "10.3.1.2,10.3.2.0/24"
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"
Ports
Par défaut le portail répond sur le port 443 avec une redirection automatique du port 80 vers le port 443 en SSL
all:
vars:
API_LICENSE: "ewogICAg ... Uw5NXhGVDF0NFU2TkxOdjQvZU53PT0iCiAgICC9Cn0="
infra_manager:
vars:
PORTAL_URL: "url.domain.tld"
PORTALADMIN_URL: "urladmin.domain.ltd"
PORTALADMIN_URL_RESTRICT_IP: "10.3.1.2,10.3.2.0/24"
PORTALADMIN_URL_PORT: "8444"
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"
Warning
Le port doit être différent de 80, 443 et 8443 qui sont déja utilisés pour d’autres services
Dédié
Pouvoir séparer physiquement les portals et obtenir des accès réseaux séparés

Créer un fichier inventaire en remplacant le groupe infra_manager par 2 groupes api_manager et portal_manager
all:
vars:
API_LICENSE: "ewogICAg ... Uw5NXhGVDF0NFU2TkxOdjQvZU53PT0iCiAgICC9Cn0="
HMACSECRET: "reemohmac"
portal_manager:
children:
portaluser_manager:
vars:
PORTAL_URL: "url.domain.tld"
TRAEFIK_SSL_CERTS:
- cert_file: "/localpath/to/cert.crt"
key_file: "/localpath/to/key.key"
API_IP:
- ip: "10.3.1.1"
- ip: "10.3.1.2"
- ip: "10.3.1.3"
hosts:
portaluser1:
ansible_host: "10.0.0.1"
portaluser2:
ansible_host: "10.0.0.2"
portaluser3:
ansible_host: "10.0.0.3"
portaladmin_manager:
vars:
PORTAL_URL: "admin.domain.tld"
TRAEFIK_SSL_CERTS:
- cert_file: "/localpath/to/cert.crt"
key_file: "/localpath/to/key.key"
API_IP:
- ip: "10.3.1.1"
- ip: "10.3.1.2"
- ip: "10.3.1.3"
hosts:
portaladmin1:
ansible_host: "10.0.0.4"
portaladmin2:
ansible_host: "10.0.0.5"
portaladmin3:
ansible_host: "10.0.0.6"
api_manager:
hosts:
api1:
ansible_host: "10.3.1.1"
api2:
ansible_host: "10.3.1.2"
api3:
ansible_host: "10.3.1.3"
En plus d’une séparation physique vous pouvez aussi restreindre les connecteurs par portail.

Lors de la creation d’un connecteur vous obtenez un id :

Qu’il faut ensuite renseigner dans le fichier inventaire dans la section du portal ciblé avec une variable nommée : PORTAL_LDAP_CONNECTORS
all:
vars:
API_LICENSE: "ewogICAg ... Uw5NXhGVDF0NFU2TkxOdjQvZU53PT0iCiAgICC9Cn0="
HMACSECRET: "reemohmac"
portal_manager:
children:
portalldap_manager:
vars:
PORTAL_URL: "urlldap.domain.tld"
TRAEFIK_SSL_CERTS:
- cert_file: "/localpath/to/cert.crt"
key_file: "/localpath/to/key.key"
PORTAL_LDAP_CONNECTORS:
- ldapid: "3182932d-9ee1-4c06-a4cf-c13c25f2ee93"
hosts:
portalldap1:
ansible_host: "10.0.0.7"
portalldap2:
ansible_host: "10.0.0.8"
portalldap3:
ansible_host: "10.0.0.9"
Si vous avez plusieurs connecteurs à renseigner sur un meme portable, rajouter autant de ligne avec ldapid
all:
vars:
API_LICENSE: "ewogICAg ... Uw5NXhGVDF0NFU2TkxOdjQvZU53PT0iCiAgICC9Cn0="
HMACSECRET: "reemohmac"
portal_manager:
children:
portalldap_manager:
vars:
PORTAL_URL: "urlldap.domain.tld"
TRAEFIK_SSL_CERTS:
- cert_file: "/localpath/to/cert.crt"
key_file: "/localpath/to/key.key"
PORTAL_LDAP_CONNECTORS:
- ldapid: "3182932d-9ee1-4c06-a4cf-c13c25f2ee93"
- ldapid: "9c713681-b758-4179-b9a2-13618a7b804e"
- ldapid: "4418cfb9-52c5-4d7c-88d1-7660e7809d23"
hosts:
portalldap1:
ansible_host: "10.0.0.7"
portalldap2:
ansible_host: "10.0.0.8"
portalldap3:
ansible_host: "10.0.0.9"
Droits d’accès
Plusieurs niveaux d’accès sont disponibles dans une plateforme Reemo:
Administrateur d’instance
Administrateur d’organisation
Membre d’une organisation
Par défaut, tous les utilisateurs peuvent s’authentifier sur un portail, mais avec l’option PORTAL_TYPE il est possible d’en restreindre l’accès à un type d’utilisateur.
PORTAL_TYPE |
par défaut |
user |
admin |
orgadmin |
instadmin |
orguser |
---|---|---|---|---|---|---|
Administrateur d’instance |
||||||
Administrateur d’organisation |
||||||
Membre d’une organisation |
PORTALADMIN_TYPE |
par défaut |
orgadmin |
instadmin |
---|---|---|---|
Administrateur d’instance |
|||
Administrateur d’organisation |
|||
Membre d’une organisation |
Voir un exemple
all:
vars:
API_LICENSE: "ewogICAg ... Uw5NXhGVDF0NFU2TkxOdjQvZU53PT0iCiAgICC9Cn0="
HMACSECRET: "reemohmac"
portal_manager:
children:
portaluser_manager:
vars:
PORTAL_URL: "url.domain.tld"
PORTAL_TYPE: "user"
TRAEFIK_SSL_CERTS:
- cert_file: "/localpath/to/cert.crt"
key_file: "/localpath/to/key.key"
hosts:
portaluser1:
ansible_host: "10.0.0.1"
portaluser2:
ansible_host: "10.0.0.2"
portaluser3:
ansible_host: "10.0.0.3"
portaladmin_manager:
vars:
PORTAL_URL: "admin.domain.tld"
PORTAL_TYPE: "admin"
TRAEFIK_SSL_CERTS:
- cert_file: "/localpath/to/cert.crt"
key_file: "/localpath/to/key.key"
hosts:
portaladmin1:
ansible_host: "10.0.0.4"
portaladmin2:
ansible_host: "10.0.0.5"
portaladmin3:
ansible_host: "10.0.0.6"
api_manager:
hosts:
api1:
ansible_host: "10.3.1.1"
api2:
ansible_host: "10.3.1.2"
api3:
ansible_host: "10.3.1.3"
Gestion des Signaux
Les services Signaux sont utilisés pour la signalisation des agent Reemo auprès de l’environnement Infra, mais aussi sur l’échange d’informations pour l’établissement d’une connexion. Ils ont la particularité d’être unique et dans un environnement Docker Swarm vous verrez apparaitre en fonction de votre architecture plusieurs services Signaux avec toujours un seul replica
Ex:
ID NAME MODE REPLICAS IMAGE PORTS
dj2x9cp9izks reemo_api replicated 4/4 (max 4 per node) registry.reemo.io/reemoinfraapi:2.14.0-4bfb58467888
z2mbh8gyhgni reemo_apicron replicated 1/1 (max 1 per node) registry.reemo.io/reemoinfraapicron:2.3.0-7e1864a11d70
s6cd4l0oh3st reemo_apicronldap replicated 1/1 (max 1 per node) registry.reemo.io/reemoinfraapicronldap:1.0.0-9a666cca22f4
17djli4rqvda reemo_apicronlog replicated 1/1 (max 1 per node) registry.reemo.io/reemoinfraapicronlog:1.0.0-f93cd1d99cc1
7g3gzq348250 reemo_db replicated 0/1 (max 1 per node) registry.reemo.io/reemoinfradb:2.14.0-51ef9a120c42
245ve7aca6h1 reemo_mysql replicated 1/1 (max 1 per node) registry.reemo.io/reemoinframysql:8.0.40-0ubuntu0.24.04.1-5960a370b81f
56tfux9v44m8 reemo_portal replicated 2/2 (max 2 per node) registry.reemo.io/reemoinfraportal:2.13.11-432f77f8029f
k6v9qu9mu7n6 reemo_proapi replicated 2/2 (max 2 per node) registry.reemo.io/reemoinfraproapi:2.7.0-345ec94903f1
pfsgkmw181cr reemo_prorelayapi replicated 2/2 (max 2 per node) registry.reemo.io/reemoinfraprorelayapi:1.3.0-25263e8aa454
0n9x4fwqax0s reemo_provision replicated 1/1 (max 1 per node) registry.reemo.io/reemoinfrahaproxy:2.8.13-8eb4f8c-83696c9ad549
vry6kv4o26y4 reemo_relayws replicated 1/1 (max 1 per node) registry.reemo.io/reemoinfrahaproxy:2.8.13-8eb4f8c-83696c9ad549
g8hmzpicyq2o reemo_signal1 replicated 1/1 (max 1 per node) registry.reemo.io/reemoinfrasignal:2.6.0-8168bf6e99af
s105if31h6l0 reemo_signal2 replicated 1/1 (max 1 per node) registry.reemo.io/reemoinfrasignal:2.6.0-8168bf6e99af
j7fm88r9t962 traefik replicated 1/1 (max 1 per node) registry.reemo.io/reemoinfratraefik:v2.11
Ils seront toujours nommés reemo_signal suivi d’un chiffre.
Ports
Par défaut les services Signaux écoutent sur le port 8443 par le service Traefik qui portera le certificat SSL. Ce port sera accessible par les Reemo Agent. Les utilisateurs le contacteront par le service Portal sur le port 443
SSL
Les certificats vont être gérés de la même façon que pour les portails, un premier certificat pour le Traefik, un second pour la communication entre Traefik/Portal et les services Signaux
Initialisation
A l’installation d’une instance Reemo et donc à l’initialisation de la base de données, il est possible d’initialiser des variables pour préconfigurer l’interface et l’environnement Reemo. Ces variables sont à ajouter dans all ou dans le groupe qui initialisera la base de données
INIT_MINIMUM_PASSWORD_LENGTH: "8"
INIT_PASSWORD_REQUIRE_LETTERS: "false"
INIT_PASSWORD_REQUIRE_DIGITS: "false"
INIT_PASSWORD_REQUIRE_SPECIALCHAR: "false"
INIT_RELAYWS:
relayws1:
type: "WS_SWARM ou WS_KUBERNETES"
url: "< URL accessible par l'utilisateur >"
ip: ['ip du serveur Relayws accessible par API']
Note
Toujours nommer les serveurs relayws relayws1 relayws2 …
INIT_PROVISION:
provision1:
relayws: "relayws1"
type: "SWARM"
ip: ['ip du serveur Provision1 accessible par API']
provision2:
relayws: "relayws2"
type: "SWARM"
ip: ['ip du serveur Provision2 accessible par API']
Note
Toujours nommer les serveurs Provision provision1 provision2 …
SYSLOG : Facility + Préfix
Par défaut les logs de chaque service sont envoyés dans le syslog local à chaque noeud avec le syslog facility à daemon. Vous pouvez modifier cette valeur en utilisant la liste d’option suivante:
SYSLOG_FACILITY: "daemon"
SYSLOG_FACILITY_API: "{{SYSLOG_FACILITY}}"
SYSLOG_FACILITY_APICRON: "{{SYSLOG_FACILITY}}"
SYSLOG_FACILITY_DB: "{{SYSLOG_FACILITY}}"
SYSLOG_FACILITY_EXIM4: "{{SYSLOG_FACILITY}}"
SYSLOG_FACILITY_MYSQL: "{{SYSLOG_FACILITY}}"
SYSLOG_FACILITY_PORTAL: "{{SYSLOG_FACILITY}}"
SYSLOG_FACILITY_PORTALADMIN: "{{SYSLOG_FACILITY}}"
SYSLOG_FACILITY_SIGNAL: "{{SYSLOG_FACILITY}}"
SYSLOG_FACILITY_PROAPI: "{{SYSLOG_FACILITY}}"
SYSLOG_FACILITY_STUN: "{{SYSLOG_FACILITY}}"
SYSLOG_FACILITY_PRORELAYAPI: "{{SYSLOG_FACILITY}}"
SYSLOG_FACILITY_PROCLOUDAPI: "{{SYSLOG_FACILITY}}"
SYSLOG_FACILITY_APICRONLOG: "{{SYSLOG_FACILITY}}"
SYSLOG_FACILITY_APICRONLDAP: "{{SYSLOG_FACILITY}}"
SYSLOG_FACILITY_APICRONCLOUD: "{{SYSLOG_FACILITY}}"
SYSLOG_FACILITY_HAPROXY: "{{SYSLOG_FACILITY}}"
SYSLOG_FACILITY_TRAEFIK: "{{ SYSLOG_FACILITY }}"
Tous les logs sont envoyés dans le syslog avec un préfix reemo_
Commandes utiles
Pour recherche des erreurs dans les logs avec l’aide d’Ansible
ansible infra_manager -i inventory.yml -m shell -a "grep _traefik /var/log/syslog | grep '\" 5[0-9][0-9] [0-9]'"
ansible infra_manager -i inventory.yml -m shell -a "grep ' 500 [0-9]' /var/log/syslog"
ansible api_manager -i inventory.yml -m shell -a "grep _traefik /var/log/syslog | grep '\" 5[0-9][0-9] [0-9]'"
ansible api_manager -i inventory.yml -m shell -a "grep ' 500 [0-9]' /var/log/syslog"
ansible portal_manager -i inventory.yml -m shell -a "grep _traefik /var/log/syslog | grep '\" 5[0-9][0-9] [0-9]'"
ansible portal_manager -i inventory.yml -m shell -a "grep ' 500 [0-9]' /var/log/syslog"
HEALTHCHECK
Une url de healthcheck peut être activée permettant d’avoir un état des connexions de l’ensemble des services. Elle est accessible par le biais de l’url /api/healthcheck sur le portal au format json
Ex:
{
"status": "OK",
"version": "2.14.4",
"services": {
"api": {
"status": "OK",
"version": "2.15.2",
"services": {
"db": {
"status": "OK"
},
"provision-api": {
"status": "OK",
"version": "2.7.0"
},
"provision-relay-api": {
"status": "OK",
"version": "1.3.0"
},
"container-providers": [
{
"status": "OK",
"name": "Reemo SWARM",
"type": "SWARM"
}
],
"ws-relays": [
{
"status": "OK",
"name": "Global - WS_SWARM",
"type": "WS_SWARM"
}
]
}
},
"signal": {
"status": "OK",
"version": "2.6.1"
}
}
}
Options
Chaque option peut être mise dans l’inventaire Ansible au niveau all ou dans les variables du groupe de portal devant recevoir l’activation
HEALTHCHECK_ENABLE: "true"
HEALTHCHECK_RESTRICT_IP: "192.168.1.1,192.168.10.0/24"
HEALTHCHECK_PORTALADMIN_ENABLE: "true"
HEALTHCHECK_PORTALADMIN_RESTRICT_IP: "192.168.1.1,192.168.10.0/24"
Supervision
Mettre en place un service de supervision du healthcheck dans Nagios
Sur le serveur Nagios avoir les commandes curl et jq disponibles
define command {
command_name reemo_healthcheck
command_line /usr/lib/nagios/plugins/reemo_healthcheck $ARG1$
}
#!/bin/bash
# Check if an argument (URL) is provided
if [ -z "$1" ]; then
echo "CRITICAL: No URL provided. Usage: $0 <URL>"
exit 2
fi
HEALTHCHECK_URL="$1"
# Fetch JSON response
response=$(curl -s "$HEALTHCHECK_URL/api/healthcheck")
# Check if the request was successful
if [ $? -ne 0 ] || [ -z "$response" ]; then
echo "CRITICAL: Unable to access the health check page ($HEALTHCHECK_URL)"
exit 2
fi
# Extract service statuses using jq
status=$(echo "$response" | jq -r '.status')
errors=$(echo "$response" | jq -r '.. | objects | select(.status? and .status != "OK")')
# Check if the global status is OK
if [ "$status" != "OK" ]; then
echo "CRITICAL: Global health check status is $status"
exit 2
fi
# Check if any sub-services have issues
if [ -n "$errors" ]; then
echo "WARNING: Some services are not OK:"
echo "$errors"
exit 1
fi
# Everything is OK
echo "OK: All services are operational"
exit 0
define service{
host_name < HOSTNAME >
use generic-service ; Name of service template to use
service_description Reemo Healthcheck
check_command reemo_healthcheck!https://< URL >
}
PROMETHEUS
Il est possible d’activer Prometheus sur les points d’entrées Traefik, plusieurs options sont disponibles:
Rajouter l’option TRAEFIK_PROMETHEUS_ENABLE: true dans le fichier inventaire
Par défaut la page Prometheus sera accessible sur le port que le portal pour le modifier TRAEFIK_PROMETHEUS_PORT: “<numero du port>”
Par défaut la page Prometheus sera accessible sur l’url du portal avec le lien /metrics. Il est possible de spécifier une ou plusieurs url dédiées
- TRAEFIK_PROMETHEUS_URLS:
“metrics1.domain.tld”
“metrics2.domain.tld”
Note
Dans le cas d’un cluster avec 3 noeuds, il est conseillé de mettre 3 urls pour que Prometheus puisse récupérer les metrics de tous les noeuds
Pour restreindre l’accès à des adresses IP, vous pouvez utiliser l’option TRAEFIK_PROMETHEUS_RESTRICT_IP
TRAEFIK_PROMETHEUS_RESTRICT_IP: “1.1.1.1,2.2.2.2”
CRON
Plusieurs taches CRON sont déclarées dans une plateforme Reemo. Il est impératif qu’elles soient unique. Dans le cas de l’utilisation de plusieurs serveurs/clusters infra ou api, il faut choisir le serveur/cluster devant prendre en charge ces services et les désactiver dans les autres par l’option CRON_ENABLE: “false”
Gestion générale des tâches
Option disponible:
API_cronGhostContainersMinutes: Temps d’expiration des conteneurs qui continuent à être UP dans l’environnement Provision mais qui n’ont plus d’existance connue par l’interface
Tâche permettant la suppression programmée des logs dans la base de données
Options disponibles:
API_CRONLOG_INTERVAL: Interval entre 2 requetes de suppression de log en heure / 24 heures par défaut
API_CRONLOG_RETENTION: Temps de rétention des logs en mois / 12 mois par défaut
Tâche permettant la synchronisation avec un serveur LDAP
Option disponible:
API_CRONLDAP_INTERVAL: Interval en minutes entre chaque synchronisation avec le serveur LDAP / 60 minutes par défaut
MAIL
Pour activer un système de messagerie
API_MAIL_ACTIVE: "true"
API_MAIL_BASEURL: "https://< URL du portal de connexion pour les utilisateurs >"
EXIM_SMARTHOST: "< URL du serveur SMTP >::587"
EXIM_PASSWORD: "< URL du serveur SMTP >:< Utilisateur SMTP >:< Mot de passe de connexion SMTP>"
MAINTENANCE
Mettre en place une page de maintenance en lieu et place du portail utilisateur
ansible-playbook -i inventory.yml playbooks/reemo-infra.yml --tags maintenance --extra-vars "MAINTENANCE_ENABLE=true"
ansible-playbook -i inventory.yml playbooks/reemo-infra.yml –tags portal
Alternative LDAP
Dans le cas d’une architecture à plusieurs API il est possible d’utiliser 2 fqdn pour un meme serveur LDAP
Rajouter l’option suivante dans la configuration du serveur API qui doit utiliser l’url Alternative pour contacter le serveur LDAP
API_useAlternateLDAPHost: "true"
Websocket
Par défaut l’environnement Infra permet d’utiliser les connexions Reemo en mode WebRTC. Si vous souhaitez utiliser le mode WebSocket et donc avoir des connexions uniquement en HTTPS, il faudra rajouter un environnement RelayWS et renseigner les adresses IP dans le fichier inventaire ainsi que l’url de connexion des utilisateurs sur cet environnement relayws
all:
vars:
API_LICENSE: "ewogICAg ... Uw5NXhGVDF0NFU2TkxOdjQvZU53PT0iCiAgICC9Cn0="
infra_manager:
vars:
PORTAL_URL: "url.domain.tld"
PORTALADMIN_URL: "urladmin.domain.ltd"
PORTALADMIN_URL_RESTRICT_IP: "10.3.1.2,10.3.2.0/24"
TRAEFIK_SSL_CERTS:
- cert_file: "/localpath/to/cert.crt"
key_file: "/localpath/to/key.key"
RELAYS_IP:
- ip: "10.10.0.1"
- ip: "10.10.0.2"
- ip: "10.10.0.3"
RELAYS_URL: "relayws.domain.tld"
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"
Reemo Containers
Si vous souhaitez utiliser un environnement Provision pour profiter de l’offre Reemo Containers, une interconnexion avec un environnement Provision est nécessaire. Un environnement Infra peut gérer autant que vous souhaitez d’environnement Provision différent
La connexion entre Infra et Provision s’effectue en HTTPS de l’Infra vers le Provision par le biais d’une URL qui doit être resolvable par l’environnement Infra, 2 choix possibles:
Renseigner dans votre DNS l’url du service Nginx dans l’environnement Provision. Si vous etes sur un environnement Provision vous pouvez profiter du système de Round Robin DNS pour renseigner plusieurs IP et faire du load balancing. Vous pouvez aussi intercaler un haproxy pour effectuer de la tolérance de panne
Renseigner dans l’inventaire les différentes adresses IP des services Nginx de l’environnement de Provision, uniquement dans les groupes api_manager et infra_manager
all:
vars:
API_LICENSE: "ewogICAg ... Uw5NXhGVDF0NFU2TkxOdjQvZU53PT0iCiAgICC9Cn0="
infra_manager:
vars:
PORTAL_URL: "url.domain.tld"
PORTALADMIN_URL: "urladmin.domain.ltd"
PORTALADMIN_URL_RESTRICT_IP: "10.3.1.2,10.3.2.0/24"
TRAEFIK_SSL_CERTS:
- cert_file: "/localpath/to/cert.crt"
key_file: "/localpath/to/key.key"
PROVISION_IP:
- ip: "10.10.0.1"
- ip: "10.10.0.2"
- ip: "10.10.0.3"
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"
Il faut aussi ajouter la variable PROVISION_SIGNAL_IP qui sont les ip des serveurs signaux où les conteneurs devront venir s’enregistrer, ce sont généralement les ip des serveurs Portal ou Infra
all:
vars:
API_LICENSE: "ewogICAg ... Uw5NXhGVDF0NFU2TkxOdjQvZU53PT0iCiAgICC9Cn0="
infra_manager:
vars:
PORTAL_URL: "url.domain.tld"
PORTALADMIN_URL: "urladmin.domain.ltd"
PORTALADMIN_URL_RESTRICT_IP: "10.3.1.2,10.3.2.0/24"
TRAEFIK_SSL_CERTS:
- cert_file: "/localpath/to/cert.crt"
key_file: "/localpath/to/key.key"
PROVISION_IP:
- ip: "10.10.0.1"
- ip: "10.10.0.2"
- ip: "10.10.0.3"
PROVISION_SIGNAL_IP:
- ip: "10.0.0.1"
- ip: "10.0.0.2"
- ip: "10.0.0.3"
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"
Vous pouvez renseigner un environnement Provision à l’initialisation de la base de données