Ajoute info watcher
Signed-off-by: Gato <cedric@goutailler-olivier.fr>
+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 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.
|
||||
|
||||
+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
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
Reference in New Issue
Block a user