karbe/docker-compose.prod.yml

108 lines
2.6 KiB
YAML

services:
postgres:
image: postgres:16-alpine
container_name: karbe-postgres
restart: unless-stopped
environment:
POSTGRES_DB: ${POSTGRES_DB:-karbe}
POSTGRES_USER: ${POSTGRES_USER:-karbe}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:?POSTGRES_PASSWORD must be set}
volumes:
- postgres_data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U $$POSTGRES_USER -d $$POSTGRES_DB"]
interval: 10s
timeout: 5s
retries: 10
start_period: 20s
networks:
- karbe
minio:
image: minio/minio:RELEASE.2026-05-24T17-08-30Z
container_name: karbe-minio
restart: unless-stopped
environment:
MINIO_ROOT_USER: ${MINIO_ROOT_USER:-karbe}
MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PASSWORD:?MINIO_ROOT_PASSWORD must be set}
command: server /data --console-address ":9001"
volumes:
- minio_data:/data
healthcheck:
test: ["CMD", "curl", "-fsS", "http://127.0.0.1:9000/minio/health/live"]
interval: 30s
timeout: 5s
retries: 5
start_period: 20s
networks:
- karbe
minio-init:
image: minio/mc:RELEASE.2026-05-21T01-59-54Z
container_name: karbe-minio-init
depends_on:
minio:
condition: service_healthy
restart: "no"
entrypoint: >
/bin/sh -c "
mc alias set karbe http://minio:9000 $$MINIO_ROOT_USER $$MINIO_ROOT_PASSWORD &&
mc mb -p karbe/$$S3_BUCKET || true
"
environment:
MINIO_ROOT_USER: ${MINIO_ROOT_USER:-karbe}
MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PASSWORD:?MINIO_ROOT_PASSWORD must be set}
S3_BUCKET: ${S3_BUCKET:-karbe-medias}
networks:
- karbe
app:
build:
context: .
dockerfile: Dockerfile
container_name: karbe-app
restart: unless-stopped
env_file:
- .env.production
depends_on:
postgres:
condition: service_healthy
minio:
condition: service_healthy
minio-init:
condition: service_completed_successfully
networks:
- karbe
healthcheck:
test: ["CMD", "wget", "-qO", "-", "http://127.0.0.1:3000/api/health"]
interval: 30s
timeout: 5s
retries: 5
start_period: 30s
caddy:
image: caddy:2.10-alpine
container_name: karbe-caddy
restart: unless-stopped
ports:
- "80:80"
- "443:443"
depends_on:
app:
condition: service_healthy
volumes:
- ./docker/Caddyfile:/etc/caddy/Caddyfile:ro
- caddy_data:/data
- caddy_config:/config
networks:
- karbe
networks:
karbe:
name: karbe-net
volumes:
postgres_data:
minio_data:
caddy_data:
caddy_config: