version: "3.8" services: postgres: image: pgvector/pgvector:pg16 restart: unless-stopped environment: POSTGRES_DB: pedquiz POSTGRES_USER: pedquiz POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:?set POSTGRES_PASSWORD} volumes: - postgres_data:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U pedquiz"] interval: 5s timeout: 5s retries: 10 frontend: build: ./frontend env_file: - ./frontend/.env ports: - "127.0.0.1:8081:80" depends_on: - backend restart: unless-stopped backend: build: ./backend command: uvicorn app.main:app --host 0.0.0.0 --port 8000 --workers 4 env_file: - ./backend/.env environment: - ANONYMIZED_TELEMETRY=False volumes: - uploads_data:/app/uploads - chroma_data:/app/chroma_data depends_on: postgres: condition: service_healthy redis: condition: service_started restart: unless-stopped celery: build: ./backend command: celery -A app.tasks worker --loglevel=info --concurrency=2 env_file: - ./backend/.env environment: - ANONYMIZED_TELEMETRY=False volumes: - uploads_data:/app/uploads - chroma_data:/app/chroma_data depends_on: postgres: condition: service_healthy redis: condition: service_started restart: unless-stopped redis: image: redis:7-alpine volumes: - redis_data:/data restart: unless-stopped db-backup: image: prodrigestivill/postgres-backup-local:16 restart: unless-stopped environment: POSTGRES_HOST: postgres POSTGRES_DB: pedquiz POSTGRES_USER: pedquiz POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:?set POSTGRES_PASSWORD} SCHEDULE: "@daily" BACKUP_KEEP_DAYS: 14 BACKUP_KEEP_WEEKS: 4 BACKUP_KEEP_MONTHS: 6 HEALTHCHECK_PORT: 8080 volumes: - ./backups:/backups depends_on: postgres: condition: service_healthy volumes: uploads_data: chroma_data: postgres_data: redis_data: