flask-nginx-gunicorn 部署python flask项目

Python Flask项目部署教程
本文介绍了Python Flask项目的部署过程。先创建项目文件夹和虚拟环境,测试Flask安装并编写简单web服务。因Flask自带服务器在生产环境性能不足,采用gunicorn部署Python。又因Gunicorn对静态文件支持不佳,安装Nginx作为反向代理服务器,还提及数据库模块安装的版本问题。

nginx 是一个高性能的web服务器,通常用来在前端做反向代理服务器。所谓正向与反向(reverse),只是英文说法翻译。代理服务,简而言之,一个请求经过代理服务器从局域网发出,然后到达互联网上服务器,这个过程的代理为正向代理。如果一个请求,从互联网过来,先进入代理服务器,再由代理服务器转发给局域网的目标服务器,这个时候,代理服务器为反向代理(相对正向而言)。nginx的作用就是分流,转发,负载均衡,来分到服务器的压力。

webservice 的方式同样也有很多方式。常见的有FastCGIWSGI等。我们采用gunicorn为 wsgi容器。

python为服务器script,采用flask框架。同时采用supervisor管理服务器进程。也就是最终的部署方式为:

1、创建一个文件夹,存放你的项目

mkdir myproject

2、创建虚拟环境

用来在一个系统中创建不同的 python 隔离环境。相互之间还不会影响,使用简单到令人发指。

进入项目文件夹,并创建虚拟环境

cd myproject
virtualenv venv

创建虚拟环境之后就可以激活了

source venv/bin/activate

通过deactivate退出虚拟环境

3、项目测试

安装flask框架

pip install flask

测试我们的 flask 安装是否成功,并使用 flask 写一个简单的 web 服务。
vim myapp.py

from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
    return 'hello world'
if __name__ == '__main__':
    app.debug = True
    app.run()

启动flask

python myapp.py

这样在127.0.0.0:5000就能看到你的本地项目了

4、使用gunicorn部署python web

现在我们使用 flask 自带的服务器,完成了 web 服务的启动。生产环境下,flask 自带的 服务器,无法满足性能要求。我们这里采用 gunicorn 做 wsgi容器,用来部署 python。

安装gunicorn

 pip install gunicorn

pip 是一个重要的工具,python 用来管理包。还有一个最佳生产就是每次使用 pip 安装的库,都写入一个 requirement 文件里面,既能知道自己安装了什么库,也方便别人部署时,安装相应的库。

 pip freeze > requirements.txt

以后每次 pip 安装了新的库的时候,都需freeze 一次。

如果有很多包的话,我们就不用手动安装了,通过执行requirements.txt

就可以一次性安装了。

pip install -r requirements.txt

当我们安装好 gunicorn 之后,需要用 gunicorn 启动 flask,注意 flask 里面的name里面的代码启动了 app.run(),这个含义是用 flask 自带的服务器启动 app。这里我们使用了 gunicorn,myapp.py 就等同于一个库文件,被 gunicorn 调用。

 gunicron -w4 -b0.0.0.0:8000 myapp:app

此时,我们需要用 8000 的端口进行访问,原先的5000并没有启用。其中 gunicorn 的部署中,,-w 表示开启多少个 worker,-b 表示 gunicorn 开发的访问地址。

5、安装Nginx

Gunicorn对静态文件的支持不太好,所以生产环境下常用Nginx作为反向代理服务器。

安装

sudo apt-get install nginx

启动

sudo /etc/init.d/nginx start

修改配置文件

先找到文件/etc/nginx/sites-available/default,将原来的default删除,然后重新新建一个default文件,文件内容如下:

# 如果是多台服务器的话,则在此配置,并修改 location 节点下面的 proxy_pass 
upstream flask {
        server 127.0.0.1:5000;
        server 127.0.0.1:5001;
}
server {
        # 监听80端口
        listen 80 default_server;
        listen [::]:80 default_server;

        root /var/www/html;

        index index.html index.htm index.nginx-debian.html;

        server_name _;

        location / {
                # 请求转发到gunicorn服务器
                proxy_pass http://127.0.0.1:5000;
                # 请求转发到多个gunicorn服务器
                # proxy_pass http://flask;
                # 设置请求头,并将头信息传递给服务器端 
                proxy_set_header Host $host;
                # 设置请求头,传递原始请求ip给 gunicorn 服务器
                proxy_set_header X-Real-IP $remote_addr;
        }
}

在浏览器的网址上输入你的服务器地址,就能访问到你的项目了

如上是检验的测试代码是否能正确部署,如果要部署自己的项目,那就通过git clone http:// 你的git项目地址

 gunicron -w4 -b0.0.0.0:8000 此处为项目的主程序入口:app

注:在部署到服务器时,由于版本的问题,MySQLdb模块显示无法安装,并且pip安装也提示版本问题,

原因在于python2和python3在数据库模块支持这里存在区别,python2是mysqldb,而到了python3就变成mysqlclient,pip install mysqlclient即可。

文章参考:

python3提示错误“ImportError: No module named 'MySQLdb'”_importerror: no module named 'mysqldb' 3.5.2-优快云博客
https://www.jianshu.com/p/be9dd421fb8d

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值