Compare commits

..

5 Commits

Author SHA1 Message Date
Gato cdefbe3a81 tech: ajout repo avec build main
Signed-off-by: Gato <cedric@goutailler-olivier.fr>
2026-06-15 06:42:46 +02:00
Gato f65ffea670 chore(olhar): remplace UPLOADS_PATH par DATA_PATH dans .env.example
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-08 09:05:59 +02:00
Gato 2e45a8cc10 chore(olhar): ajout PHOTOS_STORAGE_PATH dans .env.example
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-08 08:55:12 +02:00
Gato 5798440a9b chore(olhar): ajout UPLOADS_PATH dans .env.example
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-08 08:43:04 +02:00
Gato 0352ffd641 fix(olhar): deploy.sh utilise le compose du repo cloné
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-08 08:40:45 +02:00
7 changed files with 185 additions and 15 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
+6 -1
View File
@@ -1,4 +1,4 @@
# Copier ce fichier en .env et définir des valeurs sécurisées avant de démarrer.
# Copier en .env et définir des valeurs sécurisées avant de démarrer.
# cp .env.example .env
# Mot de passe PostgreSQL partagé entre le container db et l'API Spring Boot.
@@ -7,3 +7,8 @@ POSTGRES_PASSWORD=changeme
# Secret JWT utilisé pour signer les tokens d'authentification.
# Générer une valeur forte : openssl rand -hex 32
JWT_SECRET=changeme-in-production-use-a-long-random-string-at-least-256-bits
# Dossier racine pour les données persistantes (BDD + uploads).
# La BDD sera dans ${DATA_PATH}/olhar/db_data
# Les photos dans ${DATA_PATH}/olhar/uploads
DATA_PATH=/home/gato/Applications/data
+6 -14
View File
@@ -15,19 +15,11 @@ else
git clone --branch develop --depth 1 "${REPO_URL}" "${BUILD_DIR}"
fi
# ── 2. Build des images ───────────────────────────────────────────────────────
echo "▶ Build de l'image API..."
docker build \
-t git.goutailler-olivier.com/gato/olhar-api:latest \
"${BUILD_DIR}/backend"
echo "▶ Build de l'image PWA..."
docker build \
-t git.goutailler-olivier.com/gato/olhar-pwa:latest \
"${BUILD_DIR}/webapp"
# ── 3. Démarrage du stack ─────────────────────────────────────────────────────
echo "▶ Démarrage du stack..."
docker compose -f "${SCRIPT_DIR}/docker-compose.yml" up -d
# ── 2. Build & démarrage du stack ────────────────────────────────────────────
echo "▶ Build des images et démarrage du stack..."
docker compose \
-f "${BUILD_DIR}/docker-compose.yml" \
--env-file "${SCRIPT_DIR}/.env" \
up --build -d
echo "✓ Stack démarré."