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 :
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.
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.
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 :
- Se connecter à
https://auth.goutailler-olivier.com/admin - Créer le realm
bonsai - Créer le client
bonsai-webapp(type OpenID Connect, flux Authorization Code) - Configurer les Valid redirect URIs :
https://bonsai.goutailler-olivier.com/*
4. Gitea
Gitea est la forge Git avec le runner CI/CD intégré.
cd gitea/
docker compose -f gitea-compose.yml up -d
Configuration post-démarrage :
- Accéder à
https://git.goutailler-olivier.comet terminer l'installation via l'interface web - Créer l'organisation
bonsai - Récupérer un token d'enregistrement pour le runner dans Administration → Actions → Runners
- Mettre à jour
GITEA_RUNNER_REGISTRATION_TOKENdansgitea-compose.yml, puis redémarrer le serviceact_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.
Le registre Gitea requiert une authentification. Se connecter une première fois avec son compte Gitea :
docker login git.goutailler-olivier.com -u <utilisateur>
Note : par défaut, Docker stocke le mot de passe en clair dans
~/.docker/config.json. Pour éviter cela, configurer un credential helper.
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.
Documentation API (Swagger UI) :
| Environnement | URL |
|---|---|
| Production | https://bonsai.goutailler-olivier.com/api/swagger-ui.html |
| Développement local | http://localhost:8080/swagger-ui.html |
La définition OpenAPI brute est disponible sur /v3/api-docs.
6. Bonsai Webapp
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. Luz
cd luz/
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 :
| 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 |
8. Olhar
cd olhar/
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 :
| 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 |
9. Nextcloud
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 |
10. Trilium
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 :
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. Luz
8. Olhar
9. Nextcloud
10. Trilium
Vérifications
# É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"