一、 更新系统

#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的更多相关文章

  1. django+nginx+supervisor+gunicorn+gevent 网站部署

    django+nginx+supervisor+gunicorn+gevent 网站部署 django,nginx,supervisor,gunicorn,gevent这几个都是在本领域大名鼎鼎的软件 ...

  2. Flask+Nginx+Supervisor+Gunicorn+HTTPS部署教程(CentOs)

    写在前面 之前的文章中,我们详细讲述了怎样安装 Nginx,Python,Supervisor,Gunicorn,HTTPS.经本人多次测试是完全可以跑通的,那么本篇将介绍怎样将这些组合起来运行一个H ...

  3. CentOS7中配置基于Nginx+Supervisor+Gunicorn的Flask项目

    配置Nginx 1.安装nginx yum install nginx 2.安装好后在/etc/nginx/default.d中添加location的配置,并指向8001端口,以后Gunicorn会监 ...

  4. CentOS 下部署Nginx+Gunicorn+Supervisor部署Flask项目

    原本之前有一部分东西是在Windows Server,但是由于Gunicorn不支持Windows部署起来颇为麻烦.最近转战CentOS,折腾一段时间,终于简单部署成功.CentOS新手,作为一个总结 ...

  5. Nginx+uwsgi+supervisor+Ubuntu+flask

    Nginx+uwsgi+supervisor+Ubuntu+flask Nginx+uwsgi+supervisor在Ubuntu上部署flask应用 网上找了许多讲关于Flask应用部署的文章几乎都 ...

  6. 利用DockerHub在Centos7.7环境下部署Nginx反向代理Gunicorn+Flask独立架构

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_165 上一篇文章:Docker在手,天下我有,在Win10系统下利用Docker部署Gunicorn+Flask打造独立镜像,是在 ...

  7. 一寸宕机一寸血,十万容器十万兵|Win10/Mac系统下基于Kubernetes(k8s)搭建Gunicorn+Flask高可用Web集群

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_185 2021年,君不言容器技术则已,欲言容器则必称Docker,毫无疑问,它是当今最流行的容器技术之一,但是当我们面对海量的镜像 ...

  8. Django 部署 uwsgi + nginx + supervisor

    Django 部署 uwsgi + nginx + supervisor https://hacpai.com/article/1460607620615?p=1&m=0 zonghua • ...

  9. asp.net core 二 Nginx Supervisor 负载,监听

           ASP.NET Core负载均衡集群搭建(CentOS7+Nginx+Supervisor+Kestrel)          asp.net core在linux运行下,一但命令行退出 ...

随机推荐

  1. 【简单易用的傻瓜式图标设计工具】Logoist 3.1 for Mac

    [简介] Logoist 是一款Mac上强大易用的傻瓜式图标设计制作工具,通过使用内置模板和预设效果,您可以立即创建高质量的图形内容和艺术作品.通过使用该应用程序,可用于制作图标LOGO. 一款用于创 ...

  2. Java 读取propertoes文件

    我一直不懂,Java里面的路径是咋样的,怎么找到我的资源文件? 直到我看到了这篇文件,写的是真棒.这篇文章  看完之后,豁然开朗的感觉 下面做些笔记,首先,Java有一个targer文件,下面有一个c ...

  3. Trap 冷启动与热启动告警

    冷启动: 设备断电重启. 热启动: snmp agent 从未使能到使能的操作会产生此告警.

  4. 极光推送API

    https://github.com/jpush/jpush-api-ruby-client/blob/master/docs/Guides.md#%E6%9B%B4%E6%96%B0%E8%AE%B ...

  5. Improving Deep Neural Networks: Hyperparameter tuning, Regularization and Optimization(第一周)深度学习的实践层面 (Practical aspects of Deep Learning)

    1. Setting up your Machine Learning Application 1.1 训练,验证,测试集(Train / Dev / Test sets) 1.2 Bias/Vari ...

  6. spingBoot整合mybatis+generator+pageHelper

    spingBoot整合mybatis+generator+pageHelper 环境/版本一览: 开发工具:Intellij IDEA 2018.1.4 springboot: 2.0.4.RELEA ...

  7. asp.net mvc cshtml (VIEWS)中怎么提供URL参数:

    其实,没有必要,只要在view中这样获取就可以: <%=Html.ViewContext.RouteData.Values["id"]%> 就算没有id的参数也不会报错 ...

  8. 关于Failed to check the status of the service com.taotao.service.ItemService. No provider available fo

    原文:http://www.bubuko.com/infodetail-2250226.html 项目中用dubbo发生: Failed to check the status of the serv ...

  9. 洛谷P2251 【质量检测】

    无意中刷st表题看到的题目(抄模板),一看到题目,,,没想用st表,直接莫队?????跑起来也不是特别慢... 这里用flag数组记录出现次数,set维护最小值,用的时候直接取头部. 代码也很短 #i ...

  10. Utterance-Wise Recurrent Dropout And Iterative Speaker Adaptation For Robust Monaural Speech Recognition

    单声道语音识别的逐句循环Dropout迭代说话人自适应     WRBN(wide residual BLSTM network,宽残差双向长短时记忆网络) [2] J. Heymann, L. Dr ...