Ajoute info watcher
Signed-off-by: Gato <cedric@goutailler-olivier.fr>
+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
|
||||||
|
|||||||
+8
-6
@@ -10,15 +10,16 @@ Internet
|
|||||||
▼
|
▼
|
||||||
Traefik (reverse proxy, TLS Let's Encrypt)
|
Traefik (reverse proxy, TLS Let's Encrypt)
|
||||||
│
|
│
|
||||||
├── git.goutailler-olivier.com → Gitea (forge + CI/CD)
|
├── git.goutailler-olivier.com → Gitea (forge + CI/CD)
|
||||||
├── auth.goutailler-olivier.com → Keycloak (SSO / OAuth2)
|
├── auth.goutailler-olivier.com → Keycloak (SSO / OAuth2)
|
||||||
├── bonsai.goutailler-olivier.com
|
├── bonsai.goutailler-olivier.com
|
||||||
│ ├── /api → Bonsai API (Spring Boot)
|
│ ├── /api → Bonsai API (Spring Boot)
|
||||||
│ └── / → Bonsai Webapp (front-end)
|
│ └── / → Bonsai Webapp (front-end)
|
||||||
├── 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 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
|
```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.
|
||||||
|
|||||||
+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.
|
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,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é
|
## Ordre de démarrage recommandé
|
||||||
|
|
||||||
```
|
```
|
||||||
1. Réseau proxy (une seule fois)
|
1. Réseau proxy (une seule fois)
|
||||||
2. Traefik
|
2. Traefik
|
||||||
3. Keycloak
|
3. Keycloak
|
||||||
4. Gitea
|
4. Gitea
|
||||||
5. Bonsai API
|
5. Bonsai API
|
||||||
6. Bonsai Webapp
|
6. Bonsai Webapp
|
||||||
7. Luz
|
7. Luz
|
||||||
8. Olhar
|
8. Olhar
|
||||||
9. Nextcloud
|
9. Nextcloud
|
||||||
10. Trilium
|
10. Trilium
|
||||||
|
11. Watchtower
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|||||||
Reference in New Issue
Block a user