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 # 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 ## 2026-06-06 — Ajout du projet Olhar
- `Home.md` — ajout de Olhar dans l'architecture et le tableau des services - `Home.md` — ajout de Olhar dans l'architecture et le tableau des services
+3 -1
@@ -18,7 +18,8 @@ Internet
├── luz.goutailler-olivier.com → Luz (front-end Angular) ├── luz.goutailler-olivier.com → Luz (front-end Angular)
├── cloud.goutailler-olivier.com → Nextcloud ├── cloud.goutailler-olivier.com → Nextcloud
├── notes.goutailler-olivier.com → Trilium ├── notes.goutailler-olivier.com → Trilium
── olhar.goutailler-olivier.com → Olhar ── olhar.goutailler-olivier.com → Olhar
└── watchtower.goutailler-olivier.com → Watchtower (mises à jour automatiques)
``` ```
## Services ## Services
@@ -34,6 +35,7 @@ Internet
| Nextcloud | `nextcloud/` | `cloud.goutailler-olivier.com` | | Nextcloud | `nextcloud/` | `cloud.goutailler-olivier.com` |
| Trilium | `trilium/` | `notes.goutailler-olivier.com` | | Trilium | `trilium/` | `notes.goutailler-olivier.com` |
| Olhar | `olhar/` | `olhar.goutailler-olivier.com` | | Olhar | `olhar/` | `olhar.goutailler-olivier.com` |
| Watchtower | `watchtower/` | `watchtower.goutailler-olivier.com` |
## Pages ## Pages
+63 -35
@@ -1,58 +1,86 @@
# Installation Développement # 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 ## Prérequis
| Outil | Version minimale | | Outil | Version minimale |
|---|---| |---|---|
| Java JDK | 25 | | Podman | 5+ |
| Docker + Docker Compose | 24+ | | podman-compose | 1+ |
| Gradle | 8+ (wrapper inclus dans le dépôt) |
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 ```bash
git clone https://git.goutailler-olivier.com/bonsai/bonsai-api.git 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 ```bash
docker compose -f docker-compose.dev.yml up --build podman-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
``` ```
Flyway applique automatiquement la migration `V1__init.sql` au premier démarrage. Flyway applique automatiquement la migration `V1__init.sql` au premier démarrage.
+55 -4
@@ -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. 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 ## 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. 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 | | Secret | Description |
|---|---| |---|---|
| `RELEASE_TOKEN` | Token Gitea avec droits `write:packages` et `write:repository` | | `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. 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 | | Secret | Description |
|---|---| |---|---|
| `RELEASE_TOKEN` | Token Gitea avec droits `write:packages` et `write:repository` | | `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,6 +207,49 @@ 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é ## Ordre de démarrage recommandé
``` ```
@@ -213,6 +263,7 @@ mkdir -p /home/gato/Applications/Trilium/data
8. Olhar 8. Olhar
9. Nextcloud 9. Nextcloud
10. Trilium 10. Trilium
11. Watchtower
``` ```
--- ---