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

Avant l’installation finale de l’environnement RELAYWS, toutes les machines cibles doivent pouvoir accéder aux images nécessaires à leur déploiement.
Pour la gestion des images Docker, merci de vous référer à la documentation sur la Gestion du Registre et des Images de l’environnement RELAYWS.

Configuration de Nginx

Un service Nginx est requis sur chaque noeud RELAYWS pour communiquer avec l’infrastructure.
Le rôle reemo-relayws installe et configure Nginx automatiquement.

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