tech: ajout repo avec build main

Signed-off-by: Gato <cedric@goutailler-olivier.fr>
This commit is contained in:
2026-06-15 06:42:46 +02:00
parent f65ffea670
commit cdefbe3a81
5 changed files with 173 additions and 0 deletions
+4
View File
@@ -0,0 +1,4 @@
# Mot de passe PostgreSQL partagé entre le container db et l'API Spring Boot.
# Copier ce fichier en .env et définir une valeur sécurisée avant de démarrer.
# cp .env.example .env
POSTGRES_PASSWORD=changeme
+17
View File
@@ -0,0 +1,17 @@
# syntax=docker/dockerfile:1
FROM eclipse-temurin:25-jdk AS builder
RUN apt-get update && apt-get install -y git openssh-client && rm -rf /var/lib/apt/lists/*
RUN mkdir -p /root/.ssh && \
ssh-keyscan -p 2222 git.goutailler-olivier.com >> /root/.ssh/known_hosts
RUN --mount=type=ssh \
--mount=type=cache,target=/root/.gradle \
git clone --depth 1 --branch main \
ssh://git@git.goutailler-olivier.com:2222/Gato/Bonsai-api.git /src && \
cd /src && ./gradlew bootJar --no-daemon -q
FROM eclipse-temurin:25-jre-alpine
WORKDIR /app
COPY --from=builder /src/build/libs/*.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"]
+16
View File
@@ -0,0 +1,16 @@
# syntax=docker/dockerfile:1
FROM node:22-alpine AS builder
RUN apk add --no-cache git openssh
RUN mkdir -p /root/.ssh && \
ssh-keyscan -p 2222 git.goutailler-olivier.com >> /root/.ssh/known_hosts
RUN --mount=type=ssh \
--mount=type=cache,target=/root/.npm \
git clone --depth 1 --branch main \
ssh://git@git.goutailler-olivier.com:2222/Gato/Bonsai-webapp.git /src && \
cd /src && npm ci --cache /root/.npm && npm run build
FROM nginx:alpine
COPY --from=builder /src/dist/Bonsai-webapp/browser /usr/share/nginx/html
COPY --from=builder /src/nginx.conf /etc/nginx/conf.d/default.conf
EXPOSE 80
+53
View File
@@ -0,0 +1,53 @@
# Bonsai — Stack complète
Stack Docker Compose unifiée pour l'application Bonsai : base de données, API et webapp.
Les images sont **buildées depuis les sources** de la branche `main` de chaque dépôt au moment du build.
## Services
| Service | Image de base | Source |
|---------|--------------|--------|
| `db` | `postgres:16-alpine` | — |
| `api` | `eclipse-temurin:25-jdk``25-jre-alpine` | `Bonsai-api` (branche `main`) |
| `webapp` | `node:22-alpine``nginx:alpine` | `Bonsai-webapp` (branche `main`) |
## Prérequis
- Docker avec BuildKit activé (Docker 23+)
- Accès SSH au dépôt Gitea (`git.goutailler-olivier.com:2222`) avec la clé chargée dans l'agent
- Réseau Docker externe `proxy` (Traefik)
## Démarrage
```bash
# 1. Configurer les variables d'environnement
cp .env.example .env
# Éditer .env et définir POSTGRES_PASSWORD
# 2. S'assurer que la clé SSH est chargée
ssh-add ~/.ssh/<ta_cle>
# 3. Builder les images (clone + compile)
docker compose build --ssh default
# 4. Démarrer la stack
docker compose up -d
```
## Mise à jour
Pour rebuilder depuis le dernier commit de `main` :
```bash
docker compose build --ssh default --no-cache
docker compose up -d
```
## Arrêt
```bash
docker compose down
```
Les données PostgreSQL sont persistées dans `~/Applications/data/bonsai/db_data` et les fichiers uploadés dans `~/Applications/data/bonsai/uploads`.
+83
View File
@@ -0,0 +1,83 @@
name: bonsai
services:
db:
image: postgres:16-alpine
container_name: bonsai-db
restart: unless-stopped
environment:
POSTGRES_DB: bonsai
POSTGRES_USER: bonsai
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
TZ: Europe/Paris
healthcheck:
test: ["CMD-SHELL", "pg_isready -U bonsai -d bonsai"]
interval: 10s
timeout: 5s
retries: 5
volumes:
- ~/Applications/data/bonsai/db_data:/var/lib/postgresql/data
networks:
- bonsai-net
api:
build:
context: .
dockerfile: Dockerfile.api
ssh:
- default
container_name: bonsai-api
restart: unless-stopped
depends_on:
db:
condition: service_healthy
environment:
DATASOURCE_URL: jdbc:postgresql://db:5432/bonsai
DATASOURCE_USERNAME: bonsai
DATASOURCE_PASSWORD: ${POSTGRES_PASSWORD}
KEYCLOAK_JWKS_URI: https://auth.goutailler-olivier.com/realms/bonsai/protocol/openid-connect/certs
CORS_ALLOWED_ORIGIN_PROD: https://bonsai.goutailler-olivier.com
SERVER_SERVLET_CONTEXT_PATH: /api
TZ: Europe/Paris
volumes:
- ~/Applications/data/bonsai/uploads:/app/uploads
networks:
- bonsai-net
- proxy
labels:
- traefik.enable=true
- traefik.http.routers.bonsai-api.rule=Host(`bonsai.goutailler-olivier.com`) && PathPrefix(`/api`)
- traefik.http.routers.bonsai-api.entrypoints=websecure
- traefik.http.routers.bonsai-api.tls.certresolver=le
- traefik.http.services.bonsai-api.loadbalancer.server.port=8080
- traefik.docker.network=proxy
webapp:
build:
context: .
dockerfile: Dockerfile.webapp
ssh:
- default
container_name: bonsai-webapp
restart: unless-stopped
depends_on:
- api
environment:
TZ: Europe/Paris
networks:
- bonsai-net
- proxy
labels:
- traefik.enable=true
- traefik.http.routers.bonsai-webapp.rule=Host(`bonsai.goutailler-olivier.com`)
- traefik.http.routers.bonsai-webapp.entrypoints=websecure
- traefik.http.routers.bonsai-webapp.tls.certresolver=le
- traefik.http.services.bonsai-webapp.loadbalancer.server.port=80
- traefik.docker.network=proxy
networks:
bonsai-net:
driver: bridge
proxy:
external: true
name: proxy