Integration¶
Connecter Nextcloud et Mattermost avec l'ecosysteme interne — SSO, observabilité, forge logicielle et clients.
SSO via Keycloak (OIDC)¶
L'authentification centralisee evite aux utilisateurs de gérer des mots de passe distincts pour chaque service. Keycloak fournit le protocole OpenID Connect (OIDC) utilise par Nextcloud et Mattermost.
Créer les clients OIDC dans Keycloak¶
Dans le realm de votre organisation, creez deux clients :
| Parametre | Nextcloud | Mattermost |
|---|---|---|
| Client ID | nextcloud | mattermost |
| Client Protocol | openid-connect | openid-connect |
| Access Type | confidential | confidential |
| Valid Redirect URIs | https://cloud.example.com/* | https://chat.example.com/* |
| Web Origins | https://cloud.example.com | https://chat.example.com |
Notez le Client Secret génère pour chaque client.
Configurer Nextcloud OIDC¶
Installez l'application user_oidc :
Configurez le provider :
podman exec -u www-data nextcloud php occ user_oidc:provider:create \
--identifier="keycloak" \
--clientid="nextcloud" \
--clientsecret="VOTRE_SECRET_NC" \
--discoveryuri="https://auth.example.com/realms/org/.well-known/openid-configuration" \
--mapping-uid="preferred_username" \
--mapping-displayname="name" \
--mapping-email="email" \
--unique-uid=1
Désactiver le login par mot de passe
Pour forcer le SSO, desactivez la page de login native :
podman exec -u www-data nextcloud php occ config:app:set user_oidc \
allow_multiple_user_backends --value="0"
Les administrateurs conservent un accès direct via https://cloud.example.com/login?direct=1.
Configurer Mattermost OIDC¶
Ajoutez la configuration OpenID Connect dans le config.json de Mattermost ou via les variables d'environnement :
# Variables d'environnement supplementaires pour le docker-compose.yml
MM_OPENIDSETTINGS_ENABLE=true
MM_OPENIDSETTINGS_SECRET=VOTRE_SECRET_MM
MM_OPENIDSETTINGS_ID=mattermost
MM_OPENIDSETTINGS_DISCOVERYENDPOINT=https://auth.example.com/realms/org/.well-known/openid-configuration
MM_OPENIDSETTINGS_BUTTONTEXT=Se connecter avec Keycloak
MM_OPENIDSETTINGS_BUTTONCOLOR=#0067a5
Apres le redemarrage, un bouton "Se connecter avec Keycloak" apparait sur la page de login.
Integration Mattermost-Nextcloud¶
Partage de fichiers dans le chat¶
Le plugin Nextcloud for Mattermost permet de :
- Rechercher et partager des fichiers Nextcloud directement depuis un canal Mattermost
- Recevoir des notifications Mattermost quand un fichier Nextcloud est partage avec vous
- Previsualiser les liens Nextcloud dans les messages
Installation :
# Telecharger le plugin
curl -L -o nextcloud-plugin.tar.gz \
"https://github.com/mattermost/mattermost-plugin-nextcloud/releases/latest/download/nextcloud-plugin.tar.gz"
# Installer via mmctl
podman exec mattermost mmctl plugin add /path/to/nextcloud-plugin.tar.gz
podman exec mattermost mmctl plugin enable com.mattermost.nextcloud
Configurez le plugin dans System Console > Plugins > Nextcloud :
| Parametre | Valeur |
|---|---|
| Nextcloud URL | https://cloud.example.com |
| OIDC Connect URL | https://auth.example.com |
| Encryption Secret | (génère automatiquement) |
Observabilité — Grafana¶
Metriques Nextcloud¶
Nextcloud expose des metriques via l'application serverinfo :
Endpoint de metriques :
GET https://cloud.example.com/ocs/v2.php/apps/serverinfo/api/v1/info?format=json
Authorization: Basic <admin_credentials>
Metriques disponibles :
| Metrique | Description |
|---|---|
activeUsers.last5min | Utilisateurs actifs (5 min) |
storage.num_files | Nombre total de fichiers |
storage.num_storages | Nombre de backends de stockage |
shares.num_shares | Nombre de partages actifs |
server.php.memory_limit | Limite mémoire PHP |
server.database.size | Taille de la base de données |
Prometheus exporter
Pour une integration Prometheus native, utilisez nextcloud-exporter qui transforme les metriques OCS en format Prometheus.
Metriques Mattermost¶
Mattermost expose des metriques Prometheus nativement sur le port 8067 :
# Activer les metriques (variables d'environnement)
MM_METRICSSETTINGS_ENABLE=true
MM_METRICSSETTINGS_LISTENADDRESS=:8067
Configurez un scrape Prometheus :
# prometheus.yml (extrait)
scrape_configs:
- job_name: mattermost
static_configs:
- targets: ["mattermost:8067"]
- job_name: nextcloud
static_configs:
- targets: ["nextcloud-exporter:9205"]
Dashboard Grafana¶
Importez les dashboards depuis le catalogue Grafana :
| Service | Dashboard ID | Contenu |
|---|---|---|
| Mattermost | 15582 | Messages, canaux, utilisateurs, WebSocket |
| Nextcloud | 13499 | Fichiers, partages, stockage, PHP |
DNS¶
Configurez les enregistrements DNS pour les trois sous-domaines :
cloud.example.com. IN A <IP_SERVEUR>
chat.example.com. IN A <IP_SERVEUR>
office.example.com. IN A <IP_SERVEUR>
Si vous utilisez un load balancer ou un CDN, utilisez des enregistrements CNAME vers le point d'entree.
Gitea — Webhooks vers Mattermost¶
Connectez votre forge logicielle a Mattermost pour recevoir les notifications de commits, pull requests et issues.
Webhook entrant dans Mattermost¶
- Dans Mattermost, allez dans Integrations > Incoming Webhooks
- Creez un webhook pour le canal
#dev:- Display Name :
Gitea - Description :
Notifications Gitea - Channel :
dev
- Display Name :
- Copiez l'URL du webhook
Webhook sortant dans Gitea¶
Dans chaque dépôt Gitea, configurez un webhook :
| Parametre | Valeur |
|---|---|
| Target URL | https://chat.example.com/hooks/xxx-xxx-xxx |
| HTTP Method | POST |
| Content Type | application/json |
| Trigger Events | Push, Pull Request, Issues |
Format Mattermost
Selectionnez le format Mattermost dans la liste des types de webhook Gitea. Le payload sera automatiquement formate pour l'affichage dans les canaux.
CalDAV — Synchronisation calendrier¶
Les calendriers Nextcloud sont accessibles via CalDAV par tout client compatible.
Thunderbird¶
| Parametre | Valeur |
|---|---|
| Type | CalDAV |
| URL | https://cloud.example.com/remote.php/dav/calendars/<username>/personal/ |
| Authentication | Mot de passe d'application ou token OIDC |
iOS / macOS¶
| Parametre | Valeur |
|---|---|
| Server | https://cloud.example.com |
| Path | /remote.php/dav/ |
| Port | 443 |
DAVx5 (Android)¶
Installez DAVx5 depuis F-Droid, ajoutez un compte avec l'URL de base https://cloud.example.com et DAVx5 decouvre automatiquement les calendriers et contacts via le service discovery.
Applications mobiles¶
Nextcloud¶
| Plateforme | Application | Source |
|---|---|---|
| Android | Nextcloud | F-Droid / Play Store |
| iOS | Nextcloud | App Store |
Configuration :
- Ouvrir l'app et entrer
https://cloud.example.com - L'app redirige vers Keycloak pour le SSO
- Autoriser l'accès et l'app se connecte automatiquement
Mattermost¶
| Plateforme | Application | Source |
|---|---|---|
| Android | Mattermost | F-Droid / Play Store |
| iOS | Mattermost | App Store |
Configuration :
- Ouvrir l'app et entrer
https://chat.example.com - Choisir "Se connecter avec Keycloak"
- Les notifications push fonctionnent via le Push Proxy configure
Notifications push auto-hebergees
Les apps officielles Mattermost des stores utilisent les serveurs push de Mattermost Inc. (TPNS). Pour un auto-hebergement complet, compilez les apps mobiles avec vos propres cles APNs/FCM et pointez vers votre push proxy. Voir Architecture — Push Proxy.
Politiques de partage externe¶
Par defaut, les partages sont internes a l'organisation. Pour les cas necessitant un partage avec des externes :
| Type de partage | Politique par defaut | Condition d'activation |
|---|---|---|
| Lien public (sans mot de passe) | Interdit | — |
| Lien public (avec mot de passe) | Autorise (approbation) | Validation par le responsable |
| Partage federe (OCM) | Autorise | Domaines de confiance configures |
| Partage par email | Autorise (expiration) | Expiration automatique a 7 jours |
Configurez ces politiques dans Nextcloud :
# Interdire les liens publics sans mot de passe
podman exec -u www-data nextcloud php occ config:app:set core \
shareapi_enforce_links_password --value="yes"
# Expiration par defaut des partages par lien
podman exec -u www-data nextcloud php occ config:app:set core \
shareapi_default_expire_date --value="yes"
podman exec -u www-data nextcloud php occ config:app:set core \
shareapi_expire_after_n_days --value="7"
# Desactiver le partage avec des groupes non autorises
podman exec -u www-data nextcloud php occ config:app:set core \
shareapi_only_share_with_group_members --value="yes"