1 安裝supervisor
本人使用的操作系統是Ubuntu-16.04,可使用如下命令安裝:
sudo apt-get install supervisor
也可使用pip3安裝:
pip3 install supervisor
但這種方式安裝不會自動生成配置文件,需要你手動創建配置文件夾和配置文件:
mkdir -p /etc/supervisor/conf.d # conf.d文件夾,用於存放子配置文件,然後可由主配置文件包含,當然你不需要可以不創建
echo_supervisord_conf > /etc/supervisor/supervisord.conf # 生成主配置文件
2 配置supervisor
對於16.04版本的Ubuntu系統,使用apt-get方式安裝成功supervisor後會自動在/etc/下生成一個文件夾supervisor/,所以不需要再手動創建這個文件夾,下面是這個/etc/supervisor/
注:conf.d文件夾和配置文件supervisor.conf都是安裝成功後自動生成的。然後修改surpervisord.conf文件。部署tornado基本不用怎麼修改,通常只需要將最後一行改爲下面的形式就可以了:
[include]
files = /etc/supervisor/conf.d/.conf
默認好像是以“/.ini”結尾的配置文件
3 配置tornado.conf文件
創建一個tornado.conf文件,並寫下如下內容:
[group:tornadoes]
programs=tornado-8080,tornado-8081
[program:tornado-8080]
command=/home/python/venv/bin/python3 /home/python/wechat/server.py --port=8080
directory=/home/python/wechat/
user=root
autorestart=true
redirect_stderr=true
stdout_logfile=/home/python/wechat/tornado.log
loglevel=info
[program:tornado-8081]
command=/home/python/venv/bin/python3 /home/python/wechat/server.py --port=8081
directory=/home/python/wechat
user=root
autorestart=true
redirect_stderr=true
stdout_logfile=/home/python/tornado.log
loglevel=info
主要解釋以下幾點:
- [group:tornadoes]分配組tornadoes,注意這個tornadoes字符串在使用supervisorctl工具時會用到。
- command=/home/python/venv/bin/python3 /home/python/wechat/server.py --port=8080
前面加黑的是你的python解釋器的絕對路徑,後面斜體是你的應用程序文件的絕對路徑,要使用參數–port指明端口,所以你的程序中要使用tornado.options來添加參數運行程序 - directory——是應用程序文件所在的文件夾的絕對路徑
user——是你的用戶名
stdout_logfile——配置你的log輸出文件的位置
loglevel——log等級
配置完成後,將該文件放在/etc/supervisor/conf.d/文件夾下,這就是剛纔配置supervisord.conf的路徑。
4 啓動supervisor
supervisord -c /etc/supervisor/supervisord.conf
如果沒有報錯,在輸入命令
supervisorctl
成功運行的結果:
當你修改了你的程序時,你可以通過這個工具來停止,啓動或重啓你的應用程序
supervisor> status # 查看程序狀態
supervisor> stop tornadoes:* # 關閉 tornadoes組 程序
supervisor> start tornadoes:* # 啓動 tornadoes組 程序
supervisor> restart tornadoes:* # 重啓 tornadoes組 程序
supervisor> update # 重啓配置文件修改過的程序
這裏的tornadoes就是你配置的組名。
到這裏,一切順利的話,你可以通過瀏覽器訪問你的tornado服務器了,但是要在url地址後面加上你相應的端口,因爲這裏還沒有使用Nginx來監聽80端口。
5 配置Nginx
創建一個以 .conf 結尾的配置文件:
upstream tornadoes {
server 127.0.0.1:8080;
server 127.0.0.1:8081;
}
server {
listen 80;
server_name IP; # IP填上你的服務器IP地址或域名,如果是本地,就是127.0.0.1
# 將Nginx作爲代理服務器
location / {
proxy_pass_header Server;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Scheme $scheme; # 協議 http https
proxy_pass http://tornadoes;
}
}
配置完之後將該文件放在/etc/nginx/conf.d/
的目錄下(可能有些舊版本的Nginx的配置文件不是放在這個目錄下,你可以參考我的另外一篇文章來安裝最新的Nginx服務器點擊查看),然後將該目錄下的默認配置文件(default.conf)移走,最好不要直接刪掉。啓動Nginx服務sudo /etc/init.d/nginx start
。
下面是我的tornado代碼:
from tornado.web import Application, RequestHandler
from tornado.httpserver import HTTPServer
import tornado.ioloop
import tornado.options
# 下面這行不能少
tornado.options.define("port", type=int, default=8080, help="服務器端口")
class IndexHandler(RequestHandler):
def get(self, *args, **kwargs):
# write表示將數據寫入緩衝區,後面可繼續添加,最終一起返回
self.write("hello world!")
if __name__ == '__main__':
# 下面這行不能少
tornado.options.parse_command_line()
route = [
('/', IndexHandler),
]
server = HTTPServer(Application(route))
server.listen(tornado.options.options.port)
tornado.ioloop.IOLoop.current().start()
然後查看瀏覽器,如下,可以用80端口訪問了: