1.首先了解一下概念
wsgi
wsgi,全称是web service gateway interface(网络服务网关接口)
它不是 web sever,也不是 web application,它是在 server 和 application 之间的一种协议和规范。
WSGI 的目的就是解耦 web server 和 web application,它包括两个部分,server 和 application,
server 用来接收 web 客户端的请求,application 用来接收 server 传来的请求,然后传给 web server。
gunicorn
gunicorn是一种unix上被广泛使用并且高性能的Python WSGI UNIX HTTP Server,目前不支持windows系统
和大多数的web框架兼容,并具有实现简单,轻量级,高性能等特点。
gunicorn是实现了WSGI议的web服务器,可以使用gunicorn来得到更好的并发性能。
gunicorn配置参数
-c CONFIG:CONFIG,配置文件的路径,通过配置文件启动;生产环境使用;
-b ADDRESS:ADDRESS,ip加端口,绑定运行的主机;
-w INT, --workers INT:用于处理工作进程的数量,为正整数,默认为1;
-k STRTING, --worker-class STRTING:要使用的工作模式,默认为sync异步,可以下载eventlet和gevent并指定
--threads INT:处理请求的工作线程数,使用指定数量的线程运行每个worker。为正整数,默认为1。
--worker-connections INT:最大客户端并发数量,默认情况下这个值为1000。
--backlog int:未决连接的最大数量,即等待服务的客户的数量。默认2048个,一般不修改;
-p FILE, --pid FILE:设置pid文件的文件名,如果不设置将不会创建pid文件
--access-logfile FILE:要写入的访问日志目录
--access-logformat STRING:要写入的访问日志格式
--error-logfile FILE, --log-file FILE:要写入错误日志的文件目录。
--log-level LEVEL:错误日志输出等级。
--limit-request-line INT:HTTP请求头的行数的最大大小,此参数用于限制HTTP请求行的允许大小,默认情况下,这个值为4094。值是0~8190的数字。
--limit-request-fields INT:限制HTTP请求中请求头字段的数量。此字段用于限制请求头字段的数量以防止DDOS攻击,默认情况下,这个值为100,这个值不能超过32768
--limit-request-field-size INT:限制HTTP请求中请求头的大小,默认情况下这个值为8190字节。值是一个整数或者0,当该值为0时,表示将对请求头大小不做限制
-t INT, --timeout INT:超过这么多秒后工作将被杀掉,并重新启动。一般设定为30秒;
--daemon:是否以守护进程启动,默认false;
--chdir:在加载应用程序之前切换目录;
--graceful-timeout INT:默认情况下,这个值为30,在超时(从接收到重启信号开始)之后仍然活着的工作将被强行杀死;一般使用默认;
--keep-alive INT:在keep-alive连接上等待请求的秒数,默认情况下值为2。一般设定在1~5秒之间。
--reload:默认为False。此设置用于开发,每当应用程序发生更改时,都会导致工作重新启动。
--spew:打印服务器执行过的每一条语句,默认False。此选择为原子性的,即要么全部打印,要么全部不打印;
--check-config:显示现在的配置,默认值为False,即显示。
-e ENV, --env ENV:设置环境变量;
nginx
nginx也是一中web服务器,但是它与gunicorn还是存在差异的
nginx没有实现WSGI协议
nginx可以做请求转发,负载均衡 等等
nginx用来处理静态资源,并将动态请求转发给gunicorn
gunicorn再来处理动态请求
用一张图来了解相互之间的关系
gunicorn+flask+nginx部署
1.首先需要安装python依赖环境
使用 yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel 命令
2.安装python3
把 Python-3.7.4.tgz 文件保存在服务器上
安装建议安装在 /usr/local/python3
创建目录命令: mkdir -p /usr/local/python3
解压 Python-3.7.4.tgz文件
解压命令: tar -zxvf Python-3.7.4.tgz
3.编译安装
>>> cd Python-3.7.4
>>> ./configure --prefix=/usr/local/python3
>>> make && make install
如果make && make install 提示错误ModuleNotFoundError: No module named '_ctypes'
执行 yum install libffi-devel -y
原因:Python3中有个内置模块叫ctypes,它是Python3的外部函数库模块,它提供兼容C语言的数据类型,并通过它调用Linux系统下的共享库(Shared library),此模块需要使用CentOS7系统中外部函数库(Foreign function library)的开发链接库(头文件和链接库)。
由于在CentOS7系统中没有安装外部函数库(libffi)的开发链接库软件包,所以在安装pip的时候就报"ModuleNotFoundError: No module named '_ctypes'"。
4.创建python3软连接
>>> ln -s /usr/local/python3/bin/python3 /usr/bin/python3
5.将/usr/local/python3/bin加入PATH
>>> vi ~/.bash_profile
PATH=$PATH:%HOME/bin:/usr/local/python3/bin
export PATH
修改完后按esc,输入:wq保存退出
执行 source .bash_profile 命令,让修改的文件生效
6.创建python虚拟环境
创建一个没有pip的虚拟环境
>>> python3 -m venv --without-pip venv
激活虚拟环境
>>> source venv/bin/activate
查看python指向有没有值错
>>> which python
查看python版本
>>> python -V
开始安装pip
>>> wget https://bootstrap.pypa.io/get-pip.py
>>> python get-pip.py
查看pip版本
>>> pip -V
测试pip是否可用
>>> pip install Cython
安装环境依赖包
>>> pip install -r requirements.txt
>>> pip list
查看软件包是否安装成功
启动gunicorn
>>> gunicorn -c gunicorn.conf.py main:app -D
-D意思是后台运行
7.安装nginx
把nginx-1.9.9.tar.gz 文件放到服务器
解压压缩包
>>> tar -zxvf nginx-1.9.9.tar.gz
将解压后的文件移动到/usr/local目录下
>>> mv nginx-1.9.9 /usr/local
>>> cd /usr/local/nginx-1.9.9
配置编译安装
>>> ./configure
>>> make && make install
查看安装路径
>>> whereis nginx
cd 到安装 whereis nginx 命令输出的路径
更改nginx配置文件
到 whereis nginx 命令输出的路径下的conf目录
server{
list 80;
server_name localhost;
location / {
# root html
# index index.html index.htm
# 只需要修改这里
proxt_pass http://127.0.0.1:8000 # 这里指向的端口是gunicorn配置的端口
}
}
进入sbin目录,执行nginx文件
>>> cd sbin
>>> ./nginx
查看linux进程
>>> ps -ef | grep nginx
查看gunicorn进程
>>> pstree -ap|grep gunicorn
附件安装包
链接:https://pan.baidu.com/s/1LjjEfk1gV3qcRqU0V1iv9Q
提取码:ch13