Skip to main content

chat claude

https://claude.ai/chat/b1885736-ac35-42c7-9bb0-205f08c37415

nginx

Oui, c'est exactement ça ! Mais il y a quelques points importants à gérer :

Architecture multi-instances Mattermost

1. Côté Docker (tu dis savoir faire, mais je résume) :

Chaque instance doit avoir :

  • Son propre docker-compose.yml dans un dossier séparé
  • Son propre .env avec des valeurs uniques :


# ===== INSTANCEInstance 1 : groupe.ports 8065 + base postgres 5432APP_PORT=8065POSTGRES_DATA_PATH=./volumes/db1/...# Instance 2 : ports 8066 + base postgres 5433APP_PORT=8066POSTGRES_DATA_PATH=./volumes/db2/...
  • Ses propres volumes de données
  • Optionnel : un réseau Docker séparé pour isoler chaque instance
  • 2. Côté Nginx :

    Pour chaque instance, tu crées un nouveau fichier de conf avec :### 3. Certificats SSL avec Certbot :

    Pour chaque nouveau domaine :

    # Obtenir un certificat pour le nouveau domaine
    sudo certbot certonly --nginx -d projet-x.aubaygues.fr
    
    =====
    # FichierOu plusieurs domaines à la fois sudo certbot certonly --nginx -d projet-x.aubaygues.fr -d chat-dev.aubaygues.fr

    Certbot va :

    • ✅ Créer les certificats dans /etc/letsencrypt/live/projet-x.aubaygues.fr/
    • ✅ Gérer le renouvellement automatique (tous les domaines ensemble)

    4. Activation des configurations :

    # Créer les symlinks
    sudo ln -s /etc/nginx/sites-available/mattermost-instance1.conf

    /etc/nginx/sites-enabled/ sudo ln -s /etc/nginx/sites-available/mattermost-instance2.conf /etc/nginx/sites-enabled/ # Tester sudo nginx -t # Recharger sudo systemctl reload nginx

    Points d'attention importants :

    ⚠️ Nommage des upstreams

    Chaque upstream backend_instance1 {
    doit serveravoir localhost:8065;un nom
    unique :

    • backend_instance1, keepalivebackend_instance2, 64;etc.
    • Ou
      }

      backend_groupe, backend_projetx, etc.

    ⚠️ Ports Docker uniques

    # Instance 1
    ports:
      - 8065:8065
    
    # Instance 2  
    ports:
      - 8066:8065  # Port hôte 8066 → port container 8065
    
    # Instance 3
    ports:
      - 8067:8065

    ⚠️ Variables d'environnement .env

    serverChaque {
    instance doit avoir son propre
    MM_SERVICESETTINGS_SITEURL :

    # listenInstance 80;
    1   server_name groupe.aubaygues.fr;
        return 301 MM_SERVICESETTINGS_SITEURL=https://$host$request_uri;
    }

    server {
        listen 443 ssl http2;
        server_name groupe.aubaygues.fr;

    fr

    # Instance ssl_certificate2 MM_SERVICESETTINGS_SITEURL=https://projet-x.aubaygues.fr

    Organisation recommandée :

    /opt/mattermost/
    ├── instance1-groupe/
    │   ├── docker-compose.yml
    │   ├── .env (DOMAIN=groupe.aubaygues.fr, APP_PORT=8065)
    │   └── volumes/
    ├── instance2-projetx/
    │   ├── docker-compose.yml
    │   ├── .env (DOMAIN=projet-x.aubaygues.fr, APP_PORT=8066)
    │   └── volumes/
    └── instance3-dev/
        ├── docker-compose.yml
        ├── .env (DOMAIN=chat-dev.aubaygues.fr, APP_PORT=8067)
        └── volumes/

    Script pour faciliter la création :

    #!/bin/bash
    # create-mattermost-instance.sh
    
    INSTANCE_NAME=$1
    DOMAIN=$2
    PORT=$3
    
    if [ -z "$INSTANCE_NAME" ] || [ -z "$DOMAIN" ] || [ -z "$PORT" ]; then
        echo "Usage: $0 <instance_name> <domain> <port>"
        echo "Exemple: $0 projetx projet-x.aubaygues.fr 8066"
        exit 1
    fi
    
    # Créer le dossier
    mkdir -p /opt/mattermost/$INSTANCE_NAME
    cd /opt/mattermost/$INSTANCE_NAME
    
    # Copier les fichiers de base depuis instance1
    cp -r /opt/mattermost/instance1-groupe/docker-compose.yml .
    cp -r /opt/mattermost/instance1-groupe/.env .
    
    # Adapter le .env
    sed -i "s/DOMAIN=.*/DOMAIN=$DOMAIN/" .env
    sed -i "s/APP_PORT=.*/APP_PORT=$PORT/" .env
    sed -i "s|POSTGRES_DATA_PATH=.*|POSTGRES_DATA_PATH=./volumes/db/var/lib/postgresql/data|" .env
    
    # Créer la structure de volumes
    mkdir -p volumes/db/var/lib/postgresql/data
    mkdir -p volumes/app/mattermost/{config,data,logs,plugins,client/plugins,bleve-indexes}
    
    # Permissions
    sudo chown -R 2000:2000 volumes/app/mattermost
    
    echo "✅ Instance créée dans /opt/mattermost/$INSTANCE_NAME"
    echo "Prochaines étapes:"
    echo "1. cd /opt/mattermost/$INSTANCE_NAME"
    echo "2. docker-compose up -d"
    echo "3. sudo certbot certonly --nginx -d $DOMAIN"
    echo "4. Créer /etc/letsencrypt/live/groupe.aubaygues.fr/fullchain.pem;
    nginx/sites-available/mattermost-$INSTANCE_NAME.conf" echo ssl_certificate_key"5. sudo ln -s /etc/letsencrypt/live/groupe.aubaygues.fr/privkey.pem;
        includenginx/sites-available/mattermost-$INSTANCE_NAME.conf /etc/letsencrypt/options-ssl-nginx.conf;nginx/sites-enabled/" echo "6. sudo nginx -t && sudo systemctl reload nginx"

    Voilà ! En gros :
    oui, c'est ssl_dhparamaussi /etc/letsencrypt/ssl-dhparams.pem;simple que tu le penses, mais attention aux noms d'upstreams et aux ports 😉

        location ~ /api/v[0-9]+/(users/)?websocket$ {
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            proxy_set_header Host $http_host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_pass http://backend_instance1;
        }

        location / {
            proxy_set_header Host $http_host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_http_version 1.1;
            proxy_pass http://backend_instance1;
        }
    }

    # ===== INSTANCE 2 : projet-x.aubaygues.fr =====
    # Fichier : /etc/nginx/sites-available/mattermost-instance2.conf

    upstream backend_instance2 {
        server localhost:8066;  # Port différent !
        keepalive 64;
    }

    server {
        listen 80;
        server_name projet-x.aubaygues.fr;
        return 301 https://$host$request_uri;
    }

    server {
        listen 443 ssl http2;
        server_name projet-x.aubaygues.fr;

        ssl_certificate /etc/letsencrypt/live/projet-x.aubaygues.fr/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/projet-x.aubaygues.fr/privkey.pem;
        include /etc/letsencrypt/options-ssl-nginx.conf;
        ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

        location ~ /api/v[0-9]+/(users/)?websocket$ {
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            proxy_set_header Host $http_host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_pass http://backend_instance2;
        }

        location / {
            proxy_set_header Host $http_host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_http_version 1.1;
            proxy_pass http://backend_instance2;
        }
    }