services: postgres: image: postgres:16-alpine environment: POSTGRES_DB: nexumi POSTGRES_USER: nexumi POSTGRES_PASSWORD: nexumi volumes: - postgres_data:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U nexumi -d nexumi"] interval: 5s timeout: 5s retries: 10 redis: image: redis:7-alpine command: redis-server --appendonly yes volumes: - redis_data:/data healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 5s timeout: 3s retries: 10 bot: build: context: . dockerfile: apps/bot/Dockerfile env_file: .env depends_on: postgres: condition: service_healthy redis: condition: service_healthy volumes: - backups:/backups healthcheck: test: [ "CMD-SHELL", "node -e \"fetch('http://127.0.0.1:8080/health').then((r)=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))\"" ] interval: 15s timeout: 5s retries: 5 start_period: 40s webui: image: node:22-alpine working_dir: /app command: sh -c "node -e \"require('http').createServer((_,res)=>res.end('webui scaffold')).listen(3000)\"" ports: - "3000:3000" labels: - "traefik.enable=true" - "traefik.http.routers.nexumi.rule=Host(`nexumi.de`)" - "traefik.http.services.nexumi.loadbalancer.server.port=3000" volumes: postgres_data: redis_data: backups: