alphax/README_DOCKER.md
2026-05-14 10:32:57 +08:00

180 lines
5.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# AlphaX Docker 化副本
这是从当前运行中的 `/home/ubuntu/quant_monitor/altcoin` 复制出来的独立 Docker 化副本,目录:
```text
/home/ubuntu/quant_monitor/alphax-docker
```
## 重要原则
- 这个目录是副本,不影响当前正在运行的 AlphaX。
- 默认 `docker-compose.yml` 将 Web 暴露到宿主机 `8191`,避免占用当前线上 `8190`
- 调度器默认 `ALPHAX_SCHEDULER_DRY_RUN=1`,第一次启动不会真的跑筛选/确认/跟踪任务。
- SQLite 数据挂载在 `./data/altcoin_monitor.db`,容器内路径为 `/app/data/altcoin_monitor.db`
- 镜像构建上下文通过 `.dockerignore` 排除了 `data/`、`archive/`、真实 `.env` 和所有 DB 文件,避免把数据库/密钥打进镜像。
## 快速启动
```bash
cd /home/ubuntu/quant_monitor/alphax-docker
cp .env.example .env
# 如需推送,编辑 .env 填 ALTCOIN_FEISHU_WEBHOOK
docker compose build
docker compose up -d alphax-web
curl -s http://127.0.0.1:8191/api/stats
```
首次使用空库启动时Web 会自动创建一个默认管理员账号:
```text
邮箱admin@alphax.local
密码AlphaXAdmin123
```
建议首次登录后立刻在账号设置中修改密码。也可以在 `.env` 中覆盖默认值:
```text
ALPHAX_BOOTSTRAP_ADMIN=1
ALPHAX_DEFAULT_ADMIN_EMAIL=your-admin@example.com
ALPHAX_DEFAULT_ADMIN_PASSWORD=change-me-to-a-strong-password
```
该初始化只会在 `app_user` 表完全为空时执行;如果你迁移了旧数据库或已经有用户,不会覆盖任何账号。
确认 Web 正常后,如果要启动调度器:
```bash
docker compose up -d alphax-scheduler
```
调度器默认 dry-run只打印计划不写库。确认日志无误后`.env` 或 compose 里的:
```text
ALPHAX_SCHEDULER_DRY_RUN=0
```
再重启:
```bash
docker compose up -d alphax-scheduler
```
## 服务说明
- `alphax-web`FastAPI + 静态页面,容器内 8190宿主机 8191。
- `alphax-scheduler`:轻量 Python 调度器,串行执行任务,避免 SQLite 并发锁。
调度任务与当前线上大致对齐:
| 任务 | 脚本 | 间隔 |
|---|---|---|
| 事件舆情 | `python -m app.services.event_driven_screener --once` | 60s |
| 价格跟踪 | `python -m app.services.price_tracker` | 180s |
| 爆发确认 | `python -m app.services.altcoin_confirm` | 600s |
| 粗筛/细筛 | `python -m app.services.altcoin_screener` | 900s |
| 舆情采集 | `python -m app.services.sentiment_monitor --collect` | 1800s |
| 复盘 | `python -m app.services.review_engine` | 24h |
## 验证命令
```bash
cd /home/ubuntu/quant_monitor/alphax-docker
python3 -m py_compile app/db/altcoin_db.py app/db/auth_db.py app/core/opportunity_lifecycle.py app/services/altcoin_screener.py app/services/altcoin_confirm.py app/services/price_tracker.py app/services/event_driven_screener.py app/services/sentiment_monitor.py app/services/review_engine.py app/web/web_server.py docker/scheduler.py scripts/validate_docker_layout.py
python3 scripts/validate_docker_layout.py
python3 scripts/validate_state_machine.py
python3 scripts/validate_push_state_flow.py
python3 scripts/validate_signal_recency.py
```
Docker 配置验证:
```bash
docker compose config
```
> 当前机器如果没有 Docker只能做离线文件/语法/DB 校验;到有 Docker 的机器上再执行 build/up。
## 数据迁移
当前副本是从线上目录复制来的,包含复制时刻的 `altcoin_monitor.db`。为了避免误影响线上,容器读写的是副本目录下的:
```text
./data/altcoin_monitor.db
```
容器内路径通过环境变量配置:
```text
ALPHAX_DB_PATH=/app/data/altcoin_monitor.db
```
如需重新以线上最新数据初始化副本,应停掉副本容器后手动复制 DB
```bash
cd /home/ubuntu/quant_monitor/alphax-docker
docker compose down
cp /home/ubuntu/quant_monitor/altcoin/altcoin_monitor.db ./data/altcoin_monitor.db
```
不要反向覆盖线上 DB。
如果旧部署的数据库还在容器内部、尚未挂载到 `./data`,可以使用迁移脚本把容器内 DB 迁移到 compose volume
```bash
cd /home/ubuntu/quant_monitor/alphax-docker
bash scripts/migrate_container_db_to_volume.sh
```
脚本会:
- 用容器内 SQLite backup API 导出一致性快照,包含 WAL 中的数据。
- 备份已有 `./data/altcoin_monitor.db``./data/backups/`
- 把容器内 DB 安装到 `./data/altcoin_monitor.db`
- 重建 `alphax-web` / `alphax-scheduler`,让容器使用 volume 中的数据库。
常用参数:
```bash
# 指定旧容器名
SOURCE_CONTAINER=old-alphax-web bash scripts/migrate_container_db_to_volume.sh
# 旧容器已经停止也可以复制主 DB如果仍在运行脚本会用更安全的 SQLite backup
ALLOW_STOPPED=1 SOURCE_CONTAINER=old-alphax-web bash scripts/migrate_container_db_to_volume.sh
# 只复制,不自动重启 compose 服务
RECREATE=0 bash scripts/migrate_container_db_to_volume.sh
# 如果脚本检测到 /app/data 已经是挂载卷但仍想强制复制
FORCE=1 bash scripts/migrate_container_db_to_volume.sh
```
如果脚本提示找不到 `alphax-web`,先查看服务器上的真实容器名:
```bash
docker compose ps
docker ps -a --format 'table {{.Names}}\t{{.Status}}\t{{.Image}}'
```
然后用真实容器名执行:
```bash
SOURCE_CONTAINER=<真实容器名> bash scripts/migrate_container_db_to_volume.sh
```
## 打包迁移到新服务器
建议只打包代码和配置骨架,不把 DB 直接打进镜像。可以用 tar 打包整个副本目录,排除本地缓存和归档备份:
```bash
cd /home/ubuntu/quant_monitor
tar --exclude='alphax-docker/.git' \
--exclude='alphax-docker/__pycache__' \
--exclude='alphax-docker/.pytest_cache' \
--exclude='alphax-docker/archive' \
-czf alphax-docker.tar.gz alphax-docker
```
如果新服务器要带初始 DB可以保留 `alphax-docker/data/altcoin_monitor.db`;如果希望空库启动,则删除该文件,容器首次启动会创建空 DB 并由 `init_db()` 补表。