开门见山,这里介绍下当前部署python web项目的主流架构之一:nginx+gunicorn+gevent+webapp。
下面将一一对每个模块进行部署相关讲解(主要是配置方面)。
1、nginx
nginx("engine x")基本大家都听过,但很多人会读错, 是一款性能非常优秀的轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。这玩意如果要完全吃透,不是一篇博客能搞定的。
这里只简单的介绍下最简单的反向代理的写法。直接上配置文件:
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for" "$request_time" "$upstream_response_time"';
server { listen 80; server_name *.com; #碰到域名 则直接用nginx来解析 access_log host.access.log main; proxy_ignore_client_abort on; location ~ /static/ { root /var/www; } location ~ / { proxy_set_header Host $host; proxy_pass http://127.0.0.1:8008; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
2、gunicorn
a、安装:pip install gunicorn
b、配置文件(此配置文件一般置于项目的主目录下)假如命名为:guni.conf:
# 运行web服务的IP以及端口 bind = '127.0.0.1:8000' #同时的并发工作进程数量(视服务器cpu数量而定) workers = 4 #工作模式,可以为'sync', 'gevent'等。 worker_class = "gevent" # 可以同时打开的链接数 worker_connections = 1000 #超时时间设置 timeout = 20 #使用gunicorn启动的进程名称 proc_name = 'gunicorn.proc' #pid 保存文件 pidfile = '/tmp/gunicorn.pid' #gunicorn日志文件 logfile = '/var/log/gunicorn.log' #日志级别 loglevel = 'debug' #是否app层先启动 preload_app = True #当有文件更改时,是否重新加载类似于web框架的是否选择debug模式 reload = False
从配置文件可以出,在web项目每个请求时间无法再改进的情况下,web项目并发量主要由workers, worker_connections决定。
3、gevent
a、安装:pip install gevent
b、无需单独的配置文件,可在gunicorn 配置文件中被调用。
c、安装相应数据库驱动时,必须安装对应数据库的python语言的驱动否则数据库层面无法达到异步效果。(可以理解成gevent只能通过python这块的通信在系统层实现对应线程的挂起,从而达到异步的效果)
4、webapp与gunicorn的启动。
gunicorn的启动语法:
gunicorn -c "gunicorn配置文件" "定义app对象的py文件":"app对象的具体命名"
拿django 和 flask 此二者框架举例:
1、django框架定义app对象的文件路径一般为:项目主目录/项目名/wsgi.py。内容一般为:
import os from django.core.wsgi import get_wsgi_application os.environ.setdefault("DJANGO_SETTINGS_MODULE", "search.settings") application = get_wsgi_application()
所以django项目的启动方式为:在当前项目的主目录下输入指令:gunicorn -c guni.conf projectname.wsgi:application
2、flask框架定义app对象的文件路径一般比较简单,假如就是项目主目录下的views.py文件且创建app对象的代码一般为:
app = Flask(__name__)
所以 flask项目的启动方式为:在当前项目的主目录下输入指令:gunicorn -c guni.conf views:app
gunicorn启动之后, 再将nginx启动,再将项目的所有静态文件放入/var/www/下, 至此,整个python web项目的高并发部署基本完成!
Copyright © 2021.aoyanming个人博客站
发表评论