- docker-compose: 下线 Python backend/config-service,切换至 config-service-rs - archive: 归档 legacy Python 目录至 archive/python/* - services: 新增/更新 common-contracts、api-gateway、各 provider、report-generator-service、config-service-rs - data-persistence-service: API/system 模块与模型/DTO 调整 - frontend: 更新 useApi 与 API 路由 - docs: 更新路线图并勾选光荣退役 - cleanup: 移除 data-distance-service 占位测试
220 lines
6.1 KiB
YAML
220 lines
6.1 KiB
YAML
version: "3.9"
|
||
|
||
services:
|
||
postgres-db:
|
||
image: timescale/timescaledb:2.15.2-pg16
|
||
container_name: fundamental-postgres
|
||
command: -c shared_preload_libraries=timescaledb
|
||
environment:
|
||
POSTGRES_USER: postgres
|
||
POSTGRES_PASSWORD: postgres
|
||
POSTGRES_DB: fundamental
|
||
volumes:
|
||
- pgdata:/var/lib/postgresql/data
|
||
healthcheck:
|
||
test: ["CMD-SHELL", "pg_isready -U postgres -d fundamental"]
|
||
interval: 5s
|
||
timeout: 5s
|
||
retries: 10
|
||
ports:
|
||
- "15432:5432"
|
||
nats:
|
||
image: nats:2.9
|
||
ports:
|
||
- "4222:4222"
|
||
- "8222:8222" # For monitoring
|
||
volumes:
|
||
- nats_data:/data
|
||
|
||
data-persistence-service:
|
||
build:
|
||
context: ./services/data-persistence-service
|
||
dockerfile: Dockerfile
|
||
container_name: data-persistence-service
|
||
environment:
|
||
HOST: 0.0.0.0
|
||
PORT: 3000
|
||
# Rust service connects to the internal DB service name
|
||
DATABASE_URL: postgresql://postgres:postgres@postgres-db:5432/fundamental
|
||
ports:
|
||
- "13000:3000"
|
||
depends_on:
|
||
postgres-db:
|
||
condition: service_healthy
|
||
# If you prefer live-reload or local code mount, consider switching to a dev Dockerfile.
|
||
# volumes:
|
||
# - ./:/workspace
|
||
|
||
|
||
frontend:
|
||
build:
|
||
context: .
|
||
dockerfile: frontend/Dockerfile
|
||
container_name: fundamental-frontend
|
||
working_dir: /workspace/frontend
|
||
command: npm run dev
|
||
environment:
|
||
# 让 Next 的 API 路由代理到新的 api-gateway
|
||
NEXT_PUBLIC_BACKEND_URL: http://api-gateway:4000/v1
|
||
# Prisma 直连数据库(与后端共用同一库)
|
||
DATABASE_URL: postgresql://postgres:postgres@postgres-db:5432/fundamental?schema=public
|
||
NODE_ENV: development
|
||
NEXT_TELEMETRY_DISABLED: "1"
|
||
volumes:
|
||
- ./:/workspace
|
||
# 隔离 node_modules,避免与宿主机冲突
|
||
- frontend_node_modules:/workspace/frontend/node_modules
|
||
ports:
|
||
- "13001:3001"
|
||
depends_on:
|
||
- postgres-db
|
||
- api-gateway
|
||
|
||
|
||
api-gateway:
|
||
build:
|
||
context: ./services/api-gateway
|
||
dockerfile: Dockerfile
|
||
container_name: api-gateway
|
||
environment:
|
||
SERVER_PORT: 4000
|
||
NATS_ADDR: nats://nats:4222
|
||
DATA_PERSISTENCE_SERVICE_URL: http://data-persistence-service:3000/api/v1
|
||
# Note: provider_services needs to contain all provider's internal addresses
|
||
PROVIDER_SERVICES: '["http://alphavantage-provider-service:8000", "http://tushare-provider-service:8001", "http://finnhub-provider-service:8002", "http://yfinance-provider-service:8003"]'
|
||
ports:
|
||
- "14000:4000"
|
||
depends_on:
|
||
- nats
|
||
- data-persistence-service
|
||
- alphavantage-provider-service
|
||
- tushare-provider-service
|
||
- finnhub-provider-service
|
||
- yfinance-provider-service
|
||
networks:
|
||
- app-network
|
||
|
||
alphavantage-provider-service:
|
||
build:
|
||
context: ./services/alphavantage-provider-service
|
||
dockerfile: Dockerfile
|
||
container_name: alphavantage-provider-service
|
||
environment:
|
||
SERVER_PORT: 8000
|
||
NATS_ADDR: nats://nats:4222
|
||
DATA_PERSISTENCE_SERVICE_URL: http://data-persistence-service:3000/api/v1
|
||
ports:
|
||
- "18000:8000"
|
||
depends_on:
|
||
- nats
|
||
- data-persistence-service
|
||
networks:
|
||
- app-network
|
||
|
||
tushare-provider-service:
|
||
build:
|
||
context: ./services/tushare-provider-service
|
||
dockerfile: Dockerfile
|
||
container_name: tushare-provider-service
|
||
environment:
|
||
SERVER_PORT: 8001
|
||
NATS_ADDR: nats://nats:4222
|
||
DATA_PERSISTENCE_SERVICE_URL: http://data-persistence-service:3000/api/v1
|
||
TUSHARE_API_URL: http://api.waditu.com
|
||
# Please provide your Tushare token here
|
||
TUSHARE_API_TOKEN: "YOUR_TUSHARE_API_TOKEN"
|
||
ports:
|
||
- "18001:8001"
|
||
depends_on:
|
||
- nats
|
||
- data-persistence-service
|
||
networks:
|
||
- app-network
|
||
|
||
finnhub-provider-service:
|
||
build:
|
||
context: ./services/finnhub-provider-service
|
||
dockerfile: Dockerfile
|
||
container_name: finnhub-provider-service
|
||
environment:
|
||
SERVER_PORT: 8002
|
||
NATS_ADDR: nats://nats:4222
|
||
DATA_PERSISTENCE_SERVICE_URL: http://data-persistence-service:3000/api/v1
|
||
FINNHUB_API_URL: https://finnhub.io/api/v1
|
||
# Please provide your Finnhub token in .env file
|
||
FINNHUB_API_KEY: ${FINNHUB_API_KEY}
|
||
ports:
|
||
- "18002:8002"
|
||
depends_on:
|
||
- nats
|
||
- data-persistence-service
|
||
networks:
|
||
- app-network
|
||
|
||
yfinance-provider-service:
|
||
build:
|
||
context: ./services/yfinance-provider-service
|
||
dockerfile: Dockerfile
|
||
container_name: yfinance-provider-service
|
||
environment:
|
||
SERVER_PORT: 8003
|
||
NATS_ADDR: nats://nats:4222
|
||
DATA_PERSISTENCE_SERVICE_URL: http://data-persistence-service:3000/api/v1
|
||
ports:
|
||
- "18003:8003"
|
||
depends_on:
|
||
- nats
|
||
- data-persistence-service
|
||
networks:
|
||
- app-network
|
||
|
||
report-generator-service:
|
||
build:
|
||
context: ./services/report-generator-service
|
||
dockerfile: Dockerfile
|
||
container_name: report-generator-service
|
||
environment:
|
||
SERVER_PORT: 8004
|
||
NATS_ADDR: nats://nats:4222
|
||
DATA_PERSISTENCE_SERVICE_URL: http://data-persistence-service:3000/api/v1
|
||
# Please provide your LLM provider details in .env file
|
||
LLM_API_URL: ${LLM_API_URL}
|
||
LLM_API_KEY: ${LLM_API_KEY}
|
||
LLM_MODEL: ${LLM_MODEL:-"default-model"}
|
||
ports:
|
||
- "18004:8004"
|
||
depends_on:
|
||
- nats
|
||
- data-persistence-service
|
||
networks:
|
||
- app-network
|
||
|
||
config-service-rs:
|
||
build:
|
||
context: ./services/config-service-rs
|
||
dockerfile: Dockerfile
|
||
container_name: config-service-rs
|
||
environment:
|
||
SERVER_PORT: 5001
|
||
# PROJECT_ROOT is set to /workspace in the Dockerfile
|
||
ports:
|
||
- "15001:5001"
|
||
networks:
|
||
- app-network
|
||
volumes:
|
||
- ./config:/workspace/config:ro
|
||
|
||
# =================================================================
|
||
# Python Services (Legacy - to be replaced)
|
||
# =================================================================
|
||
|
||
volumes:
|
||
pgdata:
|
||
frontend_node_modules:
|
||
nats_data:
|
||
|
||
networks:
|
||
app-network:
|
||
|
||
|