# đ Gesthub
> **Version v2 (août 2026).** Le code a été réorganisé en architecture par
> couches (`routes/`, `services/`, `models/`), avec les modules Annonces,
> Fichiers et Planning, une table `audit_log`, et une suite de 34 tests
> automatisés (voir `web/tests/`). Cette version sert de support technique
> au dossier de certification RNCP 36463 (CDAN) : voir `docs/` pour le
> dossier technique complet (`docs/Dossier_technique_GestHub_v2.docx`) et
> les preuves réelles (`docs/evidence/` : sorties pytest/flake8/radon,
> captures d'écran, schémas d'architecture).
>
> Démarrage rapide :
> ```bash
> cp web/.env.example web/.env # renseigner les vraies valeurs
> docker compose up -d --build
> ```
> Lancer les tests (nécessite une base MariaDB de test accessible, voir
> `web/tests/conftest.py`) :
> ```bash
> cd web && pip install -r requirements.txt
> TEST_DB_NAME=gesthub_test DB_USER=... DB_PASSWORD=... DB_HOST=... pytest tests/ -v
> ```
Construit avec les outils et les technologies nécessaires :
## đ§± Objectif
Créer un site web multi-services (extranet/intranet) avec :
- Authentification centralisée via **Keycloak**
- Reverse proxy **Caddy**
- Frontend/backend **Flask**
- Chat & Gestion de tĂąches via **Mattermost**
- Gestion dâannonces via JSON avec droits `/admin` (a faire)
---
## đł DĂ©marrage du projet
### 1. **Structure Docker**
Les services sont définis dans `docker-compose.yml` :
- `caddy`: Reverse proxy + HTTPS automatique
- `flask`: Application web backend
- `mariadb`: Base de données
- `keycloak`: SSO + gestion utilisateurs
- `mattermost`: Chat et gestion de tĂąches (type Trello)
Réseau utilisé : `gesthub_gesthub`
---
## đ Authentification Keycloak
### â
Ătapes :
1. Création du **realm `Gesthub`**
2. Ajout des clients (Flask et Mattermost)
3. Activation `OpenID Connect`
4. Configuration des **Redirect URIs**
- Exemples :
- Flask â `https://dashboard.ninolbt.com/login/callback`
- Mattermost â `https://mattermost.ninolbt.com/signup/openid/complete`
5. Pour les utilisateurs `/admin`, on utilise le **groupe `/admin`** dans Keycloak.
---
## đ DĂ©ploiement sur Raspberry Pi (ARM64)
GestHub v2 est prévu pour tourner sur un Raspberry Pi (4 ou 5) avec un OS
**64 bits** (Raspberry Pi OS 64-bit / Ubuntu Server 64-bit). Vérifier avant
tout :
```bash
uname -m # doit afficher aarch64 (sinon : réinstaller l'OS en 64-bit)
docker --version # installer via https://get.docker.com si absent
```
Toutes les images de `docker-compose.yml` sont des images officielles
multi-arch (Caddy, MariaDB, Postgres, Keycloak) â Docker sĂ©lectionne
automatiquement la variante arm64 au `pull`, rien Ă changer. Seule
exception : `mattermost/mattermost-team-edition` n'est publiée qu'en
`linux/amd64` (pas d'image ARM officielle Ă ce jour â voir
[mattermost/mattermost#21979](https://github.com/mattermost/mattermost/issues/21979)).
Le compose utilise donc un build communautaire équivalent,
`ngrie/mattermost-team-edition-arm`, Ă la mĂȘme version â voir le
commentaire dans `docker-compose.yml`. Sur un hĂŽte amd64 (CI, poste de dev),
repasser Ă l'image officielle `mattermost/mattermost-team-edition:9.11`.
**RAM** : la stack complĂšte (Caddy + Flask + MariaDB + Keycloak + 2ĂPostgres
+ Mattermost) tourne simultanĂ©ment â prĂ©voir un Pi avec **4 Go de RAM
minimum, 8 Go conseillés**, et un stockage sur SSD/carte SD rapide (les
volumes MariaDB/Postgres sont sensibles aux I/O lentes d'une carte SD
classique).
---
## đ Reverse Proxy Caddy
### đ ïž `Caddyfile` :
```caddyfile
https://dashboard.ninolbt.com {
reverse_proxy flask:5000
}
https://keycloak.ninolbt.com {
reverse_proxy keycloak:8080
}
https://mattermost.ninolbt.com {
reverse_proxy mattermost:8065
}
```
**Volumes persistants** :
`caddy_data` et `caddy_config` montés dans `/data` et `/config`
---
## đ§© Flask
- back du dashboard
- Permet la crĂ©ation/modification/suppression dâannonces en JSON (en test)
- Accessible uniquement pour les utilisateurs avec le rĂŽle `/admin` (via token) (en test)
- Chargement des assets statiques corrigé avec Caddy
---
## đïž Gestion des droits
- Auth via Keycloak pour Flask, Mattermost, Wekan
- Vérification des groupes dans Flask (`/admin`)
- Redirections correctes avec URLs HTTPS Caddy
---
## đ Bugs et corrections
- â ïž Redirection Keycloak incorrecte â CorrigĂ© avec bon `redirect_uri`
- â ïž Assets statiques Flask â corrigĂ© via URL absolue en HTTPS
- â
Reverse proxy fonctionne avec tous les services
- â
HTTPS opérationnel via Caddy avec certificats Let's Encrypt
---
## đ DĂ©marrage
```bash
docker compose up --build -d
```
Si besoin :
```bash
docker compose logs -f [service]
```
---
## đ€ Export complet
Pour rendre le projet exportable :
- Tout est containerisé (Docker)
- Config Keycloak exporté (JSON disponible dans le dossier `export_keycloak`)
- `docker-compose.yml`, `Caddyfile`, fichier disponible dans le repo