nginx+supervisor+gunicorn+flask
一、 更新系统
#yum -y install epel-release
#yum clean all && yum makecache
#yum -y update
二、安装python3
系统自带的python版本是2,并且没有安装pip
1、python2安装pip
#yum -y install python-pip (前提已安装epel-release)
更新pip: pip install --upgrade pip
[root@localhost ~]# pip -V
2、安装python3
系统自带的python2还有好多其他系统组件在使用,比如yum,所以要把python3安装到其他目录下
(1)安装相关包
# yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make libffi-devel
(2)下载 Python 3.7.0源码包
#cd /usr/local/src &&
wget https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tar.xz
(3)#tar xf Python-3.7.0.tar.xz (yum -y install xz #若失败,重建yum缓 yum clean all ,yum makecache)
(4)#cd Python-3.7.0
(5)#./configure --prefix=/usr/local/python3
(6)#make && make install
安装成功后的提示:
Collecting setuptools
Collecting pip
Installing collected packages: setuptools, pip
Successfully installed pip-10.0.1 setuptools-39.0.1
//从 Python 3.4 开始就已经自带了 pip 和 easy_install(setuptools 包带的命令) 包管理命令,你可以在 /usr/local/python3/bin/ 目录下看到,查看一下已经安装的扩展包:
(7)#/usr/local/python3/bin/pip3 list
Package Version
---------- -------
pip 10.0.1
setuptools 39.0.1
// 更新pip(若上述命令提示pip版本不是最新则需要更新)
(8)#/usr/local/python3/bin/pip3 install --upgrade pip
(9)创建软连接
执行ln -s /usr/local/python3/bin/python3 /usr/bin/python3命令创建python3软连接。
执行ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3命令创建pip3软连接
查看Python3和pip3是否安装成功。
# python3 -V
Python 3.7.0
# pip3 -V
pip 10.0.1 from /usr/local/python3/lib/python3.7/site-packages/pip (python 3.7)
这样一来,python出来的是python2.7,python3出来的是python3.5.2,互不干扰。
三、创建项目目录,安装虚拟环境
(1)创建项目目录,安装虚拟环境
#mkdir –p /home/microblog && cd /home/microblog && python3 -m venv venv
(2)激活虚拟环境,安装项目所需的依赖包
需要事先把requirements.txt放入项目所在目录中
[root@localhost microblog]# source venv/bin/activate
(venv) [root@localhost microblog]#pip3 install -r requirements.txt
(3)上传项目代码
演示使用,本例用一个最简单的flask应用:mocroblog.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from flask import Flask
app = Flask(__name__)
@app.route('/')
@app.route('/index')
def index():
return "Hello World!"
if __name__ == '__main__':
app.run()
(4)测试
(venv) [root@localhost microblog]# python3 microblog.py
* Serving Flask app "microblog" (lazy loading)
* Environment: production
WARNING: Do not use the development server in a production environment.
Use a production WSGI server instead.
* Debug mode: off
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
再打开一个窗口,运行:
[root@localhost ~]# curl -i http://127.0.0.1:5000
HTTP/1.0 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 12
Server: Werkzeug/0.14.1 Python/3.7.0
Date: Sat, 07 Jul 2018 03:52:31 GMT
Hello World!
一切正常!
四、安装项目使用的web服务
1、安装nginx
# yum install nginx
默认安装目录:/etc/nginx
2、安装supervisor
注意:此软件要求系统Python版本不能高于3
#yum install supervisor
3、安装gunicorn
注意,这个要安装在项目使用的虚拟环境中
[root@localhost nginx]# cd /home/microblog/
[root@localhost microblog]# source venv/bin/activate
(venv) [root@localhost microblog]# pip3 install gunicorn
五、相关配置文件设置
(1)nginx相关配置
把nginx.conf中server{}块注释,在/etc/nginx/conf.d/目录中添加项目使用的以conf结尾的文件,比如:m.conf,内容如下:
server {
listen 80; #nginx监听端口
server_name 192.168.109.128; #域名或IP
location / {
proxy_pass http://127.0.0.1:9000; #监听代理端口
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
重载nginx服务:service nginx start
(2) supervisor配置
默认配置文件:(1)/etc/supervisord.conf
在该文件最后一行有这样的信息:
[include]
files = supervisord.d/*.ini
也就说说我们在这个目录下创建一个以ini结尾的文件即可
比如:/etc/supervisord.d/m.ini
其内容如下:
[program:microblog]
directory = /home/microblog
command = /home/microblog/venv/bin/gunicorn -b 127.0.0.1:9000 -w 2 microblog:app #一定要是虚拟环境中的绝对路径
user = root
autostart = true
autorestart = true
stopasgroup = true
killasgroup = true
startsecs = 5
startretries = 3
redirect_stderr = true
stdout_logfile_maxbytes = 20MB
stdout_logfile_backups = 20
stdout_logfile = /var/log/usercenter_stdout.log
启动:supervisord -c /etc/supervisord.conf
汇总介绍:(个人拙见,不知道对不对)
nginx监听本机的80端口,然后把监听到的信息转发给http:127.0.0.1:9000指定的位置,
这个地址是gunicorn在监听所以就把这个信息又转发给虚拟环境中去。
supervisor是用来管理gunicorn的,就跟管理使用php-fpm管理php
若是有多个项目的话,除了nginx需要配置外,supervisor也需要配置
五、测试
使用浏览器访问:ip即可得到flask响应的结果:
注意防火墙放行80端口
若是项目中没有设置debug=True,则更改项目内容后想看到效果需要重载一下supervisor服务:supervisorctl reload
nginx+gunicorn+flask:这种模式就是不使用supervisor管理gunicorn
单独执行gunicorn命令:gunicorn -b 127.0.0.1:9000 microblog:app
扩展1:supervisorctl的使用
supervisorctl status # 查询进程状态
supervisorctl stop node # 关闭 [program:node] 的进程
supervisorctl start node # 启动 [program:node] 的进程
supervisorctl restart node # 重启 [program:node] 的进程
supervisorctl stop all # 关闭所有进程
supervisorctl start all # 启动所有进程
supervisorctl reload # 重新读取配置文件,读取有更新(增加)的配置文件,不会启动新添加的程序
supervisorctl update # 重启配置文件修改过的程序
扩展2:常见的gunicorn配置
[program:microblog]
directory = /home/microblog ; 程序的启动目录
command = gunicorn -c gunicorn.py wsgi:app ; 启动命令,可以看出与手动在命令行启动的命令是一样的,使用虚拟环境中的绝对路径
autostart = true ; 在 supervisord 启动的时候也自动启动
startsecs = 5 ; 启动 5 秒后没有异常退出,就当作已经正常启动了
autorestart = true ; 程序异常退出后自动重启
startretries = 3 ; 启动失败自动重试次数,默认是 3
user = leon ; 用哪个用户启动
redirect_stderr = true ; 把 stderr 重定向到 stdout,默认 false
stdout_logfile_maxbytes = 20MB ; stdout 日志文件大小,默认 50MB
stdout_logfile_backups = 20 ; stdout 日志文件备份数
; stdout 日志文件,需要注意当指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建日志文件)
stdout_logfile = /data/logs/usercenter_stdout.log
nginx+supervisor+gunicorn+flask的更多相关文章
- django+nginx+supervisor+gunicorn+gevent 网站部署
django+nginx+supervisor+gunicorn+gevent 网站部署 django,nginx,supervisor,gunicorn,gevent这几个都是在本领域大名鼎鼎的软件 ...
- Flask+Nginx+Supervisor+Gunicorn+HTTPS部署教程(CentOs)
写在前面 之前的文章中,我们详细讲述了怎样安装 Nginx,Python,Supervisor,Gunicorn,HTTPS.经本人多次测试是完全可以跑通的,那么本篇将介绍怎样将这些组合起来运行一个H ...
- CentOS7中配置基于Nginx+Supervisor+Gunicorn的Flask项目
配置Nginx 1.安装nginx yum install nginx 2.安装好后在/etc/nginx/default.d中添加location的配置,并指向8001端口,以后Gunicorn会监 ...
- CentOS 下部署Nginx+Gunicorn+Supervisor部署Flask项目
原本之前有一部分东西是在Windows Server,但是由于Gunicorn不支持Windows部署起来颇为麻烦.最近转战CentOS,折腾一段时间,终于简单部署成功.CentOS新手,作为一个总结 ...
- Nginx+uwsgi+supervisor+Ubuntu+flask
Nginx+uwsgi+supervisor+Ubuntu+flask Nginx+uwsgi+supervisor在Ubuntu上部署flask应用 网上找了许多讲关于Flask应用部署的文章几乎都 ...
- 利用DockerHub在Centos7.7环境下部署Nginx反向代理Gunicorn+Flask独立架构
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_165 上一篇文章:Docker在手,天下我有,在Win10系统下利用Docker部署Gunicorn+Flask打造独立镜像,是在 ...
- 一寸宕机一寸血,十万容器十万兵|Win10/Mac系统下基于Kubernetes(k8s)搭建Gunicorn+Flask高可用Web集群
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_185 2021年,君不言容器技术则已,欲言容器则必称Docker,毫无疑问,它是当今最流行的容器技术之一,但是当我们面对海量的镜像 ...
- Django 部署 uwsgi + nginx + supervisor
Django 部署 uwsgi + nginx + supervisor https://hacpai.com/article/1460607620615?p=1&m=0 zonghua • ...
- asp.net core 二 Nginx Supervisor 负载,监听
ASP.NET Core负载均衡集群搭建(CentOS7+Nginx+Supervisor+Kestrel) asp.net core在linux运行下,一但命令行退出 ...
随机推荐
- Python递归_打印节点信息
Python递归_打印节点信息 递归特性:1.必须由一个明确的结束条件2.每次进入更深一层递归时,问题规模相比上一次递归都应该有所减少3.递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用时 ...
- sql server开发工具
查询分析器的使用 SQL语言包含四个部分: 1.数据定义语言(DDL) : 例如 create, drop, alter等语句 2.数据操作语言(DML) : 例如 insert,delete, up ...
- python机器学习-sklearn挖掘乳腺癌细胞(四)
python机器学习-sklearn挖掘乳腺癌细胞( 博主亲自录制) 网易云观看地址 https://study.163.com/course/introduction.htm?courseId=10 ...
- MySQL8常见客户端和启动相关参数
MySQL8常见客户端和启动相关参数 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.MySQL常见的客户端 1>.使用MySQL服务自带的mysql连接工具 2>. ...
- springboot入门使用
一.什么是springboot,有什么用 springboot是一个开发框架,其出现的目的利用约定大于配置的思想来让开发者摆脱spring繁琐的配置,简化开发.其不是spring框架的替代品,是spr ...
- cocos-2dx 3.17 环境搭建 与 新建工程
由于上次在ubuntu中安装了cocos2dx的时候环境被破坏了,所以本文是基于 Windows 编写的 平台: OS : windows 10 compiler : VS 2015 下载 coc ...
- STM32学习笔记:【003】GPIO
版本:STM32F429 Hal库v1.10 在STM32中,最常用到的功能莫过于GPIO(General Purpose Input Output .通用输入/输出)了,在STM32中,除了除去AD ...
- WebStorm记录(1)
开始写前端,使用WebStorm,记录下使用过程 参考 WebStorm 初步使用 & HTML5 学习报告 webstorm怎么运行调试html WebStorm 快速开发教程 --CSS篇 ...
- hdu 6418(石头剪刀布 **)
题意是说双方各有剪刀,石头和布的卡片各 a,b,c,a‘,b',c' 张,对方是随机选择,问我方的最大预期得分. 这道题目一开始看到的时候感觉没有头绪,再次读题,发现题目说结果可能是分数,如果是分数的 ...
- 修改xshell的默认字间距和行间距
可能是不小心修改了xshell的某个配置,导致打开的会话中显示字间距和行间距都非常大,严重影响工作.参照官方手册也不能修改正常,详见:http://www.xshellcn.com/wenti/xiu ...