本次提交旨在完成一次架构一致性重构,核心目标是使前端代码和相关文档完全符合“`data-persistence-service`是唯一数据库守门人”的设计原则。
主要变更包括:
1. **移除前端数据库直连**:
* 从`docker-compose.yml`中删除了`frontend`服务的`DATABASE_URL`。
* 彻底移除了`frontend`项目中的`Prisma`依赖、配置文件和客户端实例。
2. **清理前端UI**:
* 从配置页面中删除了所有与数据库设置相关的UI组件和业务逻辑。
3. **同步更新文档**:
* 更新了《用户使用文档》和《需求文档》,移除了所有提及或要求前端进行数据库配置的过时内容。
此次重构后,系统前端的数据交互已完全收敛至`api-gateway`,确保了架构的统一性、健壮性和高内聚。
204 lines
5.7 KiB
YAML
204 lines
5.7 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
|
||
networks:
|
||
- app-network
|
||
nats:
|
||
image: nats:2.9
|
||
volumes:
|
||
- nats_data:/data
|
||
networks:
|
||
- app-network
|
||
|
||
data-persistence-service:
|
||
build:
|
||
context: .
|
||
dockerfile: services/data-persistence-service/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
|
||
depends_on:
|
||
postgres-db:
|
||
condition: service_healthy
|
||
# If you prefer live-reload or local code mount, consider switching to a dev Dockerfile.
|
||
# volumes:
|
||
# - ./:/workspace
|
||
networks:
|
||
- app-network
|
||
|
||
|
||
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
|
||
NODE_ENV: development
|
||
NEXT_TELEMETRY_DISABLED: "1"
|
||
volumes:
|
||
- ./:/workspace
|
||
# 隔离 node_modules,避免与宿主机冲突
|
||
- frontend_node_modules:/workspace/frontend/node_modules
|
||
ports:
|
||
- "13001:3001"
|
||
depends_on:
|
||
- api-gateway
|
||
networks:
|
||
- app-network
|
||
|
||
|
||
api-gateway:
|
||
build:
|
||
context: .
|
||
dockerfile: services/api-gateway/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"]'
|
||
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: .
|
||
dockerfile: services/alphavantage-provider-service/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
|
||
depends_on:
|
||
- nats
|
||
- data-persistence-service
|
||
networks:
|
||
- app-network
|
||
|
||
tushare-provider-service:
|
||
build:
|
||
context: .
|
||
dockerfile: services/tushare-provider-service/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"
|
||
depends_on:
|
||
- nats
|
||
- data-persistence-service
|
||
networks:
|
||
- app-network
|
||
|
||
finnhub-provider-service:
|
||
build:
|
||
context: .
|
||
dockerfile: services/finnhub-provider-service/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}
|
||
depends_on:
|
||
- nats
|
||
- data-persistence-service
|
||
networks:
|
||
- app-network
|
||
|
||
yfinance-provider-service:
|
||
build:
|
||
context: .
|
||
dockerfile: services/yfinance-provider-service/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
|
||
depends_on:
|
||
- nats
|
||
- data-persistence-service
|
||
networks:
|
||
- app-network
|
||
|
||
report-generator-service:
|
||
build:
|
||
context: .
|
||
dockerfile: services/report-generator-service/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"}
|
||
depends_on:
|
||
- nats
|
||
- data-persistence-service
|
||
networks:
|
||
- app-network
|
||
|
||
config-service-rs:
|
||
build:
|
||
context: .
|
||
dockerfile: services/config-service-rs/Dockerfile
|
||
container_name: config-service-rs
|
||
environment:
|
||
SERVER_PORT: 5001
|
||
# PROJECT_ROOT is set to /workspace in the Dockerfile
|
||
networks:
|
||
- app-network
|
||
volumes:
|
||
- ./config:/workspace/config:ro
|
||
|
||
# =================================================================
|
||
# Python Services (Legacy - to be replaced)
|
||
# =================================================================
|
||
|
||
volumes:
|
||
pgdata:
|
||
frontend_node_modules:
|
||
nats_data:
|
||
|
||
networks:
|
||
app-network:
|
||
|
||
|