Flask Linux部署(HelloTest):Flask+Nginx+Gunicorn+Supervisor
2018-02-28 22:22
543 查看
这里还有我其他项目的部署链接:
Flask Linux部署(项目):Flask+Nginx+Gunicorn+Supervisor
云服务器部署Java web项目(JDK, Tomcat, MySQL)
创建一个项目
创建 python 虚拟环境
安装 python web 框架 flask
Gunicorn 部署 Flask
Supervisor管理
若是遇到问题Error Another program is already listening on a port that one of our HTTP servers is configured to use Shut this program down first before starting
配置 Nginx
这篇博客仅为部署流程,想了解nginx的作用的话推荐一个博客
https://www.cnblogs.com/zhouxinfei/p/7862285.html ,废话不多说,直接上教程。
这里项目的文件(仅供测试)可以从GitHub上下载,网址https://coding.net/u/rsj217/p/myproject/git
解压后文件目录如下图所示:
效果如图所示:
测试我们的 flask 安装是否成功,并使用 flask 写一个简单的 web 服务。
启动 flask
此时,用浏览器访问 http://127.0.0.1:5000 就能看到网页显示 hello world
pip 是一个重要的工具,python 用来管理包。还有一个最佳生产就是每次使用 pip 安装的库,都写入一个 requirement 文件里面,既能知道自己安装了什么库,也方便别人部署时,安装相应的库。
以后每次 pip 安装了新的库的时候,都需freeze 一次。
当我们安装好 gunicorn 之后,需要用 gunicorn 启动 flask,注意 flask 里面的name里面的代码启动了 app.run(),这个含义是用 flask 自带的服务器启动 app。这里我们使用了 gunicorn,myapp.py 就等同于一个库文件,被 gunicorn 调用。
此时,我们需要用 8000 的端口进行访问,原先的5000并没有启用。其中 gunicorn 的部署中,,-w 表示开启多少个 worker,-b 表示 gunicorn 开发的访问地址。
想要结束 gunicorn 只需执行 pkill gunicorn,有时候还的 ps 找到 pid 进程号才能 kill。可是这对于一个开发来说,太过于繁琐,因此出现了另外一个神器—supervisor,一个专门用来管理进程的工具,还可以管理系统的工具进程。
生成 supervisor 默认配置文件
修改 supervisor 配置文件,添加 gunicorn 进程管理
修改为如下:
创建存放log的文件夹
在文件最后加入如下:这里的[program:myapp],myapp为主程序的文件名。
注意路径,我这里为:/home/ubuntu/flask/myproject-master
现在可以使用 supervsior 启动 gunicorn啦。
运行命令
访问 http://127.0.0.1:2170 可以看见gunciron 启动的返回的 hello world
访问 http://127.0.0.1:9001 可以得到 supervisor的web管理界面
但是这是你有可能会得不到这个界面,这时候你就要修改上述文件中的127.0.0.1:9001 为:0.0.0.0:9000 有两处都要改哦!!!
这时候在执行命令:
访问 http://127.0.0.1:9001 就可以得到 supervisor的web管理界面如下:(用户名密码为上述配置文件的user 123)
supervisor的基本使用命令
使用 supervisor 来管理 nginx。这里需要注意一个问题,linux的权限问题。nginx是sudo的方式安装,启动的适合也是 root用户,那么我们现在也需要用 root用户启动supervisor。增加下面的配置文件
同样是执行上面执行过的命令:
同时再nginx配置文件中修改如下:(注意路径)
/etc/nginx/sites-available/default
这时就可以通过访问服务器网址不用端口号访问网站。
Flask Linux部署(项目):Flask+Nginx+Gunicorn+Supervisor
云服务器部署Java web项目(JDK, Tomcat, MySQL)
目录
目录创建一个项目
创建 python 虚拟环境
安装 python web 框架 flask
Gunicorn 部署 Flask
Supervisor管理
若是遇到问题Error Another program is already listening on a port that one of our HTTP servers is configured to use Shut this program down first before starting
配置 Nginx
这篇博客仅为部署流程,想了解nginx的作用的话推荐一个博客
https://www.cnblogs.com/zhouxinfei/p/7862285.html ,废话不多说,直接上教程。
创建一个项目
mkdir myproject-master
这里项目的文件(仅供测试)可以从GitHub上下载,网址https://coding.net/u/rsj217/p/myproject/git
解压后文件目录如下图所示:
创建 python 虚拟环境
virtualenv 是 python 的一个神器。用来在一个系统中创建不同的 python 隔离环境。相互之间还不会影响,使用简单到令人发指。(我的工作路径是 /home/ubuntu/flaskTest/)cd myproject-master virtualenv venv source venv/bin/activate //激活虚拟环境
效果如图所示:
安装 python web 框架 —flask
pip install flask
测试我们的 flask 安装是否成功,并使用 flask 写一个简单的 web 服务。
vim myapp.py
from flask import Flask app = Flask(__name__) @app.route('/') def index(): return 'hello world' if __name__ == '__main__': app.debug = True app.run()
启动 flask
python myapp.py
此时,用浏览器访问 http://127.0.0.1:5000 就能看到网页显示 hello world
Gunicorn 部署 Flask
安装 gunicornpip install gunicorn
pip 是一个重要的工具,python 用来管理包。还有一个最佳生产就是每次使用 pip 安装的库,都写入一个 requirement 文件里面,既能知道自己安装了什么库,也方便别人部署时,安装相应的库。
pip freeze > requirements.txt
以后每次 pip 安装了新的库的时候,都需freeze 一次。
当我们安装好 gunicorn 之后,需要用 gunicorn 启动 flask,注意 flask 里面的name里面的代码启动了 app.run(),这个含义是用 flask 自带的服务器启动 app。这里我们使用了 gunicorn,myapp.py 就等同于一个库文件,被 gunicorn 调用。
gunicorn -w4 -b0.0.0.0:8000 myapp:app
此时,我们需要用 8000 的端口进行访问,原先的5000并没有启用。其中 gunicorn 的部署中,,-w 表示开启多少个 worker,-b 表示 gunicorn 开发的访问地址。
想要结束 gunicorn 只需执行 pkill gunicorn,有时候还的 ps 找到 pid 进程号才能 kill。可是这对于一个开发来说,太过于繁琐,因此出现了另外一个神器—supervisor,一个专门用来管理进程的工具,还可以管理系统的工具进程。
Supervisor管理
安装 supervisorpip install supervisor
生成 supervisor 默认配置文件
echo_supervisord_conf > supervisor.conf
修改 supervisor 配置文件,添加 gunicorn 进程管理
vim supervisor.conf
修改为如下:
#这几行解注释(即删除每行的第一个;) [inet_http_server] ; inet (TCP) server disabled by default port=127.0.0.1:9001 ; (ip_address:port specifier, *:port for all iface) username=user ; (default is no username (open server)) password=123 ; (default is no password (open server)) [supervisorctl] serverurl=unix:///tmp/supervisor.sock ; use a unix:// URL for a unix socket serverurl=http://127.0.0.1:9001 ; use an http:// url to specify an inet socket username=user ; should be same as http_username if set password=123 ; should be same as http_password if set
创建存放log的文件夹
mkdir log
在文件最后加入如下:这里的[program:myapp],myapp为主程序的文件名。
注意路径,我这里为:/home/ubuntu/flask/myproject-master
[program:myapp] command=/home/ubuntu/flask/myproject-master/venv/bin/gunicorn -w4 -b0.0.0.0:2170 myapp:app directory=/home/ubuntu/flask/myproject-master startsecs=0 stopwaitsecs=0 autostart=false autorestart=true stdout_logfile=/home/ubuntu/flask/myproject-master/log/gunicorn.log stderr_logfile=/home/ubuntu/flask/myproject-master/log/gunicorn.err
现在可以使用 supervsior 启动 gunicorn啦。
运行命令
supervisord -c supervisor.conf
supervisorctl -c supervisor.conf status #察看supervisor的状态
supervisorctl -c supervisor.conf reload #重新载入 配置文件 supervisorctl -c supervisor.conf start [all]|[appname] #启动指定/所有
访问 http://127.0.0.1:2170 可以看见gunciron 启动的返回的 hello world
访问 http://127.0.0.1:9001 可以得到 supervisor的web管理界面
但是这是你有可能会得不到这个界面,这时候你就要修改上述文件中的127.0.0.1:9001 为:0.0.0.0:9000 有两处都要改哦!!!
这时候在执行命令:
supervisorctl -c supervisor.conf reload 重新载入 配置文件 supervisorctl -c supervisor.conf status 察看supervisor的状态 supervisorctl -c supervisor.conf start all
访问 http://127.0.0.1:9001 就可以得到 supervisor的web管理界面如下:(用户名密码为上述配置文件的user 123)
supervisor的基本使用命令
supervisord -c supervisor.conf 通过配置文件启动supervisor supervisorctl -c supervisor.conf status 察看supervisor的状态 supervisorctl -c supervisor.conf reload 重新载入 配置文件 supervisorctl -c supervisor.conf start [all]|[appname] 启动指定/所有 supervisor管理的程序进程 supervisorctl -c supervisor.conf stop [all]|[appname] 关闭指定/所有 supervisor管理的程序进程
若是遇到问题:Error: Another program is already listening on a port that one of our HTTP servers is configured to use. Shut this program down first before starting
请将配置文件复制到编辑器里,重新echo_supervisord_conf > supervisor.conf生成新的配置文件,再对之进行修改
vim supervisor.conf(即将刚才复制到编辑器里的复制过来)。
配置 Nginx
采用 apt-get方式安装最简单。运行 sudo apt-get install nginx。安装好的nginx的二进制文件放在 /usr/sbin/文件夹下面。而nginx的配置文件放在 /etc/nginx下面。使用 supervisor 来管理 nginx。这里需要注意一个问题,linux的权限问题。nginx是sudo的方式安装,启动的适合也是 root用户,那么我们现在也需要用 root用户启动supervisor。增加下面的配置文件
[program:nginx] command=/usr/sbin/nginx startsecs=0 stopwaitsecs=0 autostart=false autorestart=false stdout_logfile=/home/ubuntu/flask/myproject-master/log/nginx.log stderr_logfile=/home/ubuntu/flask/myproject-master/log/nginx.err
同样是执行上面执行过的命令:
supervisorctl -c supervisor.conf reload 重新载入 配置文件 supervisorctl -c supervisor.conf status 察看supervisor的状态 supervisorctl -c supervisor.conf start all
同时再nginx配置文件中修改如下:(注意路径)
/etc/nginx/sites-available/default
server { listen 80; server_name localhost; root /home/ubuntu/flask/myproject-master; access_log /home/ubuntu/flask/myproject-master/log/nginx.log; error_log /home/ubuntu/flask/myproject-master/log/nginx.err; location / { proxy_pass http://127.0.0.1:2170; proxy_redirect off; proxy_set_header Host $host:8080; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
这时就可以通过访问服务器网址不用端口号访问网站。
相关文章推荐
- Flask Linux部署(项目):Flask+Nginx+Gunicorn+Supervisor
- 阿里云ECS+Gunicorn+Supervisor+Nginx部署Flask
- python web 部署:nginx + gunicorn + supervisor + flask 部署笔记
- Flask Nginx Gunicorn Supervisor 网站部署 详解
- python web 部署:nginx + gunicorn + supervisor + flask
- 网站部署过程 Nginx + Gunicorn +Supervisor +Flask
- python web 部署:nginx + gunicorn + supervisor + flask 部署笔记
- Flask部署 —— nginx+gunicorn+supervisor
- Flask+Gunicorn+Gevent+Supervisor+Nginx生产环境部署
- [转] python web 部署:nginx + gunicorn + supervisor + flask 部署笔记
- 阿里云ECS部署Flask(Nginx,gunicorn,supervisor,fabric,ubuntu16.04)
- python web 部署:nginx + gunicorn + supervisor + flask 部署笔记
- python web 部署:nginx + gunicorn + supervisor + flask 部署笔记
- 利用gunicorn、supervisor、nginx 等部署flask项目
- 阿里云ESC网站部署Flask+gunicorn+nginx+supervisor
- flask+uwsgi+nginx+supervisor模式部署
- django+nginx+supervisor+gunicorn+gevent 网站部署
- flask 应用的架构和部署(flask+gunicorn+nginx)
- VPS环境搭建详解(Virtualenv+Gunicorn+Supervisor+Nginx+Django+Flask+oneapm+event
- Python日记——nginx+Gunicorn部署你的Flask项目