本人使用的操作系统是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 # 生成主配置文件
对于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”结尾的配置文件
创建一个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
主要解释以下几点:
配置完成后,将该文件放在/etc/supervisor/conf.d/文件夹下,这就是刚才配置supervisord.conf的路径。
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端口。
创建一个以 .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()