services: redis: image: redis:7-alpine restart: unless-stopped command: redis-server --save 60 1 --appendonly yes --appendfsync everysec volumes: - redis_data:/data ports: - "6379:6379" networks: - internal backend: build: ./backend restart: unless-stopped command: uvicorn main:app --host 0.0.0.0 --port 8000 --reload --reload-dir /app/src --reload-include '*.py' env_file: - .env expose: - "8000" ports: - "8000:8000" volumes: - ./logs:/app/logs - ./backend/src:/app/src - ./backend/main.py:/app/main.py depends_on: - redis networks: - internal frontend: build: context: ./frontend dockerfile: Dockerfile.dev environment: # Used by Vite during dev; browser calls the host-exposed backend. VITE_API_URL: http://localhost:8000 ports: - "80:5173" depends_on: - backend restart: unless-stopped networks: - internal volumes: - ./frontend:/app - frontend_node_modules:/app/node_modules volumes: redis_data: frontend_node_modules: networks: internal: driver: bridge