centos7 使用nginx + tornado + supervisor搭建服務


如何在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

                

 
 



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM