Gunicorn + Nginx部署FLask项目

一,系统环境

ubuntu 16.04系统,云服务器为阿里云

二, Gunicorn

Gunicorn(绿色独角兽)是一个Python WSGI的HTTP服务器
从Ruby的独角兽(Unicorn )项目移植
该Gunicorn服务器与各种Web框架兼容,实现非常简单,轻量级的资源消耗
Gunicorn直接用命令启动,不需要编写配置文件

三,Nginx

采用 C 语言编写
实现分流、转发、负载均衡

四,请求过程

在这里插入图片描述
总结:
Nginx是一个http服务器,可以做请求转发,负载均衡 (处理静态资源,并将动态请求转发给Gunicorn)
Gunicorn是一个实现了wsgi的一个处理python代码的服务器 (处理动态请求)
分析
在这里插入图片描述
在这里插入图片描述

五,相关环境安装

1.先更新 apt 相关源

sudo apt-get update

2.mysql安装

apt-get install mysql-server
apt-get install libmysqlclient-dev

3.redis安装

sudo apt-get install redis-server

4.安装虚拟环境

pip3 install virtualenv
pip3 install virtualenvwrapper

没有pip3 需要先安装pip3

sudo apt-get install python3-pip

5.安装完虚拟环境后,如果提示找不到mkvirtualenv命令,须配置环境变量:
1、打开~/.bashrc文件,并添加如下:

export WORKON_HOME=$HOME/.virtualenvs
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
source /usr/local/bin/virtualenvwrapper.sh

2、运行

source ~/.bashrc

注意:虚拟环境一点要用pip3安装

6.在python3中,创建虚拟环境

mkvirtualenv -p python3 虚拟环境名称
例 :
mkvirtualenv -p python3 py3_flask

7.使用虚拟环境的命令 :

workon 虚拟环境名称

8.flask安装(我安装的是flask-0.10.1版本)

pip install flask==0.10.1

六,配置项目所需环境

Python 项目中可以包含一个 requirements.txt 文件,用于记录所有依赖包及其精确的版本号,以便在新环境中进行部署操作。

在虚拟环境使用以下命令将当前虚拟环境中的依赖包以版本号生成至文件中:

pip freeze > requirements.txt

当需要创建这个虚拟环境的完全副本,可以创建一个新的虚拟环境,并在其上运行以下命令:(先将requirements.txt文件导入虚拟环境)

pip install -r requirements.txt

在安装 Flask-MySQLdb 的时候可能会报错,可能是依赖包没有安装,执行以下命令安装依赖包:

sudo apt-get build-dep python-mysqldb

七,安装nginx

apt-get install nginx

运行及停止

/etc/init.d/nginx start #启动
/etc/init.d/nginx stop  #停止

配置文件
编辑文件:/etc/nginx/sites-available/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;
        }
}

八,安装Gunicorn

安装

pip3 install gunicorn

运行

# -w: 表示进程(worker) -b:表示绑定ip地址和端口号(bind)
gunicorn -w 2 -b 127.0.0.1:5000 运行文件名称:Flask程序实例名 -D
例如
  gunicorn -w 2 -b 127.0.0.1:5000 manage.py:app -D

注意—D 表示后台运行
运行Gunicorn的时候,报错,报错信息如下:
SyntaxError: Non-ASCII character ‘\xe9’ in file /root/news/info/init.py on line 18, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details
首先检查看当前python版本是否为3.x,如果不是,请创建python3.x的虚拟环境
如果虚拟环境中的python版本为3.x,那么就将Gunicorn卸载,通过pip3 install gunicorn安装

九,创建数据库,进行数据库迁移

将项目文件导入虚拟环境
进入项目目录进行如下操作
以下是我的操作
进入information27目录下,然后进行数据库的初始化,生成迁移文件,迁移: (做这一步之前需要创建数据库)
在这里插入图片描述
然后还需要添加测试数据,所有的准备工作都得在这里处理。
然后就可以跑项目了(跑之前必须将所有的包都安装完,就是之前的环境安装小节中的requirements.txt安装)
在这里插入图片描述