QUANTAXIS Docker 部署完全指南:从零安装到 qa-service 一键拉起量化环境
2026/9/23 21:41:43 网站建设 项目流程
  • 金融科技
  • 后端
  • 数据分析

【免费下载链接】QUANTAXIS

QUANTAXIS 支持任务调度 分布式部署的 股票/期货/期权 数据/回测/模拟/交易/可视化/多账户 纯本地量化解决方案

项目地址:https://gitcode.com/gh_mirrors/qu/QUANTAXIS
点击查看免费下载

QUANTAXIS 是一个纯本地的股票/期货/期权量化解决方案,覆盖数据获取、回测、模拟、实盘交易、可视化与多账户管理。为了让用户跳过繁琐的环境配置,项目在docker/目录下提供了一套完整的 Docker 化部署方案,其核心是qa-service:一个把 MongoDB 数据库、RabbitMQ 事件消息队列、Jupyter 工作台、Web 可视化界面、回测与实盘服务全部预装并自动拉起的"一站式量化环境"。本指南以 docker/readme.md 为主线,结合仓库内真实的一键脚本、docker-compose 配置与镜像 Dockerfile,带你完成 Docker 安装、qa-service 环境初始化、日常使用与数据备份还原,并深入理解这套容器编排的底层原理。读完你即可在 Linux、Windows 或 macOS 上快速部署一套开箱即用的 QUANTAXIS 环境。

1. 部署总览:四步走

原文档将整套部署流程提纲挈领地分为四个阶段,这也是本指南的组织脉络:

  1. 安装 Docker:在宿主机上装好 Docker 与 Docker Compose 运行环境;
  2. 配置 qa-service 环境:创建两个数据卷(volume),并获取 docker-compose 编排文件;
  3. 拉起并开始使用:执行docker-compose up,通过网页与 Jupyter 直接开始回测、实盘与可视化;
  4. Docker 进阶:日志查看、服务状态管理、停止/删除、更新以及数据库备份还原。

如果你只想"用",完成前两步后由脚本自动完成第三步即可,完全不需要深入理解 Docker 概念;进阶部分则留给需要长期运维或二次开发的同学。

2. 安装 Docker

2.1 Linux:一键安装脚本

仓库中提供了针对 Ubuntu 等 Linux 发行版的一键安装脚本 config/install_docker.sh,其核心逻辑如下:

curl -sSL https://get.daocloud.io/docker | sh curl -L https://get.daocloud.io/docker/compose/releases/download/1.24.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose

可以看到脚本做了两件事:

  • 通过 DaoCloud 镜像源安装 Docker 引擎(比直接访问 Docker 官方源在国内网络环境更稳定);
  • 下载docker-compose 1.24.1/usr/local/bin/并赋予执行权限——qa-service 的编排文件正是基于该版本的 compose 语法编写(version: '2'),因此使用仓库提供的脚本可以保证版本兼容。

原文档给出的使用方式是:先将脚本下载到本地,然后以 root 权限执行:

sudo bash install_docker.sh

注意:该脚本仅适用于 Linux,Windows/macOS 用户请勿使用。

2.2 Windows / macOS:安装 Docker Desktop

Windows 与 macOS 下需要手动安装Docker Desktop(图形化安装包,官方渠道下载即可)。原文档特别强调了一个关键注意事项:

安装 exe 时,最后一步关于"使用 Windows container"的选项一定不要勾选

QUANTAXIS 的容器全部是基于 Linux 镜像构建的(如daocloud.io/quantaxis/qacommunity-rust-go:allin-20210218),必须以Linux container模式运行。同时,原文档也建议尽量避免在 Windows 10 以下的旧系统上部署,以免遇到兼容性问题。

安装完成后,可以在终端验证 Docker 是否可用:

docker version docker-compose version

3. 理解 qa-service:一个"预装好一切的量化环境"

qa-service 的本质是一个 Docker Compose 环境(environment),它替你预装并预拉起了 QUANTAXIS 使用所需的全部组件。原文档给出了非常明确的定位:

  • 只想使用(写回测、跑实盘、看可视化)→ 拉起 qa-service 即可,不需要学会 Docker
  • 想做二次开发(魔改源码、与现有系统集成)→ 不建议直接上 Docker,先在本地调试部署完成,再学习制作镜像以实现分发。

在你第一次使用 qa-service 之前,需要完成两项一次性预处理

  1. 创建两个 Docker 数据卷(volume)
    • qamg:存放数据库(MongoDB)的数据文件;
    • qacode:存放你编写的代码(策略/回测脚本)。
  2. 准备 docker-compose.yaml 编排文件:这是描述整个环境配置的设置文件。你不需要读懂其中的每一行,只需要把它下载到一个专属文件夹(例如D:/qa/~/quantaxis_docker/)中备用。

关于 volume,可以把它理解为Docker 级别的"可移动硬盘":容器是易失的,删除后数据随之消失;而 volume 挂载在宿主机上,数据可以跨容器生命周期持久保留。qamgqacode两个 volume只需创建一次,后续反复docker-compose up/down都不会丢失数据。

4. Linux 下使用 qa-service

4.1 第一次使用:一键脚本

Linux 用户(原文档戏称"默认精通百度搜索的男人")可以直接使用仓库中的 docker/qaservice_docker.sh。该脚本的内容非常直观:

echo "QUANTAXIS_DOCKER_SERVICE" mkdir quantaxis_docker && cd quantaxis_docker wget https://raw.githubusercontent.com/QUANTAXIS/QUANTAXIS/master/docker/qa-service/docker-compose.yaml docker volume create qamg docker volume create qacode docker-compose up -d

它依次完成了:创建专属目录quantaxis_docker→ 下载 docker/qa-service/docker-compose.yaml → 创建qamgqacode两个数据卷 → 以-d(后台守护)模式拉起整套环境。下载脚本后执行:

sudo bash qaservice_docker.sh

4.2 后续使用

后续启动/停止服务时,只需cd到存放 docker-compose.yaml 的目录(即第一次脚本创建的quantaxis_docker):

docker-compose up -d

5. Windows / macOS 下使用 qa-service

第一次使用需要手动完成四步:

第 1 步:创建两个数据卷

docker volume create --name=qamg docker volume create --name=qacode

第 2 步:下载编排文件—— 获取 docker/qa-service/docker-compose.yaml,保存到本地。

第 3 步:把它放到你心爱的专属文件夹中(例如D:/qa/),记住这个目录。

第 4 步:拉起服务

cd D:/qa # 换成你的专属目录 docker-compose up

首次执行docker-compose up会从镜像仓库拉取全部镜像,耗时较长属正常现象;中途不要中断,等待各容器完成初始化。

后续使用:先更新镜像,再启动:

cd D:/qa docker-compose pull # 更新 docker 镜像文件 docker-compose up

6. 拉起后:端口一览与三种使用姿势

6.1 端口分配

原文档给出了 qa-service 暴露的核心端口。结合 docker/qa-service/docker-compose.yaml 与 docker/qa-service/docker-compose3.yaml 两个编排文件,完整的端口映射如下:

