前段时间工作有点闲,抽出一天时间把之前的chageci的api站点用python代码重构了一遍,使用了简单的flask框架,代码量锐减,少的我都不好意思分模块了,直接在一个py文件中搞定。
但是由于自己没学明白,只会编码而不会部署,加上linux不熟练,所以写好了代码就一直放在那里没去管它,直到叶同学跟我唠叨说要一起弄个vps做东西,我只好硬着头皮去研究flask的部署问题,没想到居然也一天搞定了,下面说说步骤。
开虚拟机
我是在azure上开了一个ubuntu的A1主机,几乎是最低配置了,跑两个个超低流量的api站点够用了
ssh
单位用的是windows电脑,客户端用的是securecrt(原谅我用的不是正版,只是找一个熟悉linux的同事要的);家里用的是mac电脑,直接命令行就可以ssh连接了:ssh -p port user@ip
部署python环境
虽然连上了linux服务器,但是对linux命令还是抓瞎,一边google一边做。ubuntu跟mac一样已经安装好了python环境,而且python3也有,挺不错。
- 安装pip
sudo apt-get install python3-pip
- 安装virtualenv
sudu pip3 install virtualenv
- 到项目目录
cd myapp
- 创建python3虚拟环境
virtualenv -p /usr/bin/python3 venv
source venv/bin/activate
pip3 install package-name
此时环境都安装完毕,用python3 app.py运行可以测试效果
web容器gunicorn
gunicorn是运行python站点的容器,可以多线程运行,是专门处理web请求的,而我们的代码则只需要专注于处理逻辑。
安装 sudu apt-get install gunicorn
运行 gunicorn app.py
这样就默认运行在本地的8000端口了,访问http://127.0.0.1:8000就可以直接访问到我们的站点,而如果需要指定一些东西可以添加参数gunicorn -w 4 -b 0.0.0.0:8000 -p rocket.pid -D api:app,-w是指定线程数,-b是监听ip和端口,如果制定为0.0.0.0则可以外网访问,但是不建议这样做,最好用默认的127.0.0.1,然后前面再添加一层反代,-D是添加为守护进程,这样在ssh超时后仍然可以运行(就像winservice)
反向代理
以前用过nignx,配置比较容易,但是同学上的是apache,似乎比nignx难一些,于是让他帮我配好一个反代站点,我也没管了。
后续问题
程序在本地运行速度很快,可是到了服务器上却很慢,差不多要几十秒,后来发现我们的程序都需要发起http请求,看日志发现这个请求消耗了几乎全部的时间,但是直接在服务器的浏览器中请求该域名却很快,原来服务器默认开通了ipv6,所以解析域名时先进行ipv6的解析,时间都消耗在这里了,把ipv6禁用掉就好了
总结
linux还是很好用的,看着命令行界面下运行任何程序都那么快,心里还是有不小的快感,学会了一些常用的命令 ls、ps、kill、rm、touch
退出virtualenv环境的命令 deactivate
使用了vim直接编辑代码测试问题,最常用的dd、i、-wq、-q!
由于我的站点是很简单的微信公众账号的api,昨天看了一下,新增了4个用户:)