第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计划,如图51所示。




图51选择AWS服务等级


(3) AWS主机遍布全球,主机位置建议选择新加坡或东京,如图52所示。




图52选择AWS主机的区域



(4) 选择EC2服务,创建云主机,如图53所示。




图53选择EC2服务




(5) 进入EC2主控制台,单击Launch Instance按钮,启动实例,AWS中的实例就是云主机的意思,如图54所示。




图54启动实例



(6) 选择主机的操作系统,建议大家选择Ubuntu系统,版本选择22或20,如图55所示。




图55选择主机的操作系统



(7) 选择主机的规格,带有Free tier eligible绿色标签提醒的是免费的规格,其他规格是要收费的,如图56所示。




图56选择主机的规格



(8) 下面需要设置安全组,也就是设置主机的防火墙,确定主机对外开放的服务和端口号,安全组中的端口会对外开放,没有出现在安全组的端口则外界无法访问。

如果主机需要用到网站Web服务,则需要开放80和443端口,本书讲到的编写交易程序完全不用Web服务,只需开放一个SSH登录服务器的22号端口,如图57所示。




图57主机的防火墙设置



(9) 至此云主机的配置完成,看一下主机的详情信息,记录主机的IP地址。把这个地址写到交易所API设置页面中的IP白名单中(见2.3节),如图58所示。




图58查看主机的IP地址




(10) 登录主机使用SSH方式,需要创建一个密钥对,务必保存好这个密钥对文件,一台主机只能创建一次,如图59所示。




图59创建登录主机用的密钥对



(11) 生成的密钥对文件是一个以pem为扩展名的文件,把这个文件复制到计算机C盘的用户目录,在其他位置用密钥对登录会报权限错误,首先打开C盘,找到“用户”文件夹,如图510所示。

(12) 找到计算机中的用户名目录,如图511所示。

(13) 把密钥文件复制到这个目录,如图512所示。

(14) 打开命令行窗口,单击Windows窗口最下面的任务栏中的搜索图标,输入cmd,然后选择“命令行提示符系统”,如图513所示。

(15) SSH登录云主机的命令格式:  ssh i密钥对文件名ubuntu@IP地址,如图514所示。

(16) SSH登录成功界面如图515所示。



图510找到C盘用户目录





图511找到计算机中的用户名目录





图512把密钥文件复制到这个目录







图513打开命令行窗口







图514SSH登录云主机






图515SSH登录云主机成功界面



5.3Linux系统简介

Linux是一个开源的操作系统,Linux 遵循 GNU 通用公共许可证(GPL),任何个人和机构都可以自由地使用 Linux 的所有底层源代码,也可以自由地修改和再发布。


5.4Linux系统目录结构

不同于Windows系统把磁盘分为C盘和D盘的模式,Linux的文件就是一个完整的树形结构,如图516所示。




图516Linux文件目录结构



Linux的目录系统非常庞大,层次很深,这里只介绍一些最常用的目录,见表51。


表51Linux目录介绍



目 录 名 称
描述




/
根目录
/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



运行结果如图517所示。




图517显示目录内容



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



运行结果如图518所示,现在就创建了一个代码编辑界面,在这个界面里录入代码。




图518vim编辑界面


vim有3种模式: 命令模式、输入模式和底线命令模式。输入vim指令后看到的上面界面就处于命令模式,命令模式下无法输入字符。

注意: 此时计算机端的输入法要保持英文输入法状态,然后按键盘的I键,I就是vim的输入指令,此时编辑区最下面一行出现了INSERT,此时就可以录入字符了,如图519所示。




图519vim输入模式界面


然后右击便可粘贴代码,粘贴代码后Python程序源代码就出现在vim编辑区了,如图520所示。




图520vim粘贴代码界面



代码粘贴完成后,按键盘的Esc键,令vim切换回命令模式,然后按键盘的组合键Shift+: 进入底线命令行模式,然后在: 后面输入wq指令,保存并退出,w是write的首字母,保存的意思,q是quit的首字母,退出的意思,如图521所示。




图521vim底线命令行模式界面



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



运行结果如图522所示。




图522查看后台运行程序的界面


查询结果的第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的基本使用方法。操作流程如图523所示。




图523代码同步的操作流程




5.6.1计算机端安装Git

打开Git官网,下载计算机操作系统对应的版本,下载界面如图524所示。




图524Git官网下载界面



下载并安装成功后,打开命令行窗口,输入的指令如下: 


git



如果看到如图525所示的界面,则说明安装Git成功。




图525Git运行界面



5.6.2服务器端安装Git

Ubuntu下包管理器程序是apt,安装软件的指令是apt install 软件名,安装Git需要使用最高管理员(root)权限,所以在指令前要加sudo,安装Git的指令如下: 


sudo apt update

sudo apt install git



检查是否安装成功,输入 git version命令,运行结果如图526所示。




图526服务器端Git运行界面




5.6.3注册Gitee账号并创建仓库

Gitee是国内最大的软件代码托管平台,个人使用是完全免费的,注册好账号后,新建一个仓库,输入仓库名称,选择仓库类型,例如选择私有,分支模型选择单分支,最后单击“创建”按钮创建仓库,如图527所示。




图527Gitee创建仓库界面



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