端口服务说明
27017MongoDBQUANTAXIS 主数据库(数据文件存于qamg卷)
8888Jupyter在线写策略、跑回测的交互式工作台
8010quantaxis_webserverWeb 可视化服务
8018 / 8019 / 8028 / 8029quantaxis_webserver 辅助端口Web 服务扩展端口
81quantaxis_community社区版 Web 界面(容器内 80 端口映射到宿主机 81)
8787qa 容器开发端口社区镜像预留
61208系统监控(glances)容器资源监控界面(v3 编排中映射 61209/61208)
15672qa-eventmq 管理界面RabbitMQ 管理控制台(默认账号admin/admin
5672qa-eventmq AMQP消息队列业务端口
4369qa-eventmq epmdErlang 分布式节点端口
8011qamarketcollector实时行情采集服务(v3 编排)
8020qatrader交易网关服务(v3 编排)

6.2 三种使用姿势

环境拉起后,QUANTAXIS 已经帮你把配置环境的"脏活"全部干完,你可以直接:

  1. 通过 HTML 界面工作:浏览器访问社区版界面(端口 81)与 quantaxis_webserver(端口 8010),直接编写回测、查看回测结果、操作实盘;
  2. 通过 Jupyter 工作:访问 8888 端口打开 Jupyter Lab,在线编写与运行策略,代码默认持久化到qacode卷(/root/code);
  3. 本地 Python + 远端环境:如果你本地已有 Python 环境,可以在本地编写代码,通过网络连接 qa-service 提供的数据库(27017)与消息队列(5672),把 Docker 当作"共享基础设施"来用。

原文档还特别提醒两个观念:

  • Docker 与本地环境可以并存:有了本地 Python 并不妨碍使用 Docker,两者互不冲突;
  • Docker 的目的是快速拉起:如果你有精力把 QUANTAXIS 的各个模块全部本地部署一遍,同样欢迎——Docker 只是省事的手段,不是唯一路径。

7. 进阶运维:日志、状态、停止与更新

以下内容属于 Docker 进阶操作,看不懂、不想看可以跳过;对长期使用来说却非常实用。

7.1 查看每日数据更新日志

docker-compose 中预留了qacron(定时数据更新)服务(编排文件中以注释形式存在)。查看其日志:

docker logs cron容器名

注意:日志只输出到容器前台,如果日志对你很重要,建议使用专业的日志收集工具从 cron 容器采集。

7.2 查看服务状态

docker ps # 查看运行中的容器列表 docker stats # 实时查看各容器 CPU/内存占用 docker-compose top # 查看 compose 各服务对应的进程 docker-compose ps # 查看 compose 各服务的运行状态

7.3 停止 / 删除全部服务

原文档戏称"这两条真的超级管用,不信你可以试下":

# 停止所有容器 docker stop $(docker ps -a -q) # 删除所有容器 docker rm $(docker ps -a -q)

注意:docker rm删除的是容器本身,不会删除qamgqacode数据卷,因此你的数据库与代码不会丢失;若想连数据卷一起清理,需显式执行docker volume rm qamg qacode(务必谨慎,数据不可恢复)。

7.4 更新镜像

docker-compose pull

拉取最新镜像后,再执行docker-compose up -d即可让新配置生效。

8. 数据库备份与还原(关键数据安全)

MongoDB 数据保存在qamg卷中,下面两组命令分别完成备份与还原,全程无需进入容器。

8.1 备份(输出到宿主机当前目录,文件名dbbackup.tar

第 1 步:停止服务,避免备份过程中数据被写入:

docker-compose stop

第 2 步:利用一个临时 Alpine 容器,把qamg卷挂载为/data/db,将宿主机当前目录挂载为/backup,再打包:

docker run --rm -v qamg:/data/db \ -v $(pwd):/backup alpine \ tar zcvf /backup/dbbackup.tar /data/db

第 3 步:备份完成后重启服务:

docker-compose up -d

8.2 还原(宿主机当前目录下需存在dbbackup.tar

第 1 步:停止服务:

docker-compose stop

第 2 步:先清理旧数据目录(diagnostic.datajournalconfigdb),再从备份包解压还原:

docker run --rm -v qamg:/data/db \ -v $(pwd):/backup alpine \ sh -c "cd /data/db \ && rm -rf diagnostic.data \ && rm -rf journal \ && rm -rf configdb \ && cd / \ && tar xvf /backup/dbbackup.tar"

第 3 步:重新启动服务:

docker-compose up -d

建议将备份文件dbbackup.tar定期转移到异地存储,qamg卷只是本机数据卷,宿主机磁盘故障时仍会丢失。

9. 源码级深入:qa-service 容器编排原理

要理解 qa-service 为什么能"一键拉起一切",需要回到仓库中的编排文件与镜像构建脚本。

9.1 docker-compose.yaml 结构解析

docker/qa-service/docker-compose.yaml(compose v2 语法)定义了 5 个服务,它们在自定义网络qanetwork(子网172.19.0.0/24,网关172.19.0.1)内通过固定 IP 互联:

服务镜像固定 IP职责
qaquantaxis/qacommunity-rust-go:allin-20210218172.19.0.3社区版主容器:Jupyter(8888) + 社区界面(80→81),挂载qacode:/root/code
qaweb同上172.19.0.4Web 服务(8010 等端口),通过 wait_for_it 等待 MQ 就绪后启动 celery worker
mgdbquantaxis/qamongo_single:latest172.19.0.2MongoDB 单机实例,初始化库quantaxis,数据挂载qamg:/data/db
qaeventmqquantaxis/qaeventmq:latest172.19.0.5RabbitMQ 事件消息队列(15672/5672/4369)
qatraderquantaxis/qatrader:latest172.19.0.9交易网关(8020),等待 MQ 就绪后启动qatraderserver

关键设计点:

  • 外部卷声明volumes段使用external: true+ 固定名称qamg/qacode,这正是为什么必须先手动docker volume create的原因——Compose 不会自动创建外部卷,缺失会导致启动失败;
  • 启动顺序控制depends_on保证数据库与消息队列先于应用启动;而command: ['/root/wait_for_it.sh', 'qaeventmq:5672', '--', ...]则使用 docker/qa-service/wait_for_it.sh 脚本轮询 TCP 端口,确保 AMQP 真正就绪后才拉起业务进程(wait_for_it.sh是标准 wait-for-it 实现,支持-t超时、-s严格模式等参数,默认超时 15 秒);
  • 自愈能力:全部服务配置restart: always,进程异常退出或宿主机重启后容器自动恢复。

9.2 环境变量:容器间如何"认出彼此"

docker/qa-service/env.env(compose v3 编排通过env_file引用)集中定义了服务间的连接信息:

TZ=Asia/Shanghai # 时区 LANG=C.UTF-8 # 语言编码 MONGO_INITDB_DATABASE=quantaxis # MongoDB 初始数据库名 MONGODB=mgdb # 数据库主机名(对应 mgdb 服务) QARUN=qaweb # 运行模式 QAPUBSUB_IP=qaeventmq # 消息队列主机名 QAPUBSUB_PORT=5672 # AMQP 端口 QAPUBSUB_USER=admin # 消息队列账号 QAPUBSUB_PWD=admin # 消息队列密码 QARUN_AMQP=pyamqp://admin:admin@qaeventmq:5672// # Celery 使用的 AMQP 连接串 EventMQ_IP=qaeventmq # EventMQ 主机名

QUANTAXIS 各模块正是通过MONGODBQAPUBSUB_*这类环境变量在容器内定位彼此的——这也解释了为什么 docker 内无需修改任何配置文件即可互通。若你自定义部署拓扑(例如把消息队列换到宿主机),只需调整这些变量即可。

9.3 镜像内部:社区容器启动链路

以 docker/kite/qa-community-rust2/Dockerfile 为例,社区镜像基于 Jupyter 基础镜像构建,内置了:Python 量化全家桶(quantaxisquantaxis_webserverquantaxis_runqifimanagerqavifiservereventlet等,经 pypi 镜像安装)、Rust 工具链、Go 环境(gophernotes Jupyter 内核)、Rust Jupyter 内核(evcxr)、Keras/TensorFlow,以及定期更新脚本daily_update(内容为每周一至周五 18:18 由 cron 触发执行config/update_future.py更新期货数据)。容器入口 run-community.sh 会先根据MONGODB环境变量把QASetting.py中的localhost替换为实际的数据库主机名,再启动 Jupyter Lab 与社区界面 HTTP 服务:

sed -i "s|localhost|$MONGODB|" /opt/conda/lib/python3.8/site-packages/QUANTAXIS/QAUtil/QASetting.py jupyter lab --allow-root --notebook-dir=/root --config /root/.jupyter/jupyter_notebook_config.py & cd /root/qamazing_community && python -m http.server 80

Web 服务容器则通过 runcelery.sh 依次拉起quantaxis_webserverqifi_managerqavifiserverportfoliohandler,最后启动 Celery worker 处理回测/任务队列:

quantaxis_webserver & qifi_manager & qavifiserver & /root/portfoliohandler & celery -A quantaxis_run worker --loglevel=info

9.4 编排的两种版本

仓库在docker/qa-service/下同时提供了两个编排文件:

  • docker/qa-service/docker-compose.yaml:compose v2 语法,基础五服务,对应 docker-compose 1.24.1 一键脚本安装的版本;
  • docker/qa-service/docker-compose3.yaml:compose v3.7 语法,额外包含qamonitor(系统监控,61209/61208)、qamarketcollector(实时行情采集,8011)两个服务,并通过env_file: env.env统一注入环境变量,适合新版本 Docker Compose 与更完整的监控/采集场景。

如果你使用新版 Docker Desktop(内置较新 compose 版本),可以优先选用 v3 编排文件并重命名为docker-compose.yaml,以获得监控与实时采集能力。

10. 小结与继续阅读

一句话总结这套方案:安装 Docker → 创建两个数据卷 → 拿到 docker-compose.yaml →docker-compose up,然后浏览器打开 8888/8010/81 端口即可开始量化开发。数据库在qamg卷中持久化、代码在qacode卷中持久化,备份还原也有现成命令,整个环境可复制、可迁移、可自愈。

相关源码与文档可继续深入阅读:

  • 一键安装脚本:config/install_docker.sh
  • Linux 一键部署脚本:docker/qaservice_docker.sh
  • 基础编排文件:docker/qa-service/docker-compose.yaml
  • v3 编排文件与配置:docker/qa-service/docker-compose3.yaml、docker/qa-service/env.env
  • 就绪等待脚本:docker/qa-service/wait_for_it.sh
  • 镜像构建与启动脚本:docker/kite/qa-community-rust2/Dockerfile、docker/kite/qa-community-rust2/run-community.sh、docker/kite/qa-community-rust2/runcelery.sh
  • 事件消息队列镜像:docker/qa-eventmq/Dockerfile
  • 部署相关文档:doc/deployment/docker.md、doc/deployment/overview.md
  • Kubernetes 部署参考:docker/k8s-deployment/50-quantaxis.yaml
  • 金融科技
  • 后端
  • 数据分析

【免费下载链接】QUANTAXIS

QUANTAXIS 支持任务调度 分布式部署的 股票/期货/期权 数据/回测/模拟/交易/可视化/多账户 纯本地量化解决方案

项目地址:https://gitcode.com/gh_mirrors/qu/QUANTAXIS
点击查看免费下载

相关推荐

上一篇:deepseek-harness:为 conversation.composer 链选举引入语义阶段,解决只读 Composer 抢占挂起交互的排序缺陷
下一篇:Open WebUI 本地部署:三步把界面跑起来

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询