diff --git a/Home.md b/Home.md index 5d08b7b..9bf8e45 100644 --- a/Home.md +++ b/Home.md @@ -1 +1,37 @@ -Welcome to the Wiki. \ No newline at end of file +# 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) diff --git a/Installation-Developpement.md b/Installation-Developpement.md new file mode 100644 index 0000000..54905af --- /dev/null +++ b/Installation-Developpement.md @@ -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 +``` + +--- + +## 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. diff --git a/Installation-Production.md b/Installation-Production.md new file mode 100644 index 0000000..d3fa0be --- /dev/null +++ b/Installation-Production.md @@ -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=" > .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 --tail 50 -f + +# Certificats TLS Traefik +docker logs traefik 2>&1 | grep -i "certificate\|acme" +```