From 7e7fd8c8f0b6444eff8538a43cdbec4239784524 Mon Sep 17 00:00:00 2001 From: Mistral Vibe Date: Fri, 10 Apr 2026 11:40:55 +0200 Subject: [PATCH] adding prod compose --- docker-compose.prod.yml | 134 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 134 insertions(+) create mode 100644 docker-compose.prod.yml diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml new file mode 100644 index 0000000..82b90c4 --- /dev/null +++ b/docker-compose.prod.yml @@ -0,0 +1,134 @@ +version: '3.8' + +services: + db: + image: postgres:16-alpine + environment: + POSTGRES_DB: ${POSTGRES_DB:-rehearsalhub} + POSTGRES_USER: ${POSTGRES_USER:-rh_user} + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-default_secure_password} + volumes: + - pg_data:/var/lib/postgresql/data + networks: + - rh_net + healthcheck: + test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-rh_user} -d ${POSTGRES_DB:-rehearsalhub} || exit 1"] + interval: 15s + timeout: 10s + retries: 30 + start_period: 45s + restart: unless-stopped + command: ["postgres", "-c", "max_connections=200", "-c", "shared_buffers=256MB"] + + redis: + image: redis:7-alpine + command: redis-server --save 60 1 --loglevel warning + volumes: + - redis_data:/data + networks: + - rh_net + healthcheck: + test: ["CMD-SHELL", "redis-cli ping || exit 1"] + interval: 10s + timeout: 5s + retries: 15 + start_period: 25s + restart: unless-stopped + deploy: + resources: + limits: + memory: 256M + + api: + image: git.sschuhmann.de/sschuhmann/rehearsalhub/api:${TAG:-latest} + environment: + DATABASE_URL: postgresql+asyncpg://${POSTGRES_USER:-rh_user}:${POSTGRES_PASSWORD:-default_secure_password}@db:5432/${POSTGRES_DB:-rehearsalhub} + NEXTCLOUD_URL: ${NEXTCLOUD_URL:-https://cloud.example.com} + NEXTCLOUD_USER: ${NEXTCLOUD_USER:-rh_service} + NEXTCLOUD_PASS: ${NEXTCLOUD_PASS:-default_password} + REDIS_URL: redis://redis:6379/0 + SECRET_KEY: ${SECRET_KEY:-replace_me_with_32_byte_hex_default} + INTERNAL_SECRET: ${INTERNAL_SECRET:-replace_me_with_32_byte_hex_default} + DOMAIN: ${DOMAIN:-localhost} + networks: + - rh_net + depends_on: + db: + condition: service_healthy + redis: + condition: service_healthy + healthcheck: + test: ["CMD-SHELL", "curl -f http://localhost:8000/api/health || exit 1"] + interval: 20s + timeout: 10s + retries: 5 + start_period: 60s + restart: unless-stopped + deploy: + resources: + limits: + memory: 512M + + audio-worker: + image: git.sschuhmann.de/sschuhmann/rehearsalhub/worker:${TAG:-latest} + environment: + DATABASE_URL: postgresql+asyncpg://${POSTGRES_USER:-rh_user}:${POSTGRES_PASSWORD:-default_secure_password}@db:5432/${POSTGRES_DB:-rehearsalhub} + REDIS_URL: redis://redis:6379/0 + NEXTCLOUD_URL: ${NEXTCLOUD_URL:-https://cloud.example.com} + NEXTCLOUD_USER: ${NEXTCLOUD_USER:-rh_service} + NEXTCLOUD_PASS: ${NEXTCLOUD_PASS:-default_password} + ANALYSIS_VERSION: "1.0.0" + volumes: + - audio_tmp:/tmp/audio + networks: + - rh_net + depends_on: + db: + condition: service_healthy + redis: + condition: service_healthy + api: + condition: service_started + restart: unless-stopped + + nc-watcher: + image: git.sschuhmann.de/sschuhmann/rehearsalhub/watcher:${TAG:-latest} + environment: + NEXTCLOUD_URL: ${NEXTCLOUD_URL:-https://cloud.example.com} + NEXTCLOUD_USER: ${NEXTCLOUD_USER:-rh_service} + NEXTCLOUD_PASS: ${NEXTCLOUD_PASS:-default_password} + API_URL: http://api:8000 + REDIS_URL: redis://redis:6379/0 + POLL_INTERVAL: "30" + networks: + - rh_net + depends_on: + db: + condition: service_healthy + redis: + condition: service_healthy + api: + condition: service_started + restart: unless-stopped + + web: + image: git.sschuhmann.de/sschuhmann/rehearsalhub/web:${TAG:-latest} + ports: + - "8080:80" + networks: + - frontend + - rh_net + depends_on: + - api + restart: unless-stopped + +networks: + frontend: + external: + name: proxy + rh_net: + +volumes: + pg_data: + redis_data: + audio_tmp: \ No newline at end of file