Files
Infra/bonsai/docker-compose.yml
T
2026-06-15 06:42:46 +02:00

84 lines
2.3 KiB
YAML

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