diff --git a/Changelog.md b/Changelog.md index 82a08ce..f721cb8 100644 --- a/Changelog.md +++ b/Changelog.md @@ -1,5 +1,10 @@ # Changelog +## 2026-06-07 — Ajout de Watchtower et documentation du WATCHTOWER_TOKEN + +- `Home.md` — ajout de Watchtower dans l'architecture et le tableau des services +- `Installation-Production.md` — section 11 Watchtower : génération du token, configuration `.env` serveur, secrets Gitea au niveau organisation ; mise à jour des sections Luz, Olhar et Bonsai-webapp pour préciser que `WATCHTOWER_TOKEN` est configuré au niveau organisation (pas au niveau dépôt) + ## 2026-06-06 — Ajout du projet Olhar - `Home.md` — ajout de Olhar dans l'architecture et le tableau des services diff --git a/Home.md b/Home.md index 2a0c26c..1c1455f 100644 --- a/Home.md +++ b/Home.md @@ -10,15 +10,16 @@ Internet ▼ Traefik (reverse proxy, TLS Let's Encrypt) │ - ├── git.goutailler-olivier.com → Gitea (forge + CI/CD) - ├── auth.goutailler-olivier.com → Keycloak (SSO / OAuth2) + ├── git.goutailler-olivier.com → Gitea (forge + CI/CD) + ├── auth.goutailler-olivier.com → Keycloak (SSO / OAuth2) ├── bonsai.goutailler-olivier.com │ ├── /api → Bonsai API (Spring Boot) │ └── / → Bonsai Webapp (front-end) - ├── luz.goutailler-olivier.com → Luz (front-end Angular) - ├── cloud.goutailler-olivier.com → Nextcloud - ├── notes.goutailler-olivier.com → Trilium - └── olhar.goutailler-olivier.com → Olhar + ├── luz.goutailler-olivier.com → Luz (front-end Angular) + ├── cloud.goutailler-olivier.com → Nextcloud + ├── notes.goutailler-olivier.com → Trilium + ├── olhar.goutailler-olivier.com → Olhar + └── watchtower.goutailler-olivier.com → Watchtower (mises à jour automatiques) ``` ## Services @@ -34,6 +35,7 @@ Internet | Nextcloud | `nextcloud/` | `cloud.goutailler-olivier.com` | | Trilium | `trilium/` | `notes.goutailler-olivier.com` | | Olhar | `olhar/` | `olhar.goutailler-olivier.com` | +| Watchtower | `watchtower/` | `watchtower.goutailler-olivier.com` | ## Pages diff --git a/Installation-Developpement.md b/Installation-Developpement.md index 54905af..5020253 100644 --- a/Installation-Developpement.md +++ b/Installation-Developpement.md @@ -1,58 +1,86 @@ # Installation Développement -Cette page décrit comment démarrer l'environnement de développement local pour le projet **Bonsai API**. +Cette page décrit comment démarrer l'environnement de développement local pour les projets **Bonsai API** et **Bonsai Webapp**. ## Prérequis | Outil | Version minimale | |---|---| -| Java JDK | 25 | -| Docker + Docker Compose | 24+ | -| Gradle | 8+ (wrapper inclus dans le dépôt) | +| Podman | 5+ | +| podman-compose | 1+ | + +Aucun Java ni Node.js à installer sur le poste : tout tourne dans des conteneurs. --- -## Cloner le dépôt +## Cloner les dépôts ```bash git clone https://git.goutailler-olivier.com/bonsai/bonsai-api.git -cd bonsai-api +git clone https://git.goutailler-olivier.com/bonsai/bonsai-webapp.git +``` + +Les deux dépôts doivent être côte à côte dans le même dossier parent (ex. `IdeaProjects/`). Le `docker-compose.dev.yml` et le script `dev.sh` se trouvent dans ce dossier parent. + +--- + +## Option A — Lancer l'API (recommandé) + +Depuis `Bonsai-api/` : + +```bash +./dev.sh +``` + +- API Spring Boot : `http://localhost:8080` +- PostgreSQL : `localhost:5432` +- Swagger UI : `http://localhost:8080/swagger-ui.html` + +### Stratégie de cache — API + +| Volume | Contenu | Mécanisme | +|---|---|---| +| `gradle_home` | Dépendances Gradle (`~/.gradle`) | Téléchargement uniquement si une nouvelle dépendance apparaît | +| `gradle_build` | Artefacts de build | Évite les recompilations complètes | + +--- + +## Option B — Lancer le frontend + +Depuis `Bonsai-webapp/` (l'API doit être démarrée au préalable) : + +```bash +./dev.sh +``` + +- Frontend Angular : `http://localhost:4200` + +Le proxy Angular redirige `/api` vers `http://host.containers.internal:8080` (l'API sur le poste hôte). + +### Stratégie de cache — Webapp + +| Volume | Contenu | Mécanisme | +|---|---|---| +| `webapp_node_modules` | node_modules Angular | Initialisé depuis l'image ; l'entrypoint détecte les changements de `package.json` via SHA-256 et relance `npm ci` automatiquement | +| `npm_cache` | Cache téléchargements npm (`~/.npm`) | Accélère les `npm ci` déclenchés par un changement de `package.json` | + +### Reconstruction forcée + +Si les dépendances ne se mettent pas à jour correctement : + +```bash +./dev.sh down -v # supprime aussi les volumes de cache +./dev.sh # reconstruit l'image et recrée les volumes ``` --- -## Option A — Hot-reload avec Docker Compose (recommandé) +## Option C — API seule sans webapp (Gradle local + PostgreSQL Docker) -Cette option monte les sources depuis l'hôte dans le conteneur. Gradle détecte les changements et relance automatiquement l'application. +Depuis le dossier `Bonsai-api/`, démarrer uniquement la base de données + l'API : ```bash -docker compose -f docker-compose.dev.yml up --build -``` - -- L'API est disponible sur `http://localhost:8080` -- PostgreSQL est disponible sur `localhost:5432` -- Le cache Gradle est conservé dans un volume dédié (`gradle_home`) : le premier build télécharge les dépendances, les suivants sont rapides - -Pour arrêter et tout supprimer (y compris les volumes) : - -```bash -docker compose -f docker-compose.dev.yml down -v -``` - ---- - -## Option B — Gradle en local + PostgreSQL Docker - -Démarrer uniquement la base de données : - -```bash -docker compose up db -d -``` - -Lancer l'API avec le wrapper Gradle : - -```bash -./gradlew bootRun +podman-compose -f docker-compose.dev.yml up --build ``` Flyway applique automatiquement la migration `V1__init.sql` au premier démarrage. diff --git a/Installation-Production.md b/Installation-Production.md index 9d8244b..81040dc 100644 --- a/Installation-Production.md +++ b/Installation-Production.md @@ -129,6 +129,13 @@ docker compose up -d L'image `git.goutailler-olivier.com/bonsai/bonsai-webapp:latest` est également construite par la CI. Aucune variable d'environnement spécifique n'est requise. +**Secrets Gitea à configurer au niveau de l'organisation `bonsai` :** + +| Secret | Description | +|---|---| +| `RELEASE_TOKEN` | Token Gitea avec droits `write:packages` et `write:repository` | +| `WATCHTOWER_TOKEN` | Token HTTP de l'API Watchtower pour déclencher le redéploiement (voir section 11) | + --- ## 7. Luz @@ -140,12 +147,12 @@ docker compose up -d L'image `git.goutailler-olivier.com/gato/luz:latest` est construite par la CI Gitea lors d'une release. Aucune variable d'environnement spécifique n'est requise. -**Secrets Gitea à configurer dans le dépôt Luz :** +**Secrets Gitea à configurer au niveau de l'organisation `gato` :** | Secret | Description | |---|---| | `RELEASE_TOKEN` | Token Gitea avec droits `write:packages` et `write:repository` | -| `WATCHTOWER_TOKEN` | Token HTTP de l'API Watchtower pour déclencher le redéploiement | +| `WATCHTOWER_TOKEN` | Token HTTP de l'API Watchtower pour déclencher le redéploiement (voir section 11) | --- @@ -158,12 +165,12 @@ docker compose up -d L'image `git.goutailler-olivier.com/gato/olhar:latest` est construite par la CI Gitea lors d'une release. Aucune variable d'environnement spécifique n'est requise. -**Secrets Gitea à configurer dans le dépôt Olhar :** +**Secrets Gitea à configurer au niveau de l'organisation `gato` :** | Secret | Description | |---|---| | `RELEASE_TOKEN` | Token Gitea avec droits `write:packages` et `write:repository` | -| `WATCHTOWER_TOKEN` | Token HTTP de l'API Watchtower pour déclencher le redéploiement | +| `WATCHTOWER_TOKEN` | Token HTTP de l'API Watchtower pour déclencher le redéploiement (voir section 11) | --- @@ -200,19 +207,63 @@ mkdir -p /home/gato/Applications/Trilium/data --- +## 11. Watchtower + +Watchtower surveille les conteneurs Docker et les redémarre automatiquement lorsqu'une nouvelle image est disponible. Il est déclenché par les pipelines CI/CD via son API HTTP sécurisée par un token. + +### Génération du token + +Générer une valeur aléatoire forte : + +```bash +openssl rand -hex 32 +``` + +Conserver cette valeur — elle sera utilisée dans les deux étapes suivantes. + +### Configuration sur le serveur + +```bash +cd watchtower/ +cp .env.example .env +# Remplacer la valeur par le token généré +echo "WATCHTOWER_TOKEN=" > .env +docker compose up -d +``` + +Variable requise dans `.env` : + +| Variable | Description | +|---|---| +| `WATCHTOWER_TOKEN` | Token secret pour l'API HTTP de Watchtower | + +### Secrets Gitea à configurer + +Le même token doit être ajouté comme secret `WATCHTOWER_TOKEN` dans les paramètres de chaque organisation Gitea. Les dépôts héritent automatiquement des secrets de leur organisation — aucune configuration par dépôt n'est nécessaire. + +| Organisation | Chemin dans Gitea | Dépôts concernés | +|---|---|---| +| `gato` | Settings → Secrets → New Secret | Luz, Olhar | +| `bonsai` | Settings → Secrets → New Secret | Bonsai-webapp | + +> **Important :** la valeur du secret Gitea doit être identique à celle définie dans le `.env` serveur. + +--- + ## Ordre de démarrage recommandé ``` -1. Réseau proxy (une seule fois) -2. Traefik -3. Keycloak -4. Gitea -5. Bonsai API -6. Bonsai Webapp -7. Luz -8. Olhar -9. Nextcloud +1. Réseau proxy (une seule fois) +2. Traefik +3. Keycloak +4. Gitea +5. Bonsai API +6. Bonsai Webapp +7. Luz +8. Olhar +9. Nextcloud 10. Trilium +11. Watchtower ``` ---