博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Flask + WSGI + Nginx 云部署
阅读量:4572 次
发布时间:2019-06-08

本文共 3312 字,大约阅读时间需要 11 分钟。

这几天学着用flask写一些rest api,然后部署到云上。这个过程虽然网上有很多的教程,但还是遇到不少的问题!

采用flask的原因是因为它比较容易上手吧。用flask有专门restful api的框架,用起来简单粗暴有木有!另外,

查了一下flask的应用框架,发现用WSGI + Nginx有下面的几个优势:

  •  高性能
  • 部署比较方便,采用Nginx可以部署多个Flask的应用

在此非常感谢Ray在他的blog中提到了在阿里云上部署Flask应用。他的这篇bolg给了我很大启示(我的项目中的

目录都是按照他的做法),给出他的这篇blog的地址:

  http://www.cnblogs.com/Ray-liang/p/4173923.html

 我的python环境和python开发环境都是和ray的这篇blog提到的一样的,Ray已经写得足够好啦!

 我写一点不一样的东西,我假设你的Flask的应用已经完成,现在只是部署的问题。我的项目整体的目录如下:

---/home/www/my_flask                      | --- app                            | --- __init__.py // 包文件                            | --- ......      // 其他目录或文件                        | --- config.ini        // uwsgi文件                      | --- requiremwnt.txt   // 项目所需的pip安装包                      | --- manage.py         // Flask Script,用于启动Flask应用                      | --- logs              // Flask应用部署时的产生的log文件保存路径                      | --- venv              // 虚拟环境                            | --- bin                            | --- local                            | --- lib                            | --- pip-selfcheck.json

其中config.ini为部署uwsgi新建的文件,magnage.py为启动Flask应用所新建的文件。

安装uwsgi:

(venv) my_flask root@iZ25i0x7zadZ : pip install uwsgi

 配置uwsgi:

[uwsgi]

# uwsgi 启动时所使用的地址与端口

http-socket = 127.0.0.1:5000

# 指向网站目录

chdir = /home/www/my_flask

# python 启动程序文件

wsgi-file = manage.py 

# python 程序内用以启动的 application 变量名

callable = app

# 处理器数

processes = 4

# 线程数

threads = 2

#状态检测地址

stats = 127.0.0.1:919

由于在部署的时候,应用是rest api,采用socket的方式进行通信会存在缓存不足的情况,如果访问url,

则会出现下面的情况:

*** Stats server enabled on 127.0.0.1:919 fd: 15 ***invalid request block size: 21573 (max 4096)...skip

此时,你应该修改你的config.ini的配置,将socket修改为http-socket.这样问题就解决了。另外还有一篇

blog对这个讲得很详细:

https://emptyhammock.com/projects/info/pyweb/simple.html

uwsgi配置完成后,验证配置是否正确

$ uwsgi config.ini

 

接下来安装supervisor,

supervisor的安装

my_flask root@iZ25i0x7zadZ : sudo apt-get install supervisor

配置supervisor

在/etc/supervisor/conf.d/目录下新建my_flask.conf文件,具体配置如下:

[program:my_flask]# 启动命令入口command=uwsgi /home/www/my_flask/config.ini# 命令程序所在目录directory=/home/www/my_flask#运行命令的用户名user=rootautostart=trueautorestart=true#日志地址stdout_logfile=/home/www/my_flask/logs/uwsgi_supervisor.log

这里的command和ray的有所不同, 具体原因我现在还不太明白。但可以确定的是,在/home/www/my_flask目录

下运行uwsgi config.ini可以启动flask 应用。此外经过测试,只要命令程序所在目录正确,command的取值只需写

命令,而不需要将目录写全。

当配置好supervisor后就可以启动supervisor进行本地测试。

最后为Nginx的安装与配置:

Nginx的安装

sudo apt-get install nginx

Nginx的配置

server {         listen  8080;          server_name XXX.XX.XXX.XXX; #公网地址          location / {                include      uwsgi_params;                proxy_pass   http://127.0.0.1:5000;                uwsgi_param UWSGI_PYHOME /home/www/my_flask/venv; # 指向虚拟环境目录                uwsgi_param UWSGI_CHDIR  /home/www/my_flask; # 指向网站根目录                uwsgi_param UWSGI_SCRIPT manage; # 指定启动程序          }}

这其中和ray的另外一个不同在于proxy_pass,由于之前在配置uwsgi的时候选择了http-scoket的

方式,这样在设置代理的时候应该是proxy_pass而不是uwsgi_pass.在stackoverflow的一篇问答

中查到,貌似uwsgi不支持http的反向代理。至于其他的步骤则完全参照ray的博客。

 

【参考资料】

[1] http://www.cnblogs.com/Ray-liang/p/4173923.html

[2] https://emptyhammock.com/projects/info/pyweb/simple.html

[3] http://maximebf.com/blog/2012/10/building-websites-in-python-with-flask/#.VbsPGBOqqkq

[4] http://flask-cn.readthedocs.org/en/latest/patterns/packages/#id2

 

 

 

 

    

 

转载于:https://www.cnblogs.com/marvinzns/p/4696293.html

你可能感兴趣的文章
Node.js(六)- HTTP知识先填坑
查看>>
leetcode633- Sum of Square Numbers- easy
查看>>
linq to json for sl
查看>>
ucos ii 46个系统API函数解析
查看>>
STM8S AWU与WWD配合
查看>>
Oracle或PL/SQL自动断开连接解决参考
查看>>
设计模式目录
查看>>
Qt入门(14)——父窗口部件和子窗口部件
查看>>
SSH(spring+struts2+hibernate)XML式配置
查看>>
基于Callable和Future的匹配文件数量计算实例
查看>>
SQL SERVER拓展存储过程
查看>>
函数式接口(Functional Interface)
查看>>
HTML 5--新增的其他属性
查看>>
JAVA面对对象(四)——抽象类
查看>>
CTF资源
查看>>
阿里云 yum 源
查看>>
Fraction to Recurring Decimal
查看>>
常用js正则表达式大全
查看>>
js数组的各种方法
查看>>
win10高清屏部分软件显示模糊解决方法
查看>>