您的位置:首页 > 运维架构 > Nginx

uWSGI+Nginx部署Flask项目

2017-05-14 18:12 537 查看

前言

内部需要每天出一版数据,而每天都需要我手动打包压缩,然后上传到公司内部的文件共享服务器上,然后我再把共享文件的地址分发出去,贼TM的烦,而且作为一个IT人员感觉这种做法也贼TM的傻逼,所以就花了几天时间学习了一下flask,并完成了一个非常非常简单的系统,用来分发数据,下面主要写一下flask项目的部署问题。


环境

服务器环境:Centos

Python:2.7

具体安装过程

Flask

Flask是一个使用 Python 编写的轻量级 Web 应用框架。其 WSGI 工具箱采用 Werkzeug ,模板引擎则使用 Jinja2 。

先安装virtualenv,这个软件可以将Python环境虚拟出来,在多个工程中使用不同的Python环境,可以很好的隔离各种环境问题

pip install virtualenv


安装完成之后,在所需要部署的工程的根目录下(即manage.py所在目录),执行
virtualenv venv
,即可在当前目录下发现一个venv/目录

使用
source venv/bin/activate
命令来启用虚拟环境,启用后你当前的路径名的前面会有一个(venv)

然后我们就可以在这里安装本项目相关的Python模块了

安装Flask
pip install flask


然后就是
pip install -r flaskrelated.txt
,通过这个清单文件来统一安装所需的依赖

uWSGI

uWSGI是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议。Nginx中HttpUwsgiModule的作用是与uWSGI服务器进行交换。

执行
pip install uwsgi
进行安装

在待部署的工程的根目录下新建一个uwsgi的配置文件uwsgiconfig.ini(uwsgi支持多种配置文件格式,xml,ini,json等)

配置文件的内容如下:

[uwsgi]

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

socket = 127.0.0.1:8001

# 指向网站目录

chdir = /data/python_web_project/sfa_data_distribution/

# python 启动程序文件

wsgi-file = manage.py

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

callable = app

# 处理器数

processes = 4

# 线程数

threads = 2

#状态检测地址

stats = 127.0.0.1:9191

# 当目标文件夹中有文件内容发生变动,自动重启uwsgi

touch-reload = /data/python_web_project/sfa_data_distribution/app/


chdir是指向你的工程的根目录的,被网上一个教程坑了(也可能是我自己眼瞎,尴尬尴尬),把这里填写成工程文件所在的目录了(即:/data/python_web_project/),然后执行uwsgi的时候一直报”打开manage.py文件失败”的错。最骚的是touch-reload这个配置,配置这个选项后,当这个选项指向的目录文件有变动时,就会自动重启uwsgi以更新你的flask项目,类似热更。

最后执行
uwsgi uwsgiconfig.ini
来启动uwsgi

Nginx

Nginx (“engine x”) 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。

由于我是在centos下部署,所以安装Nginx就直接执行
yum install nginx
就可以了

配置Nginx,在centos下使用yum安装的,直接到
/etc/nginx/
目录下,然后有一个 nginx.conf文件,这个就是当前的配 置文件,修改部分如下:

server {
listen       80 default_server;
listen       [::]:80 default_server;
server_name  192.168.14.62;    #此处是你的公网IP,我这里是内部局域网的IP地址
root         /usr/share/nginx/html;

# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;

location / {
include        uwsgi_params;

uwsgi_pass     127.0.0.1:8001;    #这里要和你的uwsgiconfig.ini配置文件中的socket字段配置一致

uwsgi_param UWSGI_PYHOME /data/python_web_project/sfa_data_distribution/venv;    #工程的虚拟环境目录

uwsgi_param UWSGI_CHDIR  /data/python_web_project/sfa_data_distribution;    #工程的根目录

uwsgi_param UWSGI_SCRIPT manage:app;
}

error_page 404 /404.html;
location = /40x.html {
}

error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}


需要我们配置的几个地方,我已经注释出来了,大家可以根据自己的需要,进行修改配置。

最后启动nginx就可以啦:
nginx


在浏览器里访问以下远程主机试试:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  nginx python