@Mr-13
2020-01-14T10:50:16.000000Z
字数 3576
阅读 66
python3
参见笔记 CentOS7.4安装Python3;
参见笔记 CentOS服务器上部署MySQL;
参见笔记 CentOS7安装配置Nginx(yum);
引用介绍:
Gunicorn 绿色独角兽 是一个Python WSGI UNIX的HTTP服务器。这是一个pre-fork worker的模型,从Ruby的独角兽(Unicorn )项目移植。该Gunicorn服务器大致与各种Web框架兼容,只需非常简单的执行,轻量级的资源消耗,以及相当迅速。
我曾经Google 过 Gunicorn 与 uwsgi ,都说uwsgi 的性能要比 gunicorn 高,所以最终结果就杯具了。不过,现在回过头来看这只 “独角兽”还为时不晚吧。
开发环境中,Gunicorn 应该装在你的 virtualenv 环境下。生产环境中,还是建议放在docker中,或者独立环境。
gunicorn的安装比较简单,如下:
[root@ ~] pip3 install gunicorn
对,一句话搞定安装,不需要关心啥。执行一下 gunicorn -h
(查看命令帮助文档),确认一下安装是否成功。
如果执行报错,出现下面的提示,则需要配置一下软链接。软链接的配置方式参见:Lixnux 环境变量设置(个人理解)
[root@mr13 ~] gunicorn -h
-bash: gunicorn: command not found
进入python编写的项目目录(我的放在/var/www/myflask/目录下),并用gunicorn执行:
一定是要在执行文件当前路径下!
# 1) -w 4 : 是指预定义的工作进程数为4
# 2) -b 0.0.0.0:5000 指绑定访问IP及端口号;
# 0.0.0.0代表可以允许所有IP访问
# 如果想只允许本地访问可以设置成127.0.0.1
# 端口注意提前配置防火墙
[root@mr13 ~] cd /var/www/myflask
[root@mr13 myflask] gunicorn -w 4 -b 0.0.0.0:8000 api_test:app
[2020-01-02 09:18:43 +0800] [31752] [INFO] Starting gunicorn 20.0.4
[2020-01-02 09:18:43 +0800] [31752] [INFO] Listening at: http://0.0.0.0:8000 (31752)
[2020-01-02 09:18:43 +0800] [31752] [INFO] Using worker: sync
[2020-01-02 09:18:43 +0800] [31755] [INFO] Booting worker with pid: 31755
[2020-01-02 09:18:44 +0800] [31756] [INFO] Booting worker with pid: 31756
[2020-01-02 09:18:44 +0800] [31757] [INFO] Booting worker with pid: 31757
[2020-01-02 09:18:44 +0800] [31758] [INFO] Booting worker with pid: 31758
最后的参数 api_test:app
这个是主程序入口,api_test.py
是引用的python文件名称(不包含后缀/模块名);app
是flask实例的名称,这样gunicorn就会找到具体要host哪一个flask实例了。
贴一下测试项目截图:
启动起来我们使用postman测试一下,已经能够成功访问站点api,如下图:
参见笔记:CentOS7安装配置Nginx(yum);
上面使用gunicorn已经成功启用了站点,如果我们希望通过域名访问、做负载均衡、或者反向代理,还需要设置Nginx;这里我们质检单配置一下Nginx的网站信息,不做更多设置。
修改Nginx配置文件,添加python站点配置信息
到nginx目录下,如下图:
nginx.conf : 是nginx的默认配置文件,看一下内容:
1、从nginx的主配置文件中,可以看到 /etc/nginx/conf.d/*.conf
这样的配置信息;自定义网站的配置信息可以在 conf.d
文件下单独创建 *.conf
进行相关设置。
2、 server配置节是nginx默认的页配置节,可以直接修改这里更改网站设置,但不建议,最好是设置新的配置节。
3、 配置文件最后一段配置节默认是注释掉的,可以直接修改这部分配置内容,添加自己的网站配置信息。
我这里不在默认配置文件中增加设置,但是我需要使用80端口,把 nginx.conf
配置文件中的 server
配置节注释掉。
然后在 conf.d
目录下创建配置文件如下:
配置文件添加完成后,重启nginx,并重新加载nginx的配置文件
[root@mr13 ~] systemctl restart nginx
[root@mr13 ~] nginx -s reload
因为设置了直接访问80端口(默认端口),我们用postman直接访问IP地址试一下,可以看到已经可以正常访问获取数据,Nginx配置完成:
在配置gunicorn的时候,我们通过在python程序文件路径下,命令行执行(如下),的方式启动了站点,并且可以使用 Ctrl + c
命令结束。
[root@myflask] gunicorn -w 4 -b 0.0.0.0:8000 api_test:app
但是我们断开当前账户链接(退出Xshell)或者其他控制台终端的时候,gunicorn就会停止。站点无法访问。我们需要让gunicorn在后台执行。避免这种情况,这里介绍三种方式:
- 1、 gunicorn执行时添加
-D
参数,设置在后台执行;- 2、 将gunicorn作为服务运行
- 3、 使用supervisor守护gunicorn的执行,在异常退出/终端时重新启动
网上收到的文章,基本上倾向于第三种,但是我这里只是为了做测试API接口server站点,使用第一种方式直接用了。直接上命令行:
[root@myflask] gunicorn -D -w 4 -b 0.0.0.0:8000 api_test:app
用postman测试,妥妥的这里就不上图了。
这种方式我还没尝试过,直接摘录网上原文(原文链接):
--------------------------------原文摘录开始--------------------------------
这就是最后一步了,我们在此将采用 UpStart 配置Flask程序作为服务程序在Linux起动时运行。首先建立起动配置文件:
# 通过nano命令打开并编辑myflask.conf文件
sudo nano /etc/init/myflask.conf
然后加入如下配置
description "The myflask service"
start on runlevel [2345]
stop on runlevel [!2345]
respawn
setuid root
setgid www-data
env PATH= /var/www/myflask/venv/bin
chdir /var/www/myflask/
exec gunicorn -w 4 -b 127.0.0.1:8080 wsgi:application
OK 大功告成,启动 myflask 服务
sudo service myflask start
这里有一点必须补充的,请留意在 myflask.conf
中的
env PATH= /var/www/myflask/venv/bin
chdir /var/www/myflask/
这里所指向的地址就是你的项目路径和 virtualenv 的路径
小结
这个部署过程感觉比我之前所介绍的 uwsgi 那种简单很多吧。这里给一点小 Tips 如果你用 Fabric 来完成这个部署过程的话那么就是纯自动化部署了喔,值得尝试的。
--------------------------------原文摘录结束--------------------------------