init doc installation
+37
-1
@@ -1 +1,37 @@
|
|||||||
Welcome to the Wiki.
|
# Infrastructure — Vue d'ensemble
|
||||||
|
|
||||||
|
Ce dépôt contient toutes les configurations Docker Compose de l'infrastructure auto-hébergée.
|
||||||
|
|
||||||
|
## Architecture
|
||||||
|
|
||||||
|
```
|
||||||
|
Internet
|
||||||
|
│
|
||||||
|
▼
|
||||||
|
Traefik (reverse proxy, TLS Let's Encrypt)
|
||||||
|
│
|
||||||
|
├── 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)
|
||||||
|
├── cloud.goutailler-olivier.com → Nextcloud
|
||||||
|
└── notes.goutailler-olivier.com → Trilium
|
||||||
|
```
|
||||||
|
|
||||||
|
## Services
|
||||||
|
|
||||||
|
| Service | Dossier | URL |
|
||||||
|
|---|---|---|
|
||||||
|
| Traefik | `traefik/` | `traefik.goutailler-olivier.com` |
|
||||||
|
| Gitea | `gitea/` | `git.goutailler-olivier.com` |
|
||||||
|
| Keycloak | `keycloak/` | `auth.goutailler-olivier.com` |
|
||||||
|
| Bonsai API | `bonsai-api/` | `bonsai.goutailler-olivier.com/api` |
|
||||||
|
| Bonsai Webapp | `bonsai-webapp/` | `bonsai.goutailler-olivier.com` |
|
||||||
|
| Nextcloud | `nextcloud/` | `cloud.goutailler-olivier.com` |
|
||||||
|
| Trilium | `trilium/` | `notes.goutailler-olivier.com` |
|
||||||
|
|
||||||
|
## Pages
|
||||||
|
|
||||||
|
- [Installation Production](Installation-Production)
|
||||||
|
- [Installation Développement](Installation-Developpement)
|
||||||
|
|||||||
@@ -0,0 +1,150 @@
|
|||||||
|
# Installation Développement
|
||||||
|
|
||||||
|
Cette page décrit comment démarrer l'environnement de développement local pour le projet **Bonsai API**.
|
||||||
|
|
||||||
|
## Prérequis
|
||||||
|
|
||||||
|
| Outil | Version minimale |
|
||||||
|
|---|---|
|
||||||
|
| Java JDK | 25 |
|
||||||
|
| Docker + Docker Compose | 24+ |
|
||||||
|
| Gradle | 8+ (wrapper inclus dans le dépôt) |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Cloner le dépôt
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git clone https://git.goutailler-olivier.com/bonsai/bonsai-api.git
|
||||||
|
cd bonsai-api
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Option A — Hot-reload avec Docker Compose (recommandé)
|
||||||
|
|
||||||
|
Cette option monte les sources depuis l'hôte dans le conteneur. Gradle détecte les changements et relance automatiquement l'application.
|
||||||
|
|
||||||
|
```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
|
||||||
|
```
|
||||||
|
|
||||||
|
Flyway applique automatiquement la migration `V1__init.sql` au premier démarrage.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Variables d'environnement
|
||||||
|
|
||||||
|
En développement, les valeurs par défaut sont utilisées automatiquement (définies dans `src/main/resources/application.yml`). Aucun `.env` n'est nécessaire.
|
||||||
|
|
||||||
|
| Variable | Valeur locale | Description |
|
||||||
|
|---|---|---|
|
||||||
|
| `DATASOURCE_URL` | `jdbc:postgresql://localhost:5432/bonsai` | URL JDBC |
|
||||||
|
| `DATASOURCE_USERNAME` | `bonsai` | Utilisateur PostgreSQL |
|
||||||
|
| `DATASOURCE_PASSWORD` | `bonsai` | Mot de passe PostgreSQL |
|
||||||
|
| `KEYCLOAK_JWKS_URI` | `https://auth.goutailler-olivier.com/realms/bonsai/protocol/openid-connect/certs` | Endpoint JWKS |
|
||||||
|
| `CORS_ALLOWED_ORIGIN_PROD` | `https://bonsai.goutailler-olivier.com` | Origine CORS de prod |
|
||||||
|
|
||||||
|
L'origine `http://localhost:4200` est toujours autorisée en CORS (front Angular en dev).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Documentation de l'API
|
||||||
|
|
||||||
|
Swagger UI est disponible à l'adresse suivante une fois l'API démarrée :
|
||||||
|
|
||||||
|
```
|
||||||
|
http://localhost:8080/swagger-ui.html
|
||||||
|
```
|
||||||
|
|
||||||
|
La spécification OpenAPI (JSON) est accessible sur :
|
||||||
|
|
||||||
|
```
|
||||||
|
http://localhost:8080/v3/api-docs
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Lancer les tests
|
||||||
|
|
||||||
|
```bash
|
||||||
|
./gradlew test
|
||||||
|
```
|
||||||
|
|
||||||
|
Le rapport HTML est généré dans `build/reports/tests/test/index.html`.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Structure du projet
|
||||||
|
|
||||||
|
```
|
||||||
|
src/main/java/fr/bonsai/api/
|
||||||
|
├── domain/model/ # Entités métier (sans dépendance Spring)
|
||||||
|
├── application/
|
||||||
|
│ ├── port/in/ # Interfaces des use cases
|
||||||
|
│ ├── port/out/ # Interface du repository
|
||||||
|
│ └── usecase/ # Logique métier (IssueService)
|
||||||
|
├── adapter/
|
||||||
|
│ ├── in/web/ # Controllers REST et DTOs
|
||||||
|
│ └── out/persistence/ # Entités JPA et adaptateur repository
|
||||||
|
└── config/ # Configuration Spring (Security, CORS, Beans)
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Sécurité
|
||||||
|
|
||||||
|
Toutes les routes nécessitent un token JWT Bearer valide émis par Keycloak :
|
||||||
|
|
||||||
|
- **Realm** : `bonsai`
|
||||||
|
- **Client** : `bonsai-webapp`
|
||||||
|
- **Issuer** : `https://auth.goutailler-olivier.com/realms/bonsai`
|
||||||
|
|
||||||
|
Pour tester sans Keycloak local, utiliser l'instance de production comme fournisseur JWKS (valeur par défaut).
|
||||||
|
|
||||||
|
```http
|
||||||
|
Authorization: Bearer <token>
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Endpoints disponibles
|
||||||
|
|
||||||
|
| Méthode | Route | Description |
|
||||||
|
|---|---|---|
|
||||||
|
| `GET` | `/issues` | Liste toutes les issues |
|
||||||
|
| `POST` | `/issues` | Crée une issue |
|
||||||
|
| `PUT` | `/issues/{id}` | Remplace une issue |
|
||||||
|
| `DELETE` | `/issues/{id}` | Supprime une issue (204) |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## CI/CD
|
||||||
|
|
||||||
|
Le pipeline Gitea Actions (`.gitea/workflows/`) construit l'image Docker et la pousse sur le registre interne à chaque push sur `main`. Le runner `ubuntu-latest` est fourni par le conteneur `act_runner` de la stack Gitea.
|
||||||
@@ -0,0 +1,176 @@
|
|||||||
|
# Installation Production
|
||||||
|
|
||||||
|
## Prérequis
|
||||||
|
|
||||||
|
- Serveur Linux avec Docker 24+ et Docker Compose V2
|
||||||
|
- Domaine DNS pointant vers le serveur (`goutailler-olivier.com`)
|
||||||
|
- Ports **80**, **443** et **2222** ouverts en entrée
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 1. Réseau Docker partagé
|
||||||
|
|
||||||
|
Tous les services communiquent via un réseau externe `proxy`. À créer une seule fois :
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker network create proxy
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2. Traefik
|
||||||
|
|
||||||
|
Traefik est le point d'entrée unique : il gère le TLS (Let's Encrypt) et route les requêtes vers chaque service.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd traefik/
|
||||||
|
docker compose up -d
|
||||||
|
```
|
||||||
|
|
||||||
|
Le dashboard est exposé sur `https://traefik.goutailler-olivier.com` (accès restreint par défaut).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 3. Keycloak
|
||||||
|
|
||||||
|
Keycloak gère l'authentification SSO pour toute l'infrastructure.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd keycloak/
|
||||||
|
cp .env.example .env
|
||||||
|
# Éditer .env avec des mots de passe sécurisés
|
||||||
|
docker compose up -d
|
||||||
|
```
|
||||||
|
|
||||||
|
Variables à définir dans `.env` :
|
||||||
|
|
||||||
|
| Variable | Description |
|
||||||
|
|---|---|
|
||||||
|
| `POSTGRES_PASSWORD` | Mot de passe de la base PostgreSQL |
|
||||||
|
| `KEYCLOAK_ADMIN` | Login administrateur (défaut : `admin`) |
|
||||||
|
| `KEYCLOAK_ADMIN_PASSWORD` | Mot de passe administrateur |
|
||||||
|
|
||||||
|
**Configuration post-démarrage :**
|
||||||
|
|
||||||
|
1. Se connecter à `https://auth.goutailler-olivier.com/admin`
|
||||||
|
2. Créer le realm `bonsai`
|
||||||
|
3. Créer le client `bonsai-webapp` (type *OpenID Connect*, flux *Authorization Code*)
|
||||||
|
4. Configurer les *Valid redirect URIs* : `https://bonsai.goutailler-olivier.com/*`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 4. Gitea
|
||||||
|
|
||||||
|
Gitea est la forge Git avec le runner CI/CD intégré.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd gitea/
|
||||||
|
docker compose -f gitea-compose.yml up -d
|
||||||
|
```
|
||||||
|
|
||||||
|
**Configuration post-démarrage :**
|
||||||
|
|
||||||
|
1. Accéder à `https://git.goutailler-olivier.com` et terminer l'installation via l'interface web
|
||||||
|
2. Créer l'organisation `bonsai`
|
||||||
|
3. Récupérer un token d'enregistrement pour le runner dans *Administration → Actions → Runners*
|
||||||
|
4. Mettre à jour `GITEA_RUNNER_REGISTRATION_TOKEN` dans `gitea-compose.yml`, puis redémarrer le service `act_runner`
|
||||||
|
|
||||||
|
Le runner est configuré avec le label `ubuntu-latest` mappé sur `ubuntu:22.04`.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 5. Bonsai API
|
||||||
|
|
||||||
|
L'image est construite par la CI Gitea et poussée sur le registre `git.goutailler-olivier.com/bonsai/bonsai-api:latest`.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd bonsai-api/
|
||||||
|
# Créer un fichier .env avec le mot de passe PostgreSQL
|
||||||
|
echo "POSTGRES_PASSWORD=<mot_de_passe_sécurisé>" > .env
|
||||||
|
docker compose up -d
|
||||||
|
```
|
||||||
|
|
||||||
|
Variables d'environnement :
|
||||||
|
|
||||||
|
| Variable | Description |
|
||||||
|
|---|---|
|
||||||
|
| `POSTGRES_PASSWORD` | Mot de passe PostgreSQL (injecté via `.env`) |
|
||||||
|
| `DATASOURCE_URL` | `jdbc:postgresql://db:5432/bonsai` (défaut réseau interne) |
|
||||||
|
| `KEYCLOAK_JWKS_URI` | `https://auth.goutailler-olivier.com/realms/bonsai/protocol/openid-connect/certs` |
|
||||||
|
| `CORS_ALLOWED_ORIGIN_PROD` | `https://bonsai.goutailler-olivier.com` |
|
||||||
|
|
||||||
|
Flyway applique automatiquement les migrations SQL au démarrage.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 6. Bonsai Webapp
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd bonsai-webapp/
|
||||||
|
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.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 7. Nextcloud
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd nextcloud/
|
||||||
|
# Adapter les mots de passe dans docker-compose.yml avant le premier démarrage
|
||||||
|
docker compose up -d
|
||||||
|
```
|
||||||
|
|
||||||
|
Variables à personnaliser dans `docker-compose.yml` avant le premier lancement :
|
||||||
|
|
||||||
|
| Variable | Description |
|
||||||
|
|---|---|
|
||||||
|
| `POSTGRES_PASSWORD` | Mot de passe PostgreSQL |
|
||||||
|
| `NEXTCLOUD_ADMIN_USER` | Compte administrateur Nextcloud |
|
||||||
|
| `NEXTCLOUD_ADMIN_PASSWORD` | Mot de passe administrateur |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 8. Trilium
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd trilium/
|
||||||
|
docker compose up -d
|
||||||
|
```
|
||||||
|
|
||||||
|
Les données sont persistées dans `/home/gato/Applications/Trilium/data` sur l'hôte. S'assurer que ce chemin existe avant le démarrage :
|
||||||
|
|
||||||
|
```bash
|
||||||
|
mkdir -p /home/gato/Applications/Trilium/data
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 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. Nextcloud
|
||||||
|
8. Trilium
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Vérifications
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# État de tous les conteneurs
|
||||||
|
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"
|
||||||
|
|
||||||
|
# Logs d'un service
|
||||||
|
docker logs <nom_conteneur> --tail 50 -f
|
||||||
|
|
||||||
|
# Certificats TLS Traefik
|
||||||
|
docker logs traefik 2>&1 | grep -i "certificate\|acme"
|
||||||
|
```
|
||||||
Reference in New Issue
Block a user