Files
gesthub/README.md
2026-08-21 09:12:02 +02:00

181 lines
6.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 📘 Gesthub
<img src="https://img.shields.io/github/last-commit/M1n-0/gesthub?style=flat&logo=git&logoColor=white&color=0080ff" alt="last-commit">
<p align="right">
<a href="README.en.md"><img src="https://img.shields.io/badge/README-English-blue?style=flat&logo=readthedocs&logoColor=white" alt="English README"></a>
</p>
> **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
> ```
<em>Construit avec les outils et les technologies nécessaires :</em>
<div style="display: flex; flex-wrap: wrap; gap: 5px;">
<img src="https://img.shields.io/badge/Flask-000000.svg?style=flat&logo=Flask&logoColor=white" alt="Flask">
<img src="https://img.shields.io/badge/JSON-000000.svg?style=flat&logo=JSON&logoColor=white" alt="JSON">
<img src="https://img.shields.io/badge/Keycloak-4D4D4D.svg?style=flat&logo=Keycloak&logoColor=white" alt="Keycloak">
<img src="https://img.shields.io/badge/GNU%20Bash-4EAA25.svg?style=flat&logo=GNU-Bash&logoColor=white" alt="GNU%20Bash">
<img src="https://img.shields.io/badge/MariaDB-003545.svg?style=flat&logo=MariaDB&logoColor=white" alt="MariaDB">
<br>
<img src="https://img.shields.io/badge/Docker-2496ED.svg?style=flat&logo=Docker&logoColor=white" alt="Docker">
<img src="https://img.shields.io/badge/Python-3776AB.svg?style=flat&logo=Python&logoColor=white" alt="Python">
<img src="https://img.shields.io/badge/Mattermost-0058CC.svg?style=flat&logo=Mattermost&logoColor=white" alt="Mattermost">
</div>
## 🧱 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 dannonces 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 dannonces 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