发布于vn.py社区公众号【vnpy-community】
 
原文作者:李思佳 | 发布时间:2023-06-12
 

更新于月前的VeighNa 3.7.0版本新增了量化交易容器解决方案VeighNa Docker,《VeighNa发布v3.7.0 - 量化交易容器解决方案VeighNa Docker!》一文中,介绍了在Linux服务器环境下的VeighNa Docker安装步骤。

与前文不同的是,本文是基于Windows操作系统WSL2环境下的 VeighNa Docker安装指南。文章以Windows 10为示例操作系统,Windows11系统的操作方式与之类似,尽管存在细微差异,但无需担心操作系统版本差异会导致安装步骤发生巨大变化。

同时,文章使用的Ubuntu为22.04 LTS版本,请谨慎选择其他版本作为Linux发行版的部署(可能细节步骤差异较大)。需要特别注意的是,部分Windows操作系统自带的WSL并不足以支持接下来的操作,请务必确保跟随指南完成WSL2的部署再进行Docker安装。

如果已经有完整的WSL2部署,可从【基于Ubuntu的Docker安装】开始;如果也已经完成了Docker的正确安装且完成了中文环境的配置,可直接从【VeighNa Docker安装开始】。

 
内容目录

1.虚拟环境部署

2.WSL2及Ubuntu部署

3.基于Ubuntu的Docker安装

4.Docker中文环境配置

5.VeighNa Docker安装

 

虚拟环境部署

 

1.1. 检查Windows操作系统内部版本,在命令提示符(CMD)中运行winver命令,会弹出如下图的窗口:

description

请检查【操作系统内部版本】,确保内部版本在19041及以上。若版本过低,推荐使用Windows官方更新助手,更新过程中,系统可能会多次重启。

 
1.2. 查看CPU的虚拟化支持特性:进入任务管理器,点击导航栏中的“性能”进入如图所示的界面。注意右下角“虚拟化”一栏状态是否为“已启用”。

description

若显示【已禁用】,请耐心进行如下操作:

  • 进入BIOS

    • 作者使用的Surface笔记本可以通过长按启动按键进入BIOS,不同型号电脑的进入方式存在差异,请根据机型进行本步操作;
  • 找到Virtualization TechnologIntel Virtualization Technology选项

    • 各类型电脑中的该选项所在位置存在差异,可能位于Configuration选项、Security选项、system configuration选项或者Advanced选项下;
  • 选择上述选项

    • 在弹出的窗口中选择“Enabled”选项,并敲击回车进行确定,启用CPU虚拟化;
  • 更改完成后,要进行保存才能够生效

    • 按键盘上的启动按键或在BIOS中进入“Exit”选项,在弹出保存更改的窗口选择yes选项,随后电脑就会重启,回到任务管理器对应窗口看到“虚拟化已启用”即完成CPU虚拟化启用。

 
1.3. 在“控制面板\程序\程序和功能”中打开“启用或关闭Windows功能”,并勾选【适用于Linux的Windows子系统】和【虚拟机平台】,点击确认键退出页面。

description

 

WSL2及Ubuntu部署

 

2.1. 下载WSL2需要使用的Linux内核:

适用于x64计算机的WSL2 Linux内核更新包下载

下载完成后,双击运行更新包,系统将提示需要管理员权限,选择【是】以批准此安装;

 

2.2. 将WSL2设置为默认版本并更新到latest版本,管理员权限下在命令提示符(CMD)中运行命令:

wsl --set-default-version 2
wsl --update

 
2.3. 安装Ubuntu 22.04 LTS:

打开Microsoft Store,查找Ubuntu 22.04.2 LTS并获取下载安装,请注意,不要在本步骤立即启动该Linux分发:

description

 
2.4. 运行以下命令,注销并卸载以前的Linux版本,以便重新安装干净的Linux(Ubuntu):

wsl -l -v
wsl --list --all
--unregister Ubuntu-22.04
--unregister docker-desktop
--unregister docker-desktop-data

运行结果如下图所示:

description

 

2.5. 以管理员身份运行Ubuntu 22.04.2 LTS.exe:

首次启动新安装的 Linux 分发版时,将打开一个命令行窗口,系统会要求等待一分钟或两分钟,以便文件解压缩并存储到电脑上,后续每次使用时的启动时间通常不到一秒;

 
2.6. 为新的 Linux 分发版创建用户帐户和密码:

当完成文件解压存储后,Ubuntu将显示“Enter new UNIX username:”,用户可以按照要求进行用户名的设置。需要注意的是,用户名的表达规则需要符合Ubuntu对命名规定的正则表达式(#NAMEREGEX="^[a-z][-a-z0-9]*\$"),即用户名:

  • 首字符必须为小写的a到z小写字母
  • 用户名不限长度
  • 除首字符,可使用"-"字符以及任意小写字母和0-9范围内的数字组成其他字符
  • 如果不想按照规则进行用户名命名,则可以用“username --force-badname”的方式命名,--force-badname是弱检查命令,即使用的命名不符合规则仍可记录为合法的用户名

完成用户名设置后,Ubuntu将提示用户设定相应的“New password”,并需要再次输入以确认密码。请注意,在Ubuntu中的密码设置,即便键入任意字符密码也不会显示在屏幕上,这并不是没有输入,只是没有打印在屏幕上,因此建议用户不要设置过于复杂的密码。密码设置成功后,Ubuntu将输出日志,如图所示,当带用户名的可操作命令行出现时则可认为成功安装并设置了与 Windows 操作系统集成的 Linux 分发:

description

 
2.7. 更新系统上的软件包,在Ubuntu命令面板中使用命令:

sudo apt-get update

至此,WSL2及Ubuntu的部署已经完成,如果依照流程仍然无法顺利运行Ubuntu,请参考WSL官方的疑难解答排查原因并重新安装Ubuntu。另外,Ubuntu终端下Windows快捷键是无法使用的,可使用鼠标右键粘贴命令到Ubuntu命令面板。

 

基于Ubuntu的Doceker Desktop安装

 

3.1. 在官网下载Docker Desktop并安装:

https://www.docker.com/products/docker-desktop/

 

3.2. 运行Docker Desktop并更改如下设置项:

  • Docker Engine

    • 增加镜像源地址,此处使用163源,也可以在"registry-mirrors"内添加其他镜像源地址:
{  "insecure-registries": [],
   "registry-mirrors": [
    "http://hub-mirror.c.163.com"
   ]
}
  • Resources:WSL integration

    • 如图,取消“Enable integration with my default WSL distro”选项,并开启“Enable integration with additional distros:”下对应发行版集成开关:

description

  • 更改完成后点击右下角“Apply & restart”以保存设置

 
3.3. 验证Docker Desktop与Ubuntu集成。在Ubuntu终端运行命令:

sudo docker run hello-world

description

在Ubuntu终端看到"Hello from Docker!"信息,并且在Docker Desktop中Containers列表中看到一个如下图被随机命名且镜像为“hello-world”的容器,则说明Docker安装无误,可以进行下一步操作。

description

与在Linux服务器环境下操作不同的是,WSL2环境下的用户本地存在X server,默认不做访问控制,因此无需像Linux环境在每次重启系统后必须运行xhost相关命令以开放权限。特殊情况需要解除访问控制,则运行命令:

apt-get install x11-xserver-utils
xhost +

description

 

WSL中文环境配置

 

WSL的中文环境设定并非必须在VeighNa Docker安装前完成,用户可在安装完毕后进行。但需注意,未执行此步骤,VeighNa Docker中的中文字符可能会出现乱码。

 
4.1. 安装中文字库及中文语言包:

apt install fonts-noto-cjk
sudo apt install language-pack-zh-hans language-pack-zh-hans-base

 
4.2. 设置操作系统语言为UTF-8,该设置将在终端重启后生效:

echo "LANG=zh_CN.UTF-8" >> ~/.profile

 
4.3. 设置整个操作系统的默认语言为中文:

sudo dpkg-reconfigure locales

此时将出现软件包设置页面,如下图所示:

description

使用方向键滚动找到zh_CN.UTF-8后,点击空格键选中,然后用Tab键切换至【确定】。

 

VeighNa Docker安装

 

5.1. 在ubuntu用户下创建文件夹:

mkdir trader
ls

可将"trader"更改为任意文件夹名称,以该命名的文件夹为例(此后文章均使用此例),输出结果如下图:

description

后续如果想要删除文件请使用如下命令。注意,如果在文件夹内的文件,请提供路径和文件名称来进行删除操作:

sudo rm -f trader

 

5.2. 进入新建的文件夹,在该文件夹下创建文件run.py,并检查是否创建成功:

cd trader
touch run.py
ls

description

 
5.3. 可以通过"cd .."回到上一级目录,通过"pwd"及"cd -"均可显示当前文件路径,记录文件路径或者文件夹路径,以便后续操作;

 
5.4. 使用nano(或者其他习惯使用的编辑器软件)打开创建的run.py文件:

sudo nano /user/trader/run.py

打开run.py文件后,在Ubuntu命令面板内右键粘贴以下内容:

from vnpy.event import EventEngine
from vnpy.trader.engine import MainEngine
from vnpy.trader.ui import MainWindow, create_qapp

from vnpy_ctp import CtpGateway
from vnpy_ctastrategy import CtaStrategyApp
from vnpy_ctabacktester import CtaBacktesterApp


def main():
    """Start VeighNa Trader"""
    qapp = create_qapp()

    event_engine = EventEngine()
    main_engine = MainEngine(event_engine)

    main_engine.add_gateway(CtpGateway)
    main_engine.add_app(CtaStrategyApp)
    main_engine.add_app(CtaBacktesterApp)

    main_window = MainWindow(main_engine, event_engine)
    main_window.showMaximized()

    qapp.exec()


if __name__ == "__main__":
    main()

请注意,对run.py进行更改后的退出方法不是通过右上角的关闭按钮,请确保run.py文件内容已经保存后,根据编辑器使用快捷键从文件编辑页面退回到命令面板。

 
5.5. 使用下列命令运行run.py文件:

docker run \
-e DISPLAY=$DISPLAY \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-v /home/user/trader:/home \
veighna/veighna:3.7 python3 run.py

description

如果是首次运行,Docker引擎会自动从Docker Hub网站上下载拉取veighna/veighna:3.7镜像(大约几分钟的时间,取决于网络带宽),并在下载完成后直接启动容器,此时就可以看到熟悉的VeighNa Trader界面了:

description

同时,在Docker Desktop容器列表中会出现镜像名为 “veighna/veighna:3.7” 的容器实例,此后启动VeighNa Docker可直接点击容器右侧Action的播放键以运行,无需反复通过命令行在终端进行操作。

description

如果发现VeighNa Docker界面中出现中文乱码,请回到前面的WSL中文环境配置步骤检查语言配置。