version: '3.8' services: backend: build: context: . dockerfile: Dockerfile.backend ports: - "8000:8000" env_file: - .env volumes: - ./server/data:/app/server/data - ./prompts:/app/prompts - ./core:/app/core restart: unless-stopped healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8000/health"] interval: 30s timeout: 10s retries: 3 start_period: 30s networks: - brief-extractor frontend: build: context: ./frontend dockerfile: Dockerfile ports: - "3000:80" depends_on: - backend restart: unless-stopped environment: - VITE_API_URL=http://localhost:8000/api - VITE_WS_URL=ws://localhost:8000 healthcheck: test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost/"] interval: 30s timeout: 3s retries: 3 networks: - brief-extractor # Optional: Reverse proxy for production nginx: image: nginx:alpine ports: - "80:80" - "443:443" volumes: - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro - ./nginx/ssl:/etc/nginx/ssl:ro depends_on: - backend - frontend restart: unless-stopped profiles: - production networks: - brief-extractor networks: brief-extractor: driver: bridge volumes: uploads: outputs: