- 删除 11 个残留文件: continuation.md, init_plan.md, reasonix.toml, djapi/continuation.md, djapi/.serena/, djapi/.claude/, djapi/.mcp.json, .claude/skills/, docs/usage.html, docs/db_schema.md, docs/report_db_design.md - 7 个 CLAUDE-*.md 移入 docs/ 并重命名去 CLAUDE- 前缀 - 新增 4 个文档: architecture.md, development.md, api.md, deployment.md - 重写 usage.md, README.md - 修复所有过时引用和交叉链接
7.4 KiB
7.4 KiB
部署说明
cc-cursor 包含两个运行组件:finance 量化引擎(Mac Mini 本地)和 djapi API 后端(Linux 服务器)。部署架构如下:
┌─ Mac Mini (本地) ─────────────────────────────────────────────┐
│ │
│ finance/ 量化引擎 │
│ ├── 数据获取 (AkShare/Tushare) │
│ ├── 因子计算 / 回测 / ML │
│ └── Agent 日报生成 │
│ │
│ shared/script/autossh.sh │
│ └── SSH 隧道 :13306 ──────────────────────┐ │
│ │ │
└─────────────────────────────────────────────┼──────────────────┘
│
MariaDB 10.11 │
doorcome.cn:3306│
│
┌─ Linux 服务器 (doorcome.cn) ────────────────┼──────────────────┐
│ │ │
│ djapi/ Django API │ │
│ ├── uWSGI :5004 │ │
│ ├── nginx 反向代理 │ │
│ └── 域名: api.doorcome.cn │ │
│ │ │
│ MariaDB myquant 库 │ │
│ ├── mac_* 表 (量化引擎数据) │ │
│ ├── xwlb_* 表 (新闻联播) │ │
│ └── news_* 表 (日报) │ │
│ │ │
└─────────────────────────────────────────────┘ │
1. 本地环境(Mac Mini)
1.1 Python 环境
conda activate quant # Python 3.11.13
1.2 环境变量
复制并编辑 finance/.env(参考 finance/.env.example):
TUSHARE_TOKEN=your_token_here
QWEN_API_KEY=sk-your-key-here
MAC_DB_HOST=127.0.0.1
MAC_DB_PORT=13306
MAC_DB_USER=myquant
MAC_DB_PASSWORD=your_password_here
MAC_DB_NAME=myquant
1.3 数据库 SSH 隧道
bash shared/script/autossh.sh
脚本内容:
autossh -M 0 -fN -L 13306:localhost:3306 tunnel@doorcome.cn
验证隧道:
lsof -i :13306 | grep LISTEN
连接信息:
Host: 127.0.0.1
Port: 13306
User: myquant
Database: myquant
2. 服务器环境(doorcome.cn)
2.1 基本信息
| 项目 | 值 |
|---|---|
| 服务器 | simon@doorcome.cn |
| 项目路径 | /home/simon/myquant/djapi/ |
| Python 环境 | /opt/miniconda/envs/django (Python 3.10) |
| uWSGI 端口 | 127.0.0.1:5004 |
| nginx 反向代理 | 域名 → 127.0.0.1:5004 |
| 生产域名 | api.doorcome.cn、echart.doorcome.cn |
2.2 服务器环境变量
服务器端 djapi/.env(不随代码同步,需在服务器上手动维护):
DJANGO_SECRET_KEY=...
TUSHARE_TS_TOKEN=...
MYSQL_HOST=localhost
MYSQL_PORT=3306
MYSQL_USER=myquant
MYSQL_PASSWORD=...
MYSQL_DATABASE=myquant
NEWS_DB_HOST=127.0.0.1
NEWS_DB_PORT=3306
NEWS_DB_USER=myquant
NEWS_DB_PASSWORD=...
NEWS_DB_NAME=myquant
DEEPSEEK_API_KEY=...
DASHSCOPE_API_KEY=...
2.3 uWSGI 配置
配置文件:djapi/uwsgi.ini
[uwsgi]
http = 127.0.0.1:5004
chdir = /home/simon/myquant/djapi
module = djapi.wsgi:application
uid = simon
gid = simon
master = true
workers = 5
pidfile = /home/simon/myquant/djapi/uwsgi.pid
vacuum = true
thunder-lock = true
enable-threads = true
harakiri = 30
post-buffering = 4096
daemonize = /home/simon/myquant/djapi/uwsgi.log
log-maxsize = 10240000
py-autoreload = 1
virtualenv = /opt/miniconda/envs/django
env = DJANGO_SETTINGS_MODULE=djapi.settings
2.4 uWSGI 管理命令
# 启动
uwsgi --ini uwsgi.ini
# 热重载
uwsgi --reload uwsgi.pid
# 停止
uwsgi --stop uwsgi.pid
# 强制停止
kill $(lsof -ti:5004)
3. 代码部署
3.1 全量同步
rsync -avz --delete \
--exclude='.env' --exclude='db.sqlite3' \
--exclude='*.log' --exclude='uwsgi.pid' \
--exclude='__pycache__/' --exclude='*.pyc' \
--exclude='xwlb_video/' --exclude='audio_processing/' \
/path/to/cc-cursor/djapi/ \
simon@doorcome.cn:/home/simon/myquant/djapi/
3.2 单文件同步
# 必须写完整目标路径,否则会展平到根目录
rsync -avz api/views.py simon@doorcome.cn:/home/simon/myquant/djapi/api/views.py
3.3 重启服务
ssh simon@doorcome.cn "kill \$(lsof -ti:5004); sleep 2; /opt/miniconda/envs/django/bin/uwsgi --ini /home/simon/myquant/djapi/uwsgi.ini"
3.4 部署后验证
# Swagger 文档
curl -s https://api.doorcome.cn/api/docs/ | head -5
# 日报查询
curl -s 'https://api.doorcome.cn/api/news/reports/' | python -m json.tool | head -20
# 健康检查(冒烟)
curl -s -o /dev/null -w "%{http_code}" 'https://api.doorcome.cn/api/news/reports/'
# → 200
4. 数据库
4.1 表前缀
| 前缀 | 用途 | 位置 |
|---|---|---|
mac_ |
量化引擎数据(股票列表、日线、财务、报告) | finance 引擎写入 |
xwlb_ |
新闻联播数据 | djapi video 模块写入 |
news_ |
日报数据 | 外部 pipeline 写入,djapi 只读 |
4.2 量化引擎表
| 表 | 内容 | 主键 |
|---|---|---|
mac_stock_basic |
A 股列表 (5,524 只) | ts_code |
mac_stock_daily |
日线 OHLCV | (ts_code, trade_date) |
mac_stock_financial |
财务指标 | (ts_code, end_date) |
mac_report |
报告持久化 | id |
4.3 日报表
| 表 | 内容 |
|---|---|
news_report |
日报主表(一行 = 一份日报) |
news_event |
日报事件明细(一行 = 一条事件) |
5. 开发环境
5.1 本地运行 djapi
cd djapi
python manage.py runserver 0.0.0.0:8000
5.2 API 文档
- Swagger UI:
/api/docs/ - ReDoc:
/api/redoc/ - OpenAPI Schema:
/api/schema/
5.3 数据库初始化
python manage.py makemigrations
python manage.py migrate
python manage.py createsuperuser
6. 文档索引
| 文档 | 内容 |
|---|---|
| 使用指南 | 各模块使用方法和代码示例 |
| 架构说明 | 项目架构、数据流、设计原则 |
| 开发指南 | 环境搭建、开发约定 |
| DJAPI 接口 | Django API 端点参考 |
| 日报查询 API | news/reports + news/events 接口 |
| 日报数据库 | news_report / news_event 表结构 |