version: "3.9" services: neo4j: image: neo4j:5.26-community container_name: oncelove-neo4j restart: unless-stopped environment: - NEO4J_AUTH=neo4j/${NEO4J_PASSWORD} - NEO4J_dbms_default__database=neo4j - NEO4J_server_memory_heap_initial__size=512m - NEO4J_server_memory_heap_max__size=1024m - NEO4J_server_memory_pagecache_size=512m - NEO4J_server_bolt_advertised__address=neo4j:7687 volumes: - neo4j_data:/data - neo4j_logs:/logs ports: - "127.0.0.1:7474:7474" - "127.0.0.1:7687:7687" healthcheck: test: ["CMD-SHELL", "wget -qO- http://localhost:7474 || exit 1"] interval: 15s timeout: 5s retries: 20 networks: - oncelove_net qdrant: image: qdrant/qdrant:v1.13.4 container_name: oncelove-qdrant restart: unless-stopped volumes: - qdrant_data:/qdrant/storage ports: - "127.0.0.1:6333:6333" - "127.0.0.1:6334:6334" healthcheck: test: ["CMD-SHELL", "wget -qO- http://localhost:6333/healthz || exit 1"] interval: 15s timeout: 5s retries: 20 networks: - oncelove_net api: build: context: ./api container_name: oncelove-api restart: unless-stopped env_file: - .env environment: - NODE_ENV=production - PORT=3000 - APPLICATION_URL=${APPLICATION_URL} - WEBUI_URL=${WEBUI_URL} - NEO4J_URI=bolt://neo4j:7687 - NEO4J_USER=neo4j - NEO4J_PASSWORD=${NEO4J_PASSWORD} - QDRANT_URL=http://qdrant:6333 - QDRANT_API_KEY=${QDRANT_API_KEY} - QDRANT_COLLECTION=${QDRANT_COLLECTION} - EMBEDDING_DIM=${EMBEDDING_DIM} depends_on: neo4j: condition: service_healthy qdrant: condition: service_healthy ports: - "127.0.0.1:3000:3000" networks: - oncelove_net frontend: build: context: ./frontend args: - VITE_API_BASE_URL=${APPLICATION_URL} container_name: oncelove-frontend restart: unless-stopped ports: - "127.0.0.1:8080:80" networks: - oncelove_net depends_on: - api volumes: neo4j_data: neo4j_logs: qdrant_data: networks: oncelove_net: driver: bridge