Installation¶
Une fois les prérequis en place (Ansible, Docker Swarm et initialisation du cluster), il est possible de personnaliser le déploiement de RELAYWS à l’aide de variables Ansible. Ces options permettent notamment de configurer la gestion des certificats SSL et le comportement de Nginx.
Tip
La configuration des paramètres d’installation doit être définie avant l’exécution de la commande d’installation finale.
Important
Configuration de Nginx¶
Voici les variables qui peuvent être configurées :
RELAYWS_NGINX_PORT : port d’écoute (par défaut 8443)
RELAYWS_NGINX_SSL_VERIFY_CLIENT : activer/désactiver vérification SSL
RELAYWS_NGINX_SSL_CLIENT_S_DN : DN attendu dans les certificats clients
Certificats SSL¶
Nginx¶
Pour sécuriser les échanges, les micro-services communiquent entre eux en mTLS, ce qui impose une gestion des certificats.
Deux modes sont possibles :
Utilisation automatique¶
Par défaut, le rôle Ansible reemo-relayws utilise automatiquement la PKI générée par le rôle reemo-infra. Dans ce cas, aucune configuration supplémentaire n’est nécessaire dans l’inventaire : les certificats sont déjà créés et disponibles dans le répertoire produit par reemo-infra.
Configuration manuelle¶
Il est aussi possible de générer soi-même les certificats SSL pour l’URL : reemo_relayws
Il faut ensuite renseigner dans l’inventaire Ansible les chemins locaux vers la clé et le certificat. Ils seront copiés automatiquement vers le cluster Docker Swarm par le rôle reemo-relayws.
Exemple :
relayws_manager:
vars:
CA_SSL_CRT_LOCALPATH: "/local/path/ca.crt"
RELAYWS_SSL_CRT_LOCALPATH: "/local/path/reemo_relayws.crt"
RELAYWS_SSL_KEY_LOCALPATH: "/local/path/reemo_relayws.key"
hosts:
relayws_manager1:
ansible_host: "10.20.0.1"
relayws_manager2:
ansible_host: "10.20.0.2"
relayws_manager3:
ansible_host: "10.20.0.3"
Traefik¶
Toutes les connexions utilisateurs passent par un service Traefik. Il est possible d’y spécifier un certificat SSL pour sécuriser l’accès utilisateur.
Trois modes sont disponibles :
Certificat par défaut¶
Par défaut, un certificat autosigné est généré automatiquement lors de la création du conteneur Traefik. Ce mode est adapté pour des environnements de test, mais il n’est pas recommandé en production.
Certificat local¶
Vous pouvez fournir un certificat et une clé stockés sur la machine Ansible. Le rôle reemo-relayws se charge de déployer ces fichiers sur les serveurs hébergeant Traefik.
Exemple d’inventaire :
TRAEFIK_SSL_CERTS:
- cert_file: "/localpath/to/cert.crt"
key_file: "/localpath/to/key.key"
Certificat déjà présent sur le serveur¶
Si les certificats sont déjà installés sur les serveurs cibles, vous pouvez indiquer leurs chemins locaux. Ils seront ensuite montés directement dans le conteneur Traefik.
Exemple d’inventaire :
TRAEFIK_SSL_CERTS_REMOTE:
- cert_file_remotepath: "/remotepath/to/cert.crt"
key_file_remotepath: "/remotepath/to/key.key"
Optimisation avant installation¶
Dans un cluster RELAYWS d’au moins trois serveurs, il est possible d’optimiser la connexion entre :
le navigateur de l’utilisateur,
le conteneur relai websocket,
et le conteneur applicatif.
L’objectif est de forcer l’ensemble du flux à transiter par le même worker Docker Swarm, ce qui améliore la performance et réduit la latence (optimisation du flux de pixels).
Préparation¶
Avant de configurer cette optimisation, il faut :
définir une URL publique par noeud de l’environnement RELAYWS,
associer un certificat SSL à chaque URL.
Vous pouvez soit :
utiliser un certificat distinct pour chaque URL,
employer un certificat Wildcard couvrant l’ensemble du domaine,
ou générer un certificat unique avec des Subject Alternative Names (SAN) suffisants pour couvrir toutes les URL des noeuds.
Configuration Ansible¶
Dans l’inventaire Ansible, ajoutez pour chaque noeud Relayws :
le certificat correspondant (ou le wildcard partagé),
son nom d’hôte dans le cluster Swarm,
son IP privée (utilisée par les conteneurs),
et son URL publique (utilisée par les utilisateurs).
Exemple :
relayws_manager:
vars:
TRAEFIK_SSL_CERTS:
- cert_file: "/localpath/to/relayws1_cert_domain.tld.crt"
key_file: "/localpath/to/relayws1_key_domain.tld.key"
- cert_file: "/localpath/to/relayws2_cert_domain.tld.crt"
key_file: "/localpath/to/relayws2_key_domain.tld.key"
- cert_file: "/localpath/to/relayws3_cert_domain.tld.crt"
key_file: "/localpath/to/relayws3_key_domain.tld.key"
hosts:
relayws_manager1:
ansible_host: "<IP du serveur relayws1>"
REEMO_SWARM_NODE_HOSTNAME: "<hostname dans le cluster Swarm>"
REEMO_RELAYWS_PRIVATE_IP: "<IP privée du serveur>"
REEMO_RELAYWS_PUBLIC_URL: "<URL publique du serveur>"
relayws_manager2:
ansible_host: "<IP du serveur relayws2>"
REEMO_SWARM_NODE_HOSTNAME: "<hostname dans le cluster Swarm>"
REEMO_RELAYWS_PRIVATE_IP: "<IP privée du serveur>"
REEMO_RELAYWS_PUBLIC_URL: "<URL publique du serveur>"
relayws_manager3:
ansible_host: "<IP du serveur relayws3>"
REEMO_SWARM_NODE_HOSTNAME: "<hostname dans le cluster Swarm>"
REEMO_RELAYWS_PRIVATE_IP: "<IP privée du serveur>"
REEMO_RELAYWS_PUBLIC_URL: "<URL publique du serveur>"
Installation finale¶
Une fois votre inventaire terminé, vous pouvez effectuer l’installation finale de l’environnement RELAYWS avec le rôle Ansible reemo-relayws.
ansible-playbook -i inventory.yml playbooks/reemo-relayws.yml