如何在Linux下部署一个简单的基于Nginx+Tornado+Supervisor的Python web服务。

Tornado:官方介绍,是使用Python编写出来的一个极轻量级、高可伸缩性和非阻塞IO的Web服务器软件,著名的 Friendfeed 网站就是使用它搭建的。官方网站:http://www.tornadoweb.org/

Supervisor:一个服务(进程)管理工具,主要用于监控我们的服务器上的服务,并且在出现问题时重启之。

Nginx:作为Web服务器,在这里主要利用它做反向代理。

整个的工作流程就是客户端访问Nginx主机,由Nginx反向代理到后端Tornado进程的服务器,而Tornado进程则由Supervisord管理。和其它常见的web服务架构相似,比如Nginx + PHP-FPM。

1:准备工作:

  (1):编写代码: index.py

import tornado.httpserver
import tornado.ioloop
import tornado.options
import tornado.web
import tornado.httpclient from tornado.options import define, options
define("port", default=8001, help="run on the given port ", type=int)
define("log_path", default='/tmp', help="log path ", type=str) class IndexHandler(tornado.web.RequestHandler):
def get(self):
headers = self.request.headers
for k, v in headers.items():
print(k, v)
greeting = self.get_argument('greeting', 'Hello')
self.write('%s , friendly user! %s ' % (greeting, headers)) def write_error(self, status_code, **kwargs):
self.write('Holly Shit Error %s' % status_code) if __name__=="__main__":
tornado.options.parse_command_line()
app = tornado.web.Application(handlers=[(r"/", IndexHandler)])
http_server = tornado.httpserver.HTTPServer(app)
http_server.listen(options.port)
tornado.ioloop.IOLoop.instance().start()

(2):本地运行:通过浏览器访问:http://127.0.0.1:8001 ,看看访问能否成功。

(3):如果能访问成功,将代码放到远程服务器上(centos7云服务),文件位置自定(本例  /var/data/index.py  ).

(4): tornado.options.parse_command_line()  //添加这段,否则在使用supervisor配置多个端口是会报端口占用错误。

安装supervisor : https://blog.csdn.net/donggege214/article/details/80264811 

2:安装Tornado:(centos7中默认python是2.7)

sudo pip install tornado

  (可能会因为python版本问题出现错误,那就添加版本号安装 : sudo pip install tornado==3.2.1 ) 

 

3:安装nginx

     sudo yum install nginx  

#启动   sudo systemctl start nginx
#停止 sudo systemctl stop nginx
#重启 sudo systemctl restart nginx
#查看状态 sudo systemctl status nginx

打开80端口,通过IP访问看看是否能访问成功。

4: 配置nginx:

 (1):修改文件 /etc/nginx/nginx.conf:

sudo vim /etc/nginx/nginx.conf

在 http{} 中添加

upstream tornadoes {
server 127.0.0.1:8000;
server 127.0.0.1:8001;
server 127.0.0.1:8002;
server 127.0.0.1:8003;
}  (2):修改文件/etc/nginx/conf.d/default.conf:
sudo vim /etc/nginx/conf.d/default.conf 
location / { 
  proxy_pass_header Server;
  proxy_set_header Host $http_host;
  proxy_redirect off;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_pass http://tornadoes;
}

5:安装 supervisor :

 sudo su  #切换为root用户

 yum install epel-release
yum install -y supervisor systemctl enable supervisord # 开机自启动

管理 supervisord:

# systemctl stop supervisord    #停止
# systemctl start supervisord #开始
# systemctl status supervisord #查看状态
# systemctl reload supervisord #重新启动
# systemctl restart supervisord #平滑启动
# supervisorctl status      # 查看启动的线程

 6:配置 supervisor

修改配置文件

sudo vim /etc/supervisord.conf

(1):将所有带 /tmp/...的路径修改下:
file=/tmp/supervisor.sock
修改为
file=/var/run/supervisor.sock logfile=/tmp/supervisord.log
修改为
logfile=/var/log/supervisord.log pidfile=/tmp/supervisord.pid
修改为
pidfile=/var/run/supervisord.pid serverurl=unix:///tmp/supervisor.sock
修改为
serverurl=unix:///var/run/supervisor.sock
(2):添加如下代码,对python进行管理

# 为了方便管理,增加一个tornado组
[group:tornados]
programs=tornado-0,tornado-1,tornado-2 # 分别定义三个tornado的进程配置
[program:tornado-0]
# 进程要执行的命令
command=python /var/data/index.py --port=8020 #python文件路径,端口号跟前面nginx配置的端口号对应
directory=/var/data/
user=root
# 自动重启
autorestart=true
redirect_stderr=true
# 日志路径
stdout_logfile=/var/log/nginx/tornado0.log
loglevel=info [program:tornado-1]
command=python /var/data/index.py --port=8021
directory=/var/data/index.py
user=root

autorestart=true
redirect_stderr=true
stdout_logfile=/var/log/nginx/tornado1.log
loglevel=info [program:tornado-2]
command=python /var/data/index.py --port=8022
directory=/var/data/
user=root

autorestart=true
redirect_stderr=true
stdout_logfile=/var/log/nginx/tornado2.log
loglevel=info
修改配置后需要重新加载

# supervisorctl update     #每次修改配置后更新一下配置

    注意:#每次修改配置文件后运行  可能出现一些问题,如(error: <class 'socket.error'>, [Errno 2] No such file or directory: file: /usr/lib64/python2.7/socket.py line: 224)

     #则先运行   sudo /usr/bin/python2 /usr/bin/supervisord -c /etc/supervisord.conf //你的supervisord配置文件位置
#再运行 supervisorctl update # supervisorctl reload #每次修改配置文件后重新启动
7:启动nginx
    sudo systemctl start nginx

8:查看运行状态:
   supervisorctl status

   浏览器通过ip访问:

如果无法访问,查看日志  /var/log/nginx/  中

tornado0.log
tornado1.log
tornado2.log

参考文档 : https://www.jianshu.com/p/9bebb99368ea

https://www.cnblogs.com/renfanzi/p/6233490.html#_label4

 
 


centos7 使用nginx + tornado + supervisor搭建服务的更多相关文章

  1. 部署项目Nginx+Tornado+Supervisor

    http://www.jianshu.com/p/9bebb99368ea Tornado Tornado 和现在的主流 Web 服务器框架(包括大多数 Python 的框架)有着明显的区别:它是非阻 ...

  2. Nginx + tornado + supervisor部署

    参考链接:supervisor + Tornado + Nginx 使用详解, 用tornado ,Supervisord ,nginx架网站, tornado官方文档 项目文档树: . ├── ch ...

  3. virtualenv 环境下 Nginx + Flask + Gunicorn+ Supervisor 搭建 Python Web

    在这篇文章里,我们将搭建一个简单的 Web 应用,在虚拟环境中基于 Flask 框架,用 Gunicorn 做 wsgi 容器,用 Supervisor 管理进程,然后使用 Python 探针来监测应 ...

  4. 一起学ASP.NET Core 2.0学习笔记(一): CentOS下 .net core2 sdk nginx、supervisor、mysql环境搭建

    作为.neter,看到.net core 2.0的正式发布,心里是有点小激动的,迫不及待的体验了一把,发现速度确实是快了很多,其中也遇到一些小问题,所以整理了一些学习笔记: 阅读目录 环境说明 安装C ...

  5. centos7+nginx+rtmp+ffmpeg搭建流媒体服务器(保存流目录与http目录不要随意配置,否则有权限问题)

    搭建nginx-http-flv-module升级代替rtmp模块,详情:https://github.com/winshining/nginx-http-flv-module/blob/master ...

  6. 三、直播整体流程 五、搭建Nginx+Rtmp直播流服务

    HTML5实现视频直播功能思路详解_html5教程技巧_脚本之家 https://m.jb51.net/html5/587215.html 三.直播整体流程 直播整体流程大致可分为: 视频采集端:可以 ...

  7. Windows下Nginx+Web.py+FastCGI服务搭建

    在搭建之前,有必要了解下什么是fastcgi,但鉴于我自己也不大了解,这里就不搬门弄斧了,请参考各种百科和官网资料. 1.资源下载 python下载地址:戳这里webpy下载地址:戳这里flup下载地 ...

  8. Ubuntu中使用Nginx+rtmp模块搭建流媒体视频点播服务

    1. 背景 不知不觉笔者来到流媒体部门已经一年半多了,积攒了不少的流媒体知识,但平时工作也比较忙,很少进行总结性的梳理,最近准备花几个周末时间写一个流媒体系列的实践文章,也算是给自己做总结的同时帮助有 ...

  9. centos7一步一步搭建docker phpmyadmin 及nginx配置phpmyadmin非根目录重点讲解

    系统环境:centos7.7  镜像image 版本:phpmyadmin/phpmyadmin(截止2020.01.10最新版) 参考文章:https://blog.csdn.net/a258929 ...

随机推荐

  1. OpsManage安装过程中遇到的问题和解决方案

    系统地址:https://github.com/welliamcao/OpsManage 系统:ubuntu ubuntu使用apt-get进行自动化安装 自带python2.7,不需要再次安装 1. ...

  2. LG2216 理想的正方形

    题意 有一个\(a \times b\)的整数组成的矩阵,现请你从中找出一个\(n \times n\)的正方形区域,使得该区域所有数中的最大值和最小值的差最小 思路 对于每一列,都用两个单调队列维护 ...

  3. moveUp()

    这个函数内容有点多,想讲一下大概思路: 向上移有两种情况1.前面为空白 这种情况有两个步骤 (1)将人当前的位置设置为空白(0), (2)再讲人前面的位置设置为人(2)2.前面为箱子 当前面为箱子时有 ...

  4. Linux设备驱动程序 之 并发及其管理

    竞态产生 Linux系统找那个存在大量的并发联系,因此会导致可能的竞态: 1. 正在运行的用户空间进程可以以多种组合方式访问我们的代码: 2. SMP系统甚至可以再不同的处理器上同时执行我们的代码: ...

  5. JS基础_数组简介

    内建对象 宿主对象 自定义对象 数组(Array) - 数组也是一个对象 - 它和我们普通的对象功能类似,也是用来存储一些值的 - 不同的是普通对象是使用字符串作为属性名的 数组是使用数字来作为索引来 ...

  6. 【软件工程】Beta冲刺(5/5)

    链接部分 队名:女生都队 组长博客: 博客链接 作业博客:博客链接 小组内容 恩泽(组长) 过去两天完成了哪些任务 描述 将数据分析以可视化形式展示出来 新增数据分析展示等功能API 服务器后端部署, ...

  7. windows服务器安装nodejs实现自动计划

    直接官网打开:https://nodejs.org/en/ 下载相应的系统nodejs版本直接安装后,通过命令行window+r    输入node + web(目录)+\pubils\app.js  ...

  8. Going Deeper with Convolutions阅读摘要

      论文链接:Going deeper with convolutions 代码下载: Abstract We propose a deep convolutional neural network ...

  9. 实体类(VO,DO,DTO)的划分

    实体类(VO,DO,DTO)的划分 (2011-12-21 15:50:27) 转载▼ 标签: it   经常会接触到VO,DO,DTO的概念,本文从领域建模中的实体划分和项目中的实际应用情况两个角度 ...

  10. Jenkins的详细安装及使用

    操作环境:Windows 踩过的坑:1,报错403,因为tomcat限制了访问地址(https://www.cnblogs.com/luoruiyuan/p/6518508.html) 2,构建spr ...