tech: ajout repo avec build main
Signed-off-by: Gato <cedric@goutailler-olivier.fr>
This commit is contained in:
@@ -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
|
||||
@@ -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"]
|
||||
@@ -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
|
||||
@@ -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`.
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user