2015年9月5日星期六

学习部署flask站点

前段时间工作有点闲,抽出一天时间把之前的chageci的api站点用python代码重构了一遍,使用了简单的flask框架,代码量锐减,少的我都不好意思分模块了,直接在一个py文件中搞定。
但是由于自己没学明白,只会编码而不会部署,加上linux不熟练,所以写好了代码就一直放在那里没去管它,直到叶同学跟我唠叨说要一起弄个vps做东西,我只好硬着头皮去研究flask的部署问题,没想到居然也一天搞定了,下面说说步骤。
  1. 开虚拟机 
    我是在azure上开了一个ubuntu的A1主机,几乎是最低配置了,跑两个个超低流量的api站点够用了
  2. ssh 
    单位用的是windows电脑,客户端用的是securecrt(原谅我用的不是正版,只是找一个熟悉linux的同事要的);家里用的是mac电脑,直接命令行就可以ssh连接了:ssh -p port user@ip
  3. 部署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运行可以测试效果
  4. 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)
  5. 反向代理 
    以前用过nignx,配置比较容易,但是同学上的是apache,似乎比nignx难一些,于是让他帮我配好一个反代站点,我也没管了。
  6. 后续问题 
    程序在本地运行速度很快,可是到了服务器上却很慢,差不多要几十秒,后来发现我们的程序都需要发起http请求,看日志发现这个请求消耗了几乎全部的时间,但是直接在服务器的浏览器中请求该域名却很快,原来服务器默认开通了ipv6,所以解析域名时先进行ipv6的解析,时间都消耗在这里了,把ipv6禁用掉就好了

总结

linux还是很好用的,看着命令行界面下运行任何程序都那么快,心里还是有不小的快感,学会了一些常用的命令 lspskillrmtouch 
退出virtualenv环境的命令 deactivate 
使用了vim直接编辑代码测试问题,最常用的ddi-wq-q!
最后利用周末时间详细看了一遍一个flask的文档,以前看到过,觉得看不懂,没看下去,现在看几乎全是干货,受用匪浅,强烈推荐 
https://spacewander.github.io/explore-flask-zh/index.html

由于我的站点是很简单的微信公众账号的api,昨天看了一下,新增了4个用户:)

没有评论:

发表评论