Ajoute info watcher

Signed-off-by: Gato <cedric@goutailler-olivier.fr>
2026-06-07 06:34:15 +02:00
parent eea4f1b0d9
commit 1c7b641fca
4 changed files with 140 additions and 54 deletions
+5
@@ -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
+8 -6
@@ -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
+63 -35
@@ -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 AHot-reload avec Docker Compose (recommandé)
## Option CAPI 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.
+64 -13
@@ -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=<token_généré>" > .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
```
---