python写的web后台项目的部署不像java直接丢到tomcat部署一样简单,目前比较流行的部署方式有nginx+uwsgi和ginx+gunicorn,如果只是提供后台接口服务,只用gunicorn也可以的。uwsgi和gunicorn是支持WSGI(Python Web Server Gateway Interface)协议的http服务器,gunicorn比uwsgi配置简单,文章用gunicorn方式来部署。
第一种:只用gunicorn部署
1.安装gunicorn:
pip3 install gunicorn
3.使用gunicorn启动服务
3.1直接命令启动
gunicorn -w 1 -b 127.0.0.1:8080 app:app
-w 1 #代表开启的工作进程数
-b 127.0.0.1:8090 #代表访问的服务地址,如果是外网访问,要绑定外网的地址,比如:http://10.3.211.23:8080
app:app #用pycharm工具创建flask项目,默认的入口文件是app.py
3.2通过gunicorn的配置文件启动
在项目的根目录,与app.py同级下新建 gunicorn.py 文件(也可以用gunicorn.conf文件名,都是一样的)
import os
bind = '127.0.0.1:8080' # 服务绑定访问的ip
workers = 1 # 开启的工作进程数,也可以用 multiprocessing.cpu_count()获取cpu个数
threads = 2 # 每个工作进程的线程数
daemon = 'false' # 设置守护进程,将进程交给supervisor管理,在生产环境下可以打开,防止关闭服务器连接后程序挂掉
worker_class = 'gevent' # 工作模式,默认sync,可以安装用gevent
worker_connections = 1000 # 最大客户端并发连接数,默认1000,只适用于eventlet,gevent工作模式
timeout = 30 # 超时时间,默认是30
backlog = 2048 # 最大挂起的连接数,默认是2048
debug = True # 是否开启debug模式
loglevel = 'debug' # 输入日志的级别
accesslog = 'logs/gunicorn_acess.log' # 日志文件路径
errorlog = 'logs/gunicorn_error.log' # 错误日志文件路径
access_log_format = '%(h)s %(l)s %(u)s %(t)s "%(r)s" %(s)s %(b)s "%(f)s" "%(a)s" "%({X-Real-IP}i)s"' # 日志记录的格式
启动用:gunicorn -c gunicorn.py app:app #需要用-c命令指定配置文件名
4.查看gunicorn进程
ps -ef|grep gunicorn #查看gunicorn的进程
5.重启gunicorn进程
kill -HUP 30080
6.结束gunicorn进程
kill -9 30000 #根据进程号杀死进程
也可以使用 CTRL+C 快捷键快速杀死gunicorn的进程
第二种:在gunicorn的基础上部署后用nginx做静态资源服务器
1.配置nginx的conf,在nginx.conf文件的server中修改配置:
server {
listen 8090;
server_name localhost;
# 配置python部署的后台地址
location ^~/backend{
proxy_pass http://127.0.0.1:8000; # 动态请求转发到该地址下面
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
# redirect server error pages to the static page /50x.html
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
2.nginx配置proxy_pass的地址 http://127.0.0.1:8000,即是对应的启动的gunicorn服务地址,nginx作为动态代理请求地址到gunicorn