diff --git a/docker-compose.yaml b/docker-compose.yaml new file mode 100644 index 0000000..0713147 --- /dev/null +++ b/docker-compose.yaml @@ -0,0 +1,66 @@ +# Klarbild — selbst-enthaltener Stack (App + Worker, Postgres, MinIO). +# Deploy über Coolify (Docker Compose). Werte kommen aus Coolify-Env. +services: + app: + build: + context: . + dockerfile: Dockerfile + environment: + SERVICE_FQDN_APP_4321: / + PORT: "4321" + DATABASE_URL: "postgres://klarbild:${DB_PASSWORD}@db:5432/klarbild" + S3_ENDPOINT: "http://minio:9000" + S3_REGION: "us-east-1" + S3_BUCKET: "klarbild" + S3_ACCESS_KEY: "${S3_ACCESS_KEY}" + S3_SECRET_KEY: "${S3_SECRET_KEY}" + S3_FORCE_PATH_STYLE: "true" + SESSION_SECRET: "${SESSION_SECRET}" + ENCRYPTION_KEY: "${ENCRYPTION_KEY}" + OPENROUTER_API_KEY: "${OPENROUTER_API_KEY}" + TELEGRAM_BOT_TOKEN: "${TELEGRAM_BOT_TOKEN}" + SEED_TILL_PASSWORD: "${SEED_TILL_PASSWORD}" + SEED_LEA_PASSWORD: "${SEED_LEA_PASSWORD}" + PUBLIC_BASE_URL: "${PUBLIC_BASE_URL}" + N8N_WEBHOOK_URL: "${N8N_WEBHOOK_URL}" + depends_on: + - db + - minio + healthcheck: + test: ["CMD", "node", "-e", "fetch('http://127.0.0.1:4321/api/health').then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))"] + interval: 30s + timeout: 5s + retries: 5 + start_period: 60s + + db: + image: postgres:16-alpine + environment: + POSTGRES_USER: klarbild + POSTGRES_PASSWORD: "${DB_PASSWORD}" + POSTGRES_DB: klarbild + volumes: + - db-data:/var/lib/postgresql/data + healthcheck: + test: ["CMD-SHELL", "pg_isready -U klarbild"] + interval: 10s + timeout: 5s + retries: 10 + + minio: + image: minio/minio:latest + command: server /data --console-address ":9001" + environment: + MINIO_ROOT_USER: "${S3_ACCESS_KEY}" + MINIO_ROOT_PASSWORD: "${S3_SECRET_KEY}" + volumes: + - minio-data:/data + healthcheck: + test: ["CMD", "mc", "ready", "local"] + interval: 15s + timeout: 5s + retries: 10 + +volumes: + db-data: + minio-data: