物聯網第六步: Tornado的部署

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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章