# Guide Matrix — utilisation et connexion > **Objet** : rejoindre et administrer le serveur Matrix (Synapse + Element) auto-hébergé. > **Source** : déploiement documenté dans `g9-migration/journal.md` (Phase 2, 10/10/2026) et `DOSSIER-SOFTWARE.md` S8. > **Aucun secret dans ce guide** — les identifiants vivent dans **Vaultwarden**, jamais dans le dépôt (`.gitignore` : `matrix.env`, `*.key`, `*.cred`). --- ## 1. État du serveur | Composant | Machine | URL | Rôle | |-----------|---------|-----|------| | **Synapse** (homeserver) | G9 (`.24`) | `http://192.168.1.24:8008` | Serveur Matrix (API + fédération) | | **Element Web** (client) | G9 (`.24`) | `http://192.168.1.24:8009` | Client web, préconfiguré sur le homeserver local | | **Salon ops** | — | `!mp7MFx9QbrJ0ARtzw…` | Canal d'alertes (watchtower, restic, n8n) — user `ops-bot` | | **Cible TLS (Phase 4)** | — | `https://matrix.folzocorp.fr` | Accès sécurisé via Caddy (planifié, non en place) | - Version Synapse : **1.162.0** ; version Element Web : **1.12.30**. - `server_name` du homeserver : `192.168.1.24` → les identifiants ont la forme `@pseudo:192.168.1.24`. - Cible finale documentée : migration Matrix + Jitsi vers le **J5040 (`.1`)** (16 Go) — voir `DOSSIER-SOFTWARE.md` S2.4/S8. --- ## 2. Connexion ### 2.1 Element Web (PC, LAN) 1. Ouvrir **`http://192.168.1.24:8009`**. 2. Le homeserver est **déjà préconfiguré** (`config.json` monté en lecture seule dans le conteneur → `base_url: http://192.168.1.24:8008`). Rien à saisir. 3. Se connecter avec son compte (§3). > ⚠️ **En `http://IP`, Element Web affiche un rond infini** (contexte non sécurisé) — lire la section **5. Dépannage** avant de diagnostiquer le serveur. Fix recommandé : tunnel `localhost` (§5.2) ou TLS Phase 4. ### 2.2 Element Android (téléphone) 1. Installer **Element** (Play Store / F-Droid). 2. À l'écran de bienvenue : **Modifier le serveur d'accueil** (Changer de serveur). 3. Saisir `http://192.168.1.24:8008` → **Suivant** → **Se connecter**. 4. Nom d'utilisateur = le pseudo **sans le domaine** (ex. `effi`, pas `@effi:192.168.1.24`) + mot de passe. ### 2.3 Element Desktop (PC) 1. Installer Element Desktop (le navigateur n'est pas concerné par la restriction de contexte sécurisé). 2. Écran de connexion → **Modifier le serveur d'accueil** → `http://192.168.1.24:8008`. ### 2.4 Accès depuis l'extérieur (hors LAN) Matrix n'est **pas exposé** sur Internet (volontairement). Deux voies : | Voie | Comment | |------|---------| | **WireGuard** (J5040 `.1`) | Se connecter au VPN depuis le téléphone/PC portable → le LAN `.1/24` est atteignable → ouvrir `http://192.168.1.24:8009` (Android : saisir directement le homeserver dans l'app) | | **TLS Phase 4** (à faire) | Caddy + `matrix.folzocorp.fr` → l'app Element utilise `https://matrix.folzocorp.fr`, accessible de façon sécurisée | --- ## 3. Création de compte > L'**inscription publique est désactivée** (pas de self-registration sur un serveur privé). Les comptes se créent **côté serveur**, en SSH sur le G9 (`.24`). ### 3.1 Prérequis : un compte admin Synapse Si aucun admin n'existe, en créer un via le conteneur Synapse : ```bash # sur .24 — trouver le nom du conteneur docker ps --format '{{.Names}}' | grep -i synapse # créer un utilisateur admin (le script lit le shared secret du homeserver.yaml) docker exec -it register_new_matrix_user \ -c /data/homeserver.yaml -a -u -p '' ``` > Si `register_new_matrix_user` refuse (pas de `registration_shared_secret` dans `homeserver.yaml`) : l'ajouter via `sudo` dans `/data/homeserver.yaml` (`registration_shared_secret: `, généré par `openssl rand -hex 32`), **restart du conteneur**, relancer la commande, puis retirer le secret et restart à nouveau. Même pattern que `room_creation: true` (journal 2026-10-09). Stocker `` dans **Vaultwarden**. ### 3.2 Créer les comptes (famille, bots) via l'API admin **Étape 1 — obtenir un token admin** (login avec le compte admin) : ```bash curl -s -X POST 'http://192.168.1.24:8008/_matrix/client/v3/login' \ -H 'Content-Type: application/json' \ -d '{ "auth": { "type": "m.login.password", "identifier": { "type": "m.id.user", "user": "" }, "passphrase": "" } }' # → réponse JSON : récupérer "access_token" (= ) ``` **Étape 2 — créer l'utilisateur** (API admin v2, `PUT` = enregistrement) : ```bash curl -s -X PUT 'http://192.168.1.24:8008/_synapse/admin/v2/users/@:192.168.1.24' \ -H "Authorization: Bearer " \ -H 'Content-Type: application/json' \ -d '{ "password": "", "display_name": "", "admin": false }' # → 201 Created = compte créé ``` - `admin: true` pour un second administrateur, `false` pour la famille/bots. - Le pseudo est en minuscules, sans espaces ni accents (règle Matrix). ### 3.3 Première connexion + chiffrement (E2E) 1. Ouvrir Element (§2), se connecter avec `@:192.168.1.24` (Web/Desktop : pseudo seul suffit). 2. Element demande une **phrase de passe de récupération** (secure backup) → la **noter hors-ligne** (papier), c'est la porte de sortie du chiffrement. 3. Vérifier ses sessions : **Paramètres → Sécurité → Vérification** (QR code entre téléphone et PC) pour valider le chiffrement de bout en bout. ### 3.4 Désinscription / suppression - **Désactiver** un compte (propre, conserve la trace) : ```bash curl -s -X POST 'http://192.168.1.24:8008/_synapse/admin/v1/deactivate/' \ -H "Authorization: Bearer " \ -H 'Content-Type: application/json' \ -d '{ "erase": true }' ``` - Vérifier que l'inscription publique reste fermée dans `homeserver.yaml` : `disable_registration: true` (ne pas activer `enable_registration` sans point d'accès protégé). --- ## 4. Usage type (rappel du plan, S8) | Salon | Contenu | |-------|---------| | **Famille** | Messagerie quotidienne du **foyer** (complément de WhatsApp, **pas un remplacement**), visio Jitsi intégrée à Element | | **Ops** | Alertes machine : watchtower (MAJ images), restic (backup G9), n8n — via `ops-bot` | | **hermes** (prévu) | Salon où la famille parle à Effi (assistant, Phase 3 du second cerveau) | --- ## 5. Dépannage ### 5.1 Le rond infini dans Element Web (cause racine documentée) **Symptôme** : page noire, spinner infini sur `http://192.168.1.24:8009`. Console (F12) : ``` Browser missing feature: 'crypto' Browser missing feature: 'securecontext' Error initialising Matrix session TypeError: window.crypto.randomUUID is not a function ``` **Cause** : Element ≥ 1.12 exige un **contexte sécurisé** (HTTPS, `localhost` ou `file:`). En `http://`, le navigateur coupe `crypto.randomUUID` → Element n'arrive pas à initialiser la session. **Le serveur n'y est pas pour rien.** Anodins (à ne pas poursuivre) : `404 config..json` (config optionnelle par hôte) et `404 /_matrix/client/v1/auth_metadata` (endpoint optionnel). **Cause secondaire** : un vieux **service worker** peut garder en cache une config obsolète (la config cassée « matrix.org » d'avant le fix du 10/10). Nettoyage : F12 → Application → Service Workers → *Unregister*, puis Storage → *Clear site data*, puis Ctrl+Maj+R. ### 5.2 Workaround sans TLS : tunnel localhost `localhost` est un contexte sécurisé → Element fonctionne. Depuis le PC : ```bash ssh -L 8009:192.168.1.24:8009 -L 8008:192.168.1.24:8008 @192.168.1.24 # puis ouvrir http://localhost:8009 ``` ### 5.3 Fix définitif : TLS (Phase 4) Caddy + `matrix.folzocorp.fr` (même pattern que `obsidian.folzocorp.fr`, journal Phase 4) → Element Web servi en HTTPS, spinner résolu, accès distant propre. ### 5.4 Commandes de diagnostic (côté serveur, tout doit répondre) ```bash # 1) API vivante → JSON avec "versions":[...] (200) curl -s http://192.168.1.24:8008/_matrix/client/versions # 2) Element servi + config correcte → 200 + base_url = http://192.168.1.24:8008 curl -s http://192.168.1.24:8009/ -o /dev/null -w '%{http_code}\n' curl -s http://192.168.1.24:8009/config.json # 3) CORS (sans lui, Element web est muet) → Access-Control-Allow-Origin: * curl -s -D - -o /dev/null -H "Origin: http://192.168.1.24:8009" \ http://192.168.1.24:8008/_matrix/client/versions | grep -i access-control # 4) Conteneurs docker ps --format '{{.Names}}\t{{.Status}}' | grep -Ei 'synapse|element' ``` **Résultats vérifiés le 11/10/2026** : 1) `200` + versions r0.0.1→v1.12 ; 2) `200` + `base_url: http://192.168.1.24:8008` ; 3) `Access-Control-Allow-Origin: *` ; 4) synapse `Synapse/1.162.0` UP. Si ces 4 tests passent et qu'Element tourne en rond → problème 100 % navigateur (§5.1/5.2). ### 5.5 Alertes ops absentes du salon ops - Vérifier le token `ops-bot` : côté G9, `/etc/restic/matrix.env` (root, `600`) pour restic ; workflow n8n « Watchtower Notification » pour les MAJ d'images. - Test d'envoi direct : ```bash curl -s -X POST 'http://192.168.1.24:8008/_matrix/client/v3/rooms/!mp7MFx9QbrJ0ARtzw…/send/m.room.message/test1' \ -H "Authorization: Bearer " \ -H 'Content-Type: application/json' \ -d '{"msgtype":"m.text","body":"test alerte"}' # → 200 + {"event_id":"$…"} ``` --- ## 6. Sécurité (règles du projet) | Règle | Application Matrix | |-------|--------------------| | Secrets hors dépôt | Token admin, mot de passe admin, `matrix.env` → **Vaultwarden** / root only, jamais git | | Pas d'exposition Internet | Accès LAN ou WireGuard ; TLS Phase 4 pour l'exposition contrôlée | | 2FA | À activer sur les comptes admin (S9 : 2FA sur tous les services exposés) | | Comptes famille | `admin: false`, mot de passe unique par personne, phrase de récupération E2E notée hors-ligne | --- *Guide créé le 11/10/2026 — état vérifié ce jour sur `.24` (Synapse 1.162.0, Element 1.12.30). À réaligner quand Matrix migrera vers le J5040 (`.1`) et que `matrix.folzocorp.fr` (Caddy TLS) sera en place.*