# mattermost

# chat claude

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

<details id="bkmrk-nginx-%C2%A0"><summary>nginx</summary>

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

## Architecture multi-instances Mattermost

### <span style="white-space:pre-wrap;">1. </span>**Côté Docker**<span style="white-space:pre-wrap;"> (tu dis savoir faire, mais je résume) :</span>

Chaque instance doit avoir :

- <span style="white-space:pre-wrap;">Son propre </span>`<span class="editor-theme-code">docker-compose.yml</span>`<span style="white-space:pre-wrap;"> dans un dossier séparé</span>
- <span style="white-space:pre-wrap;">Son propre </span>`<span class="editor-theme-code">.env</span>`<span style="white-space:pre-wrap;"> avec des valeurs uniques :</span>```bash
    # Instance 1 : 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**<span style="white-space:pre-wrap;"> : un réseau Docker séparé pour isoler chaque instance</span>

### <span style="white-space:pre-wrap;">2. </span>**Côté Nginx**<span style="white-space:pre-wrap;"> :</span>

<span style="white-space:pre-wrap;">Pour chaque instance, tu crées un nouveau fichier de conf avec :### 3. </span>**Certificats SSL avec Certbot**<span style="white-space:pre-wrap;"> :</span>

Pour chaque nouveau domaine :

```bash
# Obtenir un certificat pour le nouveau domaine
sudo certbot certonly --nginx -d projet-x.aubaygues.fr

# Ou plusieurs domaines à la fois
sudo certbot certonly --nginx -d projet-x.aubaygues.fr -d chat-dev.aubaygues.fr
```

Certbot va :

- <span style="white-space:pre-wrap;">✅ Créer les certificats dans </span>`<span class="editor-theme-code">/etc/letsencrypt/live/projet-x.aubaygues.fr/</span>`
- ✅ Gérer le renouvellement automatique (tous les domaines ensemble)

### <span style="white-space:pre-wrap;">4. </span>**Activation des configurations**<span style="white-space:pre-wrap;"> :</span>

```bash
# 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 :

### <span style="white-space:pre-wrap;">⚠️ </span>**Nommage des upstreams**

<span style="white-space:pre-wrap;">Chaque </span>`<span class="editor-theme-code">upstream</span>`<span style="white-space:pre-wrap;"> doit avoir un nom </span>**unique**<span style="white-space:pre-wrap;"> :</span>

- `<span class="editor-theme-code">backend_instance1</span>`<span style="white-space:pre-wrap;">, </span>`<span class="editor-theme-code">backend_instance2</span>`, etc.
- <span style="white-space:pre-wrap;">Ou </span>`<span class="editor-theme-code">backend_groupe</span>`<span style="white-space:pre-wrap;">, </span>`<span class="editor-theme-code">backend_projetx</span>`, etc.

### <span style="white-space:pre-wrap;">⚠️ </span>**Ports Docker uniques**

```yaml
# Instance 1
ports:
  - 8065:8065

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

# Instance 3
ports:
  - 8067:8065
```

### <span style="white-space:pre-wrap;">⚠️ </span>**Variables d'environnement `<strong class="editor-theme-bold editor-theme-code">.env</strong>`**

<span style="white-space:pre-wrap;">Chaque instance doit avoir son propre </span>`<span class="editor-theme-code">MM_SERVICESETTINGS_SITEURL</span>`<span style="white-space:pre-wrap;"> :</span>

```bash
# Instance 1
MM_SERVICESETTINGS_SITEURL=https://groupe.aubaygues.fr

# Instance 2
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 :

```bash
#!/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/nginx/sites-available/mattermost-$INSTANCE_NAME.conf"
echo "5. sudo ln -s /etc/nginx/sites-available/mattermost-$INSTANCE_NAME.conf /etc/nginx/sites-enabled/"
echo "6. sudo nginx -t && sudo systemctl reload nginx"
```

<span style="white-space:pre-wrap;">Voilà ! En gros : </span>**oui, c'est aussi simple que tu le penses**, mais attention aux noms d'upstreams et aux ports 😉

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

upstream backend\_instance2 {  
<span style="white-space:pre-wrap;"> server localhost:8066; # Port différent !</span>  
<span style="white-space:pre-wrap;"> keepalive 64;</span>  
}

server {  
<span style="white-space:pre-wrap;"> listen 80;</span>  
<span style="white-space:pre-wrap;"> server\_name projet-x.aubaygues.fr;</span>  
<span style="white-space:pre-wrap;"> return 301 https://$host$request\_uri;</span>  
}

server {  
<span style="white-space:pre-wrap;"> listen 443 ssl http2;</span>  
<span style="white-space:pre-wrap;"> server\_name projet-x.aubaygues.fr;</span>

<span style="white-space:pre-wrap;"> ssl\_certificate /etc/letsencrypt/live/projet-x.aubaygues.fr/fullchain.pem;</span>  
<span style="white-space:pre-wrap;"> ssl\_certificate\_key /etc/letsencrypt/live/projet-x.aubaygues.fr/privkey.pem;</span>  
<span style="white-space:pre-wrap;"> include /etc/letsencrypt/options-ssl-nginx.conf;</span>  
<span style="white-space:pre-wrap;"> ssl\_dhparam /etc/letsencrypt/ssl-dhparams.pem;</span>

<span style="white-space:pre-wrap;"> location ~ /api/v\[0-9\]+/(users/)?websocket$ {</span>  
<span style="white-space:pre-wrap;"> proxy\_set\_header Upgrade $http\_upgrade;</span>  
<span style="white-space:pre-wrap;"> proxy\_set\_header Connection "upgrade";</span>  
<span style="white-space:pre-wrap;"> proxy\_set\_header Host $http\_host;</span>  
<span style="white-space:pre-wrap;"> proxy\_set\_header X-Real-IP $remote\_addr;</span>  
<span style="white-space:pre-wrap;"> proxy\_set\_header X-Forwarded-For $proxy\_add\_x\_forwarded\_for;</span>  
<span style="white-space:pre-wrap;"> proxy\_set\_header X-Forwarded-Proto $scheme;</span>  
<span style="white-space:pre-wrap;"> proxy\_pass http://backend\_instance2;</span>  
<span style="white-space:pre-wrap;"> }</span>

<span style="white-space:pre-wrap;"> location / {</span>  
<span style="white-space:pre-wrap;"> proxy\_set\_header Host $http\_host;</span>  
<span style="white-space:pre-wrap;"> proxy\_set\_header X-Real-IP $remote\_addr;</span>  
<span style="white-space:pre-wrap;"> proxy\_set\_header X-Forwarded-For $proxy\_add\_x\_forwarded\_for;</span>  
<span style="white-space:pre-wrap;"> proxy\_set\_header X-Forwarded-Proto $scheme;</span>  
<span style="white-space:pre-wrap;"> proxy\_http\_version 1.1;</span>  
<span style="white-space:pre-wrap;"> proxy\_pass http://backend\_instance2;</span>  
<span style="white-space:pre-wrap;"> }</span>  
}