8 部署
知識點
- supervisor配置與使用
- nginx配置
8.1 部署Tornado
爲了充分利用多核CPU,並且爲了減少同步代碼中的阻塞影響,在部署Tornado的時候需要開啓多個進程(最好爲每個CPU核心開啓一個進程)
因爲Tornado自帶的服務器性能很高,所以我們只需開啓多個Tornado進程。爲了對外有統一的接口,並且可以分發用戶的請求到不同的Tornado進程上,我們用Nginx來進行代理。
1. supervisor
爲了統一管理Tornado的多個進程,我們可以藉助supervisor工具。
安裝
sudo pip install supervisor
配置
運行echo_supervisord_conf命令輸出默認的配置項,可以如下操作將默認配置保存到文件中
echo_supervisord_conf > supervisord.conf
vim 打開編輯supervisord.conf文件,修改
[include]
files = relative/directory/*.ini
爲
[include]
files = /etc/supervisor/*.conf
include選項指明包含的其他配置文件。
將編輯後的supervisord.conf文件複製到/etc/目錄下
sudo cp supervisord.conf /etc/
然後我們在/etc目錄下新建子目錄supervisor(與配置文件裏的選項相同),並在/etc/supervisor/中新建tornado管理的配置文件tornado.conf。
[group:tornadoes]
programs=tornado-8000,tornado-8001,tornado-8002,tornado-8003
[program:tornado-8000]
command=/home/python/.virtualenvs/tornado_py2/bin/python /home/python/Documents/demo/chat/server.py --port=8000
directory=/home/python/Documents/demo/chat
user=python
autorestart=true
redirect_stderr=true
stdout_logfile=/home/python/tornado.log
loglevel=info
[program:tornado-8001]
command=/home/python/.virtualenvs/tornado_py2/bin/python /home/python/Documents/demo/chat/server.py --port=8001
directory=/home/python/Documents/demo/chat
user=python
autorestart=true
redirect_stderr=true
stdout_logfile=/home/python/tornado.log
loglevel=info
[program:tornado-8002]
command=/home/python/.virtualenvs/tornado_py2/bin/python /home/python/Documents/demo/chat/server.py --port=8002
directory=/home/python/Documents/demo/chat
user=python
autorestart=true
redirect_stderr=true
stdout_logfile=/home/python/tornado.log
loglevel=info
[program:tornado-8003]
command=/home/python/.virtualenvs/tornado_py2/bin/python /home/python/Documents/demo/chat/server.py --port=8003
directory=/home/python/Documents/demo/chat
user=python
autorestart=true
redirect_stderr=true
stdout_logfile=/home/python/tornado.log
loglevel=info
啓動
supervisord -c /etc/supervisord.conf
查看 supervisord 是否在運行:
ps aux | grep supervisord
supervisorctl
我們可以利用supervisorctl來管理supervisor。
supervisorctl
> status # 查看程序狀態
> stop tornadoes:* # 關閉 tornadoes組 程序
> start tornadoes:* # 啓動 tornadoes組 程序
> restart tornadoes:* # 重啓 tornadoes組 程序
> update # 重啓配置文件修改過的程序
執行status命令時,顯示如下信息說明tornado程序運行正常:
supervisor> status
tornadoes:tornado-8000 RUNNING pid 32091, uptime 00:00:02
tornadoes:tornado-8001 RUNNING pid 32092, uptime 00:00:02
tornadoes:tornado-8002 RUNNING pid 32093, uptime 00:00:02
tornadoes:tornado-8003 RUNNING pid 32094, uptime 00:00:02
2. nginx
對於使用ubuntu apt-get 安裝nginx,其配置文件位於/etc/nginx/sites-available中,修改default文件如下:
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;
}
upstream websocket {
server 127.0.0.1:8000;
}
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
location /static/ {
root /home/python/Documents/demo/chat;
if ($query_string) {
expires max;
}
}
location /chat {
proxy_pass http://websocket/chat;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
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;
}
}
啓動nginx
service nginx start # 啓動
service nginx stop # 停止
service nginx restart # 重啓
源碼安裝版本
啓動:sudo sbin/nginx
停止:sudo sbin/nginx -s stop
重啓:sudo sbin/nginx -s reload