# 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()` 补表。