文章内容

2018/5/26 15:45:40,作 者: 黄兵

Flask+Gunicorn+Nginx安装

最近需要部署一个用Python写的Flask网站。

具体安装步骤如下:

1、安装virtualenv环境:

sudo apt-get install python-virtualenv

2、创建程序目录,切换到目录:

mkdir material_app
cd material_app

3、创建目录内的虚拟环境:

virtualenv venv -p /usr/bin/python3

此命令创建目录内的虚拟环境venv 。 该-p标志指定哪个Python版本在虚拟环境中使用。 您将看到此输出:

Already using interpreter /usr/bin/python3
Using base prefix '/usr'
New python executable in /home/sammy/falcon_app/venv/bin/python3
Also creating executable in /home/sammy/falcon_app/venv/bin/python
Installing setuptools, pkg_resources, pip, wheel...done.

4、激活虚拟环境:

. venv/bin/activate

如果需要关闭虚拟环境,使用下面命令:

deactivate

5、上传本地程序到服务器;

6、安装相关库文件,如果使用的是requirements.txt文件安装,输入如下命令:

pip install -r requirements.txt

如果不采用requirements.txt文件安装,一个个的安装,输入如下命令:

pip install package_name

7、安装Gunicorn,这个需要在虚拟环境下面安装:

pip install gunicorn

8、测试程序是否有问题,使用下面命令:

gunicorn -b 0.0.0.0:5000 main:app --reload

如果出现错误内容:[ERROR] Connection in use: ('0.0.0.0', 8000),可以参考这篇文章:[已解决]运行gunicorn失败:[ERROR] Connection in use 127.0.0.1 8080

这将启动Gunicorn,并提供我们的web应用程序0.0.0.0在端口5000 ,因为你可以从它的输出看:

[2016-11-14 16:33:41 +0000] [9428] [INFO] Starting gunicorn 19.6.0
[2016-11-14 16:33:41 +0000] [9428] [INFO] Listening at: http://0.0.0.0:5000 (9428)
[2016-11-14 16:33:41 +0000] [9428] [INFO] Using worker: sync
[2016-11-14 16:33:41 +0000] [9431] [INFO] Booting worker with pid: 9431

如果没有错误,就继续,如果有错误可以参考我这篇文章:Flask Gunicorn 安装时遇到的问题总结,或许可以帮到你。

9、使用Nginx代理请求Gunicorn

使用如下命令安装Nginx:

sudo apt-get install nginx

之后配置/etc/nginx/sites-available/default文件,内容如下:

server {

  listen 80;
  server_name 127.0.0.1;

  location / {
      try_files $uri @gunicorn_proxy;
  }

  location @gunicorn_proxy {
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header Host $http_host;
      proxy_redirect off;
      proxy_pass http://127.0.0.1:5000;
      proxy_connect_timeout 500s;
      proxy_read_timeout 500s;
      proxy_send_timeout 500s;
  }
}

验证nginx配置文件是否有问题:

sudo nginx -t

如果没有问题则可以看到如下内容:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

之后启动nginx服务:

service nginx start

10、管理Gunicorn与Systemd

如果就这样,你退出命令窗口的时候,程序就结束了,我们肯定不是要这样的。

之所以不使用Supervisor的原因是我觉得自动自带的服务应该更好一些,也不占用什么系统资源。

我们可以使用Ubuntu 的服务解决这个问题,关于Ubuntu的服务可以参考这篇文章:ubuntu 16.04 service 基础要点

增加一个服务文件,具体命令如下:

vi /etc/systemd/system/material_app.service

文件内容如下:

[Unit]
Description=Gunicorn instance to serve the falcon application
After=network.target
[Service]
User=sammy
Group=www-data
PIDFile=/tmp/gunicorn.pid
Environment="PATH=/home/sammy/falcon_app/venv/bin"
WorkingDirectory=/home/sammy/falcon_app
ExecStart=/home/sammy/falcon_app/venv/bin/gunicorn --workers 3 -b localhost:5000 main:app
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID
[Install]
WantedBy=multi-user.target

启动该服务:

sudo systemctl start material_app

然后启用此服务,以便每次服务器启动时,Gunicorn开始服务Web应用程序:

sudo systemctl enable material_app

上线调试,没有什么问题。


有什么问题给我下面留言。


参考资料:

Linux下部署Flask项目——Ubuntu+Flask+Gunicorn+Supervisor+Nginx

如何在Ubuntu 16.04上使用Gunicorn和Nginx部署Falcon Web应用程序

Unable to locate package virtualenv in ubuntu-13 on a virtual-machine


黄兵个人博客原创。

转载请注明出处:黄兵个人博客 - Flask+Gunicorn+Nginx安装

分享到:

发表评论

评论列表

user-ico

吕旭恩 on 回复 有用(0

大佬你好 看了你的博客觉得很受用 你的整个流程我也跟着敲下来 我这里有一个建议和一个问题:我的建议:gunicorn -b 0.0.0.0:5000 main:app --reload (在执行这个命令时候可以标注一下main为目录名字app为实列名字)还有一个问题:最后要启动的话执行的命令是什么 (我是一个小白见笑了)

游客BnZA on 2019-01-23 10:02:43

博主回复:你的邮件地址有问题,无法给你发邮件。

游客r(X! on 2019-01-24 03:51:09

博主已经找到了 是我自己目录有问题谢谢你了