第5章 CHAPTER 5 云服务器的配置和使用 5.1云服务器简介 币安、欧易等交易所的私有API都需要绑定IP地址才可使用,绑定方法在3.3节有介绍,家庭宽带的IP地址是经常变化的,使用代理地址也不很稳定,最好的方式是购买有独立IP地址的云主机。 云主机需要选择在国外的主机,可以选择亚马逊云平台(Amazon AWS EC2)、谷歌云平台(Google Cloud Platform)、微软的Azure主机、阿里云国际等,这些云平台在全球都有服务器部署。如果要使用币安平台,则不要选择美国IP的服务器,因为美国政府禁止币安在美开展业务。尽量选择新加坡IP、日本IP的主机。 有了云服务器后,需要指定云服务器的操作系统,建议选择最新版的Ubuntu,Ubuntu是Linux的一个发行版本,此外CentOS也是Linux流行的一个发行版本,也可以选择。无论是Ubuntu还是CentOS,创建主机后,系统就自带Python运行环境了,无须再下载并安装Python,可以直接运行自己编写的Python程序。 本书的Python程序运行环境: 服务器使用的是微软的Azure主机,操作系统是Ubuntu Server 22.04 LTS,1CPU,1GB内存,Python版本3.10.12。 5.2亚马逊AWS EC2主机申请 阿里云主机是先付费后使用,Google Cloud可以免费试用3个月、微软的Azure主机有一年试用期、亚马逊的AWS EC2主机新用户可以免费试用一年,下面我们讲解如何申请和配置AWS EC2主机。 (1) 登录亚马逊AWS官方网站,进行注册,注册时需要邮箱和信用卡,注册成功后会先扣除1美元来验证信用卡,几天后再退回。 (2) 注册后选择不同等级的服务,例如选择Free计划,如图51所示。 图51选择AWS服务等级 (3) AWS主机遍布全球,主机位置建议选择新加坡或东京,如图52所示。 图52选择AWS主机的区域 (4) 选择EC2服务,创建云主机,如图53所示。 图53选择EC2服务 (5) 进入EC2主控制台,单击Launch Instance按钮,启动实例,AWS中的实例就是云主机的意思,如图54所示。 图54启动实例 (6) 选择主机的操作系统,建议大家选择Ubuntu系统,版本选择22或20,如图55所示。 图55选择主机的操作系统 (7) 选择主机的规格,带有Free tier eligible绿色标签提醒的是免费的规格,其他规格是要收费的,如图56所示。 图56选择主机的规格 (8) 下面需要设置安全组,也就是设置主机的防火墙,确定主机对外开放的服务和端口号,安全组中的端口会对外开放,没有出现在安全组的端口则外界无法访问。 如果主机需要用到网站Web服务,则需要开放80和443端口,本书讲到的编写交易程序完全不用Web服务,只需开放一个SSH登录服务器的22号端口,如图57所示。 图57主机的防火墙设置 (9) 至此云主机的配置完成,看一下主机的详情信息,记录主机的IP地址。把这个地址写到交易所API设置页面中的IP白名单中(见2.3节),如图58所示。 图58查看主机的IP地址 (10) 登录主机使用SSH方式,需要创建一个密钥对,务必保存好这个密钥对文件,一台主机只能创建一次,如图59所示。 图59创建登录主机用的密钥对 (11) 生成的密钥对文件是一个以pem为扩展名的文件,把这个文件复制到计算机C盘的用户目录,在其他位置用密钥对登录会报权限错误,首先打开C盘,找到“用户”文件夹,如图510所示。 (12) 找到计算机中的用户名目录,如图511所示。 (13) 把密钥文件复制到这个目录,如图512所示。 (14) 打开命令行窗口,单击Windows窗口最下面的任务栏中的搜索图标,输入cmd,然后选择“命令行提示符系统”,如图513所示。 (15) SSH登录云主机的命令格式: ssh i密钥对文件名ubuntu@IP地址,如图514所示。 (16) SSH登录成功界面如图515所示。 图510找到C盘用户目录 图511找到计算机中的用户名目录 图512把密钥文件复制到这个目录 图513打开命令行窗口 图514SSH登录云主机 图515SSH登录云主机成功界面 5.3Linux系统简介 Linux是一个开源的操作系统,Linux 遵循 GNU 通用公共许可证(GPL),任何个人和机构都可以自由地使用 Linux 的所有底层源代码,也可以自由地修改和再发布。 5.4Linux系统目录结构 不同于Windows系统把磁盘分为C盘和D盘的模式,Linux的文件就是一个完整的树形结构,如图516所示。 图516Linux文件目录结构 Linux的目录系统非常庞大,层次很深,这里只介绍一些最常用的目录,见表51。 表51Linux目录介绍 目 录 名 称 描述 / 根目录 /root 系统管理员主目录 /home 普通用户主目录都在这个目录下面 /home/ubuntu Ubuntu用户的主目录 /bin 存放系统命令程序 /sbin 存放系统管理员使用的命令 /var 存放经常修改的数据,例如程序运行的日志文件 /usr 存放用户应用程序,类似于Windows系统的Program Files目录 /lib 存放基本代码库,例如C++库文件 下面介绍几个目录操作指令,登录Ubuntu系统后,当前位置是/home/ubuntu。显示当前目录,首先输入cmd,然后按键盘的Enter键,指令如下: cmd 运行结果如下: /home/ubuntu 回到上一级目录,首先输入cd ..,然后按键盘的Enter键,指令如下: cd .. 当前目录就可变为/home。 进入下一级目录,首先输入cd目录名,然后按键盘的Enter键,指令如下: cd ubuntu 当前目录就变为/home/ubuntu。 上面两个命令,使用的都是基于当前位置的相对路径,如果使用绝对路径(绝对路径就是包含了从根目录开始的完整路径),则可以进入任意目录,现在当前路径是/home/ubuntu,我们想进入/var/log目录,输入cd 带有根目录的完整目录名,然后按键盘的Enter键,指令如下: cd /var/log 当前目录就变为/var/log。 5.5Linux常用操作指令 Linux系统没有Windows系统那样的图形界面,所有操作都需要通过在命令行输入指令来完成,指令非常多,用法也比较复杂,本节仅介绍与创建交易程序、运行交易程序相关的指令。 5.5.1创建目录指令 创建目录的指令为mkdir,用这个指令创建一个book目录,指令如下: mkdir book 5.5.2改变目录指令 进入下一级的book目录,指令如下: cd book 返回上一级目录,指令如下: cd .. 跳到任意目录,需要使用绝对路径,绝对路径就是从根目录起始的一个完整的路径,例如要进入/home/ubuntu这个目录,无论当前处于哪个目录内都可以使用绝对径路来跳转目录,指令如下: cd /home/ubuntu 5.5.3显示目录中包含的文件和子目录的指令 显示当前目录下的文件及目录内容,首先输入ls,然后按Enter键,当ls后面没有参数时,只显示文件名或目录名的简要信息,指令如下: ls 如果需要以列表形式显示当前目录中的文件和目录细节信息,则需要在ls后加上参数l,指令如下: ls -l 运行结果如图517所示。 图517显示目录内容 5.5.4创建Python程序文件指令 Linux系统自带一个编辑工具,叫作vim,可以用来创建和编辑文本文件及代码文件,早期的Linux内置的编辑工具是vi,vim是vi的升级版,下面我们在云服务器上创建一段设置欧易杠杆倍数的代码,并在服务器端运行。按快捷键Ctrl+C复制源代码,代码如下: from okx import Account apiKey = "2a076334-82ca-44a8-9971-fbf556862d44" apiSecretKey = "EE51E9F072DE8B6DB7A41F4EF5E3CFB5" passphrase = "Hello2020!" #flag:0实盘;flag:1模拟盘 accountAPI = Account.AccountAPI(apiKey, apiSecretKey, passphrase, False, flag="1") #instId:交易对;lever:杠杆倍数; mgnMode:逐仓模式 result = accountAPI.set_leverage(instId="BTC-USDT", lever="5", mgnMode="isolated") print(result) 在服务器端的命令行窗口,输入vim指令创建这个Python程序文件,Python程序的扩展名都是.py,指令如下: vim testOkLeverage.py 运行结果如图518所示,现在就创建了一个代码编辑界面,在这个界面里录入代码。 图518vim编辑界面 vim有3种模式: 命令模式、输入模式和底线命令模式。输入vim指令后看到的上面界面就处于命令模式,命令模式下无法输入字符。 注意: 此时计算机端的输入法要保持英文输入法状态,然后按键盘的I键,I就是vim的输入指令,此时编辑区最下面一行出现了INSERT,此时就可以录入字符了,如图519所示。 图519vim输入模式界面 然后右击便可粘贴代码,粘贴代码后Python程序源代码就出现在vim编辑区了,如图520所示。 图520vim粘贴代码界面 代码粘贴完成后,按键盘的Esc键,令vim切换回命令模式,然后按键盘的组合键Shift+: 进入底线命令行模式,然后在: 后面输入wq指令,保存并退出,w是write的首字母,保存的意思,q是quit的首字母,退出的意思,如图521所示。 图521vim底线命令行模式界面 5.5.5运行Python程序文件指令 Ubuntu系统下的Python程序名是Python3,而CentOS下是Python,运行5.5.4节创建的代码文件testOkLeverage.py,程序运行结果会显示在服务器命令行窗口中,注意: python3 和要运行的程序文件名之间要有一个空格,输入完成后按Enter键,即可运行这个Python程序,指令如下: python3 testOkLeverage.py 5.5.6程序运行结果保存到日志文件指令 如果需要把程序运行结果保存到日志文件中,则可以在运行程序指令的后面加上一个重定向符>,这样原本在窗口内输出的内容就会重定向到日志文件中,指令如下: python3 testOkLeverage.py > 日志.log 5.5.7中止程序运行 一般的程序,运行结束后就自动退出了,但有的程序是无限循环运行的,例如接收交易所行情推送指令的程序,中止程序运行可以关闭命令行窗口,也可以按键盘的快捷键Ctrl+C。 5.5.8程序后台运行指令 如果需要一个程序24h不间断地运行,并且关闭SSH登录窗口也不会中断程序的运行,就需要用后台运行指令nohup配合&符号,指令如下: nohup python3 getOkKline.py > kline.log 2>&1 & 5.5.9查看后台运行程序的指令 查看后台程序的指令为ps,Linux系统的后台程序非常多,要在众多程序信息中筛选出需要看到的程序名,需要结合grep过滤指令,中间的|符号是管道符,功能是把左侧指令的运行结果作为右侧指令的输入,指令如下: ps ax | grep getOk 运行结果如图522所示。 图522查看后台运行程序的界面 查询结果的第1行就是我们启动的getOkline.py程序的信息,473145就是进程号。 5.5.10关闭后台运行程序的指令 关闭一个后台程序的指令是kill,后面加上该程序对应的进程号参数就可以关闭这个程序,指令如下: kill 473145 5.5.11删除文件或目录的指令 删除文件和目录都使用rm指令,删除文件的指令如下: rm 文件名 #例子 rm okTest.py 删除目录是很危险的指令,使用时一定要小心,删除目录的指令如下: rm -r 目录名 #例子 rm -r books 5.5.12移动文件或目录的指令 移动文件(如果在同一个目录下移动文件,则实际效果就是给文件改名)和目录都使用rm指令,指令如下: mv 旧文件名 新文件名 #改名例子 mv okTest.py okTest2.py#将文件改名为okTest2.py #移动位置的例子,把okTest2.py文件移动到上一级目录 mv okTest2.py .. 5.5.13查看文本文件内容指令 vim是编辑文本文件内容的工具,而如果只想查看文本文件内容,不进行编辑修改,则可以使用cat指令,指令格式如下: cat 文件名 #例子 cat telegramBot.log 5.5.14查看文本文件头部内容指令 查看文本文件头部内容的指令如下: head 文件名 #例子1,默认显示前10行 head telegramBot.log #例子2,显示前20行 head -n 20 telegramBot.log 5.5.15查看文本文件尾部内容指令 查看文本文件尾部内容的指令如下: tail 文件名 #例子1,默认显示最后10行 tail telegramBot.log #例子2,显示最后20行 tail -n 20 telegramBot.log 5.6Git指令介绍 在Linux系统下使用vim编辑代码,要记住大量的操作指令和快捷键,操作非常不方便。更好的方式是在我们的计算机上用集成开发工具VS Code编写好代码,然后利用Git指令把代码同步(push)到Gitee仓库,我们的云服务器端再从Gitee仓库拉取最新代码(pull),本节介绍Git的基本使用方法。操作流程如图523所示。 图523代码同步的操作流程 5.6.1计算机端安装Git 打开Git官网,下载计算机操作系统对应的版本,下载界面如图524所示。 图524Git官网下载界面 下载并安装成功后,打开命令行窗口,输入的指令如下: git 如果看到如图525所示的界面,则说明安装Git成功。 图525Git运行界面 5.6.2服务器端安装Git Ubuntu下包管理器程序是apt,安装软件的指令是apt install 软件名,安装Git需要使用最高管理员(root)权限,所以在指令前要加sudo,安装Git的指令如下: sudo apt update sudo apt install git 检查是否安装成功,输入 git version命令,运行结果如图526所示。 图526服务器端Git运行界面 5.6.3注册Gitee账号并创建仓库 Gitee是国内最大的软件代码托管平台,个人使用是完全免费的,注册好账号后,新建一个仓库,输入仓库名称,选择仓库类型,例如选择私有,分支模型选择单分支,最后单击“创建”按钮创建仓库,如图527所示。 图527Gitee创建仓库界面 5.6.4计算机端创建仓库 首先进入代码所在文件夹,打开命令行窗口,输入以下Git的账号、邮箱等全局配置指令,指令如下: git config --global user.name "ninki51" git config --global user.email "2556792125@qq.com" 创建仓库的指令如下: git init git add . git commit -m "第1次提交" git remote add origin https://gitee.com/ninki_admin/book.git git push -u origin master 5.6.5服务器端拉取仓库代码 首次拉取代码使用git clone指令会在服务器建立一个以仓库名命名的目录,并把代码都下载到这个目录中,指令如下: git clone https://gitee.com/ninki_admin/book.git 以后我们修改计算机端的本地仓库代码,并提交(push)到Gitee仓库后,服务器端可以使用git pull指令来同步最新的有变化的代码,指令如下: git pull