Aller au contenu

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 :

podman exec -u www-data nextcloud php occ app:install 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 :

podman exec -u www-data nextcloud php occ app:install 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

  1. Dans Mattermost, allez dans Integrations > Incoming Webhooks
  2. Creez un webhook pour le canal #dev :
    • Display Name : Gitea
    • Description : Notifications Gitea
    • Channel : dev
  3. 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 :

  1. Ouvrir l'app et entrer https://cloud.example.com
  2. L'app redirige vers Keycloak pour le SSO
  3. 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 :

  1. Ouvrir l'app et entrer https://chat.example.com
  2. Choisir "Se connecter avec Keycloak"
  3. 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"