[关闭]
@Mr-13 2020-01-14T10:50:16.000000Z 字数 3576 阅读 66

Centos7下发布使用Flask

python3



一、安装Python3、pip3

  参见笔记 CentOS7.4安装Python3


二、安装mysql

  参见笔记 CentOS服务器上部署MySQL


三、安装Nginx

  参见笔记 CentOS7安装配置Nginx(yum)


四、安装并配置Gunicorn,并测试启动项目

引用介绍:

  Gunicorn 绿色独角兽 是一个Python WSGI UNIX的HTTP服务器。这是一个pre-fork worker的模型,从Ruby的独角兽(Unicorn )项目移植。该Gunicorn服务器大致与各种Web框架兼容,只需非常简单的执行,轻量级的资源消耗,以及相当迅速。

  我曾经Google 过 Gunicorn 与 uwsgi ,都说uwsgi 的性能要比 gunicorn 高,所以最终结果就杯具了。不过,现在回过头来看这只 “独角兽”还为时不晚吧。

  开发环境中,Gunicorn 应该装在你的 virtualenv 环境下。生产环境中,还是建议放在docker中,或者独立环境。
  
  gunicorn的安装比较简单,如下:

  1. [root@ ~] pip3 install gunicorn

  对,一句话搞定安装,不需要关心啥。执行一下 gunicorn -h (查看命令帮助文档),确认一下安装是否成功。
  
  如果执行报错,出现下面的提示,则需要配置一下软链接。软链接的配置方式参见:Lixnux 环境变量设置(个人理解)

  1. [root@mr13 ~] gunicorn -h
  2. -bash: gunicorn: command not found

  进入python编写的项目目录(我的放在/var/www/myflask/目录下),并用gunicorn执行:
  一定是要在执行文件当前路径下!

  1. # 1) -w 4 : 是指预定义的工作进程数为4
  2. # 2) -b 0.0.0.0:5000 指绑定访问IP及端口号;
  3. # 0.0.0.0代表可以允许所有IP访问
  4. # 如果想只允许本地访问可以设置成127.0.0.1
  5. # 端口注意提前配置防火墙
  6. [root@mr13 ~] cd /var/www/myflask
  7. [root@mr13 myflask] gunicorn -w 4 -b 0.0.0.0:8000 api_test:app
  8. [2020-01-02 09:18:43 +0800] [31752] [INFO] Starting gunicorn 20.0.4
  9. [2020-01-02 09:18:43 +0800] [31752] [INFO] Listening at: http://0.0.0.0:8000 (31752)
  10. [2020-01-02 09:18:43 +0800] [31752] [INFO] Using worker: sync
  11. [2020-01-02 09:18:43 +0800] [31755] [INFO] Booting worker with pid: 31755
  12. [2020-01-02 09:18:44 +0800] [31756] [INFO] Booting worker with pid: 31756
  13. [2020-01-02 09:18:44 +0800] [31757] [INFO] Booting worker with pid: 31757
  14. [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实例了。
  
  贴一下测试项目截图:

image

  
  启动起来我们使用postman测试一下,已经能够成功访问站点api,如下图:
  
image


五、配置Nginx

5.1 安装Nginx,并查看基本信息

  参见笔记:CentOS7安装配置Nginx(yum)
  
  上面使用gunicorn已经成功启用了站点,如果我们希望通过域名访问、做负载均衡、或者反向代理,还需要设置Nginx;这里我们质检单配置一下Nginx的网站信息,不做更多设置。
  

修改Nginx配置文件,添加python站点配置信息

  到nginx目录下,如下图:
  
image

  
  nginx.conf : 是nginx的默认配置文件,看一下内容:

  
image


5.2 在nginx配置Python站点信息

  
  我这里不在默认配置文件中增加设置,但是我需要使用80端口,把 nginx.conf 配置文件中的 server 配置节注释掉。
  然后在 conf.d 目录下创建配置文件如下:
  
image
  

  配置文件添加完成后,重启nginx,并重新加载nginx的配置文件

  1. [root@mr13 ~] systemctl restart nginx
  2. [root@mr13 ~] nginx -s reload

  
  因为设置了直接访问80端口(默认端口),我们用postman直接访问IP地址试一下,可以看到已经可以正常访问获取数据,Nginx配置完成:
  
image
  


六、将Gunicorn后台运行

  在配置gunicorn的时候,我们通过在python程序文件路径下,命令行执行(如下),的方式启动了站点,并且可以使用 Ctrl + c 命令结束。

  1. [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的执行,在异常退出/终端时重新启动

6.1 命令行"-D"后台运行gunicorn

  网上收到的文章,基本上倾向于第三种,但是我这里只是为了做测试API接口server站点,使用第一种方式直接用了。直接上命令行:

  1. [root@myflask] gunicorn -D -w 4 -b 0.0.0.0:8000 api_test:app

  用postman测试,妥妥的这里就不上图了。
  


6.2 将gunicorn作为服务运行

  这种方式我还没尝试过,直接摘录网上原文(原文链接):
  
  --------------------------------原文摘录开始--------------------------------

  这就是最后一步了,我们在此将采用 UpStart   配置Flask程序作为服务程序在Linux起动时运行。首先建立起动配置文件:

  1. # 通过nano命令打开并编辑myflask.conf文件
  2. sudo nano /etc/init/myflask.conf

  然后加入如下配置

  1. description "The myflask service"
  2. start on runlevel [2345]
  3. stop on runlevel [!2345]
  4. respawn
  5. setuid root
  6. setgid www-data
  7. env PATH= /var/www/myflask/venv/bin
  8. chdir /var/www/myflask/
  9. exec gunicorn -w 4 -b 127.0.0.1:8080 wsgi:application

  OK 大功告成,启动 myflask 服务

  1. sudo service myflask start

  这里有一点必须补充的,请留意在 myflask.conf 中的

  1. env PATH= /var/www/myflask/venv/bin
  2. chdir /var/www/myflask/

  这里所指向的地址就是你的项目路径和 virtualenv 的路径
  
小结
  这个部署过程感觉比我之前所介绍的 uwsgi 那种简单很多吧。这里给一点小 Tips 如果你用 Fabric 来完成这个部署过程的话那么就是纯自动化部署了喔,值得尝试的。

  --------------------------------原文摘录结束--------------------------------

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注