文章内容
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.
如果是Ubuntu 18.04环境可以参考以下两篇文章安装虚拟环境:
2、How To Install Python 3 and Set Up a Programming Environment on Ubuntu 18.04 [Quickstart]
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服务:
sudo 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安装
吕旭恩 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
博主已经找到了 是我自己目录有问题谢谢你了