1. 程式人生 > >11 部署和執行

11 部署和執行

部署和執行

執行多個Tornado例項

  • 網頁響應不是特別的計算密集型處理
  • 多個例項充分利用 CPU
  • 多埠怎麼處理

使用Supervisor監控Tornado程序

安裝(注意看是否需要指定使用python2版本)

(tudo) [email protected]:~/py_case/tudo$ sudo apt-get install supervisor

sudo pip2 install supervisor
sudo apt-get install supervisor
  • 檢查配置檔案是否有 /etc/supervisor/supervisord.conf(主服務配置檔案)
ls /etc/supervisor/
echo_supervisord_conf > supervisord.conf

mkdir deploy
 
mv supervisord.conf deploy/


檢查是否有include配置 沒有就加上
[include]
files = /etc/supervisor/conf.d/*.conf


檢查inet_http_server
[inet_http_server]         ; inet (TCP) server disabled by default
port=*:9001                ; (ip_address:port specifier, *:port for
all iface) username=user ; (default is no username (open server)) password=123 ; (default is no password (open server)) 上傳到虛擬機器 檢查 less deploy/supervisord.conf sudo cp deploy/supervisord.conf /etc/supervisor/ ls -l /etc/supervisor/ less /etc/supervisor/supervisord.conf (注意虛擬機器對映9001--》9001) sudo
supervisord 檢查執行狀態 ps -ef|grep super supervisorctl status supervisorctl
deploy
├── supervisord.conf
  • 增加 Supervisor 配置檔案到 /etc/supervisor/conf.d

    使用pycharm建立檔案tudo_super.conf,內容如下:

    deploy
    ├── supervisord.conf
    └── tudo_super.conf
    
# 增加一個tornadoes組
[group:tornadoes]
programs=tornado-8000,tornado-8001,tornado-8002

# 分別定義三個tornado的程序配置

[program:tornado-8000]
; 程式的啟動目錄
directory=/home/pyvip/py_case/tudo
; 啟動命令,與手動在命令列啟動的命令是一樣的,注意這裡home不可用~代替
command=/home/pyvip/.virtualenvs/tudo/bin/python /home/pyvip/py_case/tudo/app.py --port=8000
; 在 supervisord 啟動的時候也自動啟動
autostart=true
; 啟動 5 秒後沒有異常退出,就當作已經正常啟動了
startsecs=5
; 程式異常退出後自動重啟
autorestart=true
; 啟動失敗自動重試次數,預設是 3
startretries=3
; 用哪個使用者啟動
user=pyvip
; 把 stderr 重定向到 stdout,預設 false
redirect_stderr=true
; stdout 日誌檔案大小,預設 50MB
stdout_logfile_maxbytes = 20MB
; stdout 日誌檔案備份數
stdout_logfile_backups = 20
; stdout 日誌檔案,需要注意當指定目錄不存在時無法正常啟動,所以需要手動建立目錄(supervisord 會自動建立日誌檔案)
stdout_logfile = /tmp/tornado_app_8000.log
loglevel=info

[program:tornado-8001]
directory=/home/pyvip/py_case/tudo
command=/home/pyvip/.virtualenvs/tudo/bin/python /home/pyvip/py_case/tudo/app.py --port=8001
autostart=true
startsecs=5
autorestart=true
startretries=3
user=pyvip
redirect_stderr=true
stdout_logfile_maxbytes = 20MB
stdout_logfile_backups = 20
stdout_logfile = /tmp/tornado_app_8001.log
loglevel=info


[program:tornado-8002]
directory=/home/pyvip/py_case/tudo
command=/home/pyvip/.virtualenvs/tudo/bin/python /home/pyvip/py_case/tudo/app.py --port=8002
autostart=true
startsecs=5
autorestart=true
startretries=3
user=pyvip
redirect_stderr=true
stdout_logfile_maxbytes = 20MB
stdout_logfile_backups = 20
stdout_logfile = /tmp/tornado_app_8002.log
loglevel=info
 sudo cp deploy/tudo_super.conf /etc/supervisor/conf.d/
 
 ls -l /etc/supervisor/conf.d/
 
 載入最新的配置檔案,停止原有程序並按新的配置啟動、管理所有程序
 sudo supervisorctl reload
 
 ps -ef|grep python
 
 sudo supervisorctl status

若更改檔案 如supervisord.conf

要重新cp

sudo cp deploy/supervisord.conf /etc/supervisor/

sudo supervisord

載入最新的配置檔案,停止原有程序並按新的配置啟動、管理所有程序
sudo supervisorctl reload

對映埠 子系統 9001----> 9001

訪問127.0.0.1:9001/

使用者user 密碼123

啟動和管理

啟動supervisor

一定要先啟動 daemon 程式 (supervisord) 才能執行管理操作,否則會報錯

使用預設的主配置檔案 /etc/supervisor/supervisord.conf
sudo supervisord

明確指定主配置檔案
sudo supervisord -c /home/pyvip/working/supervisord.conf

使用 user 使用者啟動supervisord
sudo supervisord -u user

檢視、操作程序狀態

(tornado) [email protected]:~/ws/tudo$ sudo supervisorctl
[sudo] password for pyvip:
tornadoes:tornado-8000 RUNNING pid 17652, uptime 0:00:28
tornadoes:tornado-8001 RUNNING pid 17653, uptime 0:00:28
tornadoes:tornado-8002 RUNNING pid 17654, uptime 0:00:28

# 停止執行tornado-8001伺服器程序
supervisor> stop tornadoes:tornado-8001
tornados:tornado-8001: stopped

# 停止執行整個tornado伺服器程序組

supervisor> stop tornadoes:
tornadoes:tornado-8000: stopped
tornadoes:tornado-8001: stopped
tornadoes:tornado-8002: stopped

supervisor> status
tornadoes:tornado-8000 STOPPED Jun 26 07:43 PM
tornadoes:tornado-8001 STOPPED Jun 26 07:43 PM
tornadoes:tornado-8002 STOPPED Jun 26 07:43 PM

supervisorctl 命令介紹

停止某一個程序,program_name 為 [program:x] 裡的 x
sudo supervisorctl stop program_name

啟動某個程序
sudo supervisorctl start program_name

(sudo supervisorctl start tornadoes:tornado-8000)

啟動整個tornado伺服器程序組

sudo supervisorctl start tornadoes:

重新執行tornado-8001伺服器程序

sudo supervisorctl start tornadoes:tornado-8000

重啟某個程序
sudo supervisorctl restart program_name

結束所有屬於名為 groupworker 這個分組的程序 (start,restart 同理)
sudo supervisorctl stop groupworker:

(sudo supervisorctl stop tornadoes:)

結束 groupworker:name1 這個程序 (start,restart 同理)
sudo supervisorctl stop groupworker:name1

停止全部程序,注:start、restart、stop 都不會載入最新的配置檔案
sudo supervisorctl stop all

載入最新的配置檔案,停止原有程序並按新的配置啟動、管理所有程序
sudo supervisorctl reload

根據最新的配置檔案,啟動新配置或有改動的程序,配置沒有改動的程序不會受影響而重啟
sudo supervisorctl update

使用 Nginx 作為反向代理

搭配 tornado 服務使用

img

安裝和執行

  • 安裝
    sudo apt-get install nginx

  • 檢視主配置檔案

    less /etc/nginx/nginx.conf

  • 檢測配置檔案正確可用
    sudo nginx -t

  • 顯示所有nginx程序的訊息

    ps -ef|grep nginx

  • 執行
    sudo nginx

  • 修改或增加了配置檔案後重啟
    sudo nginx -s reload

對映埠 子系統 80----> 8088

curl 127.0.0.1:80

訪問 http://127.0.0.1:8088/

nginx 配置檔案

主配置檔案是 /etc/nginx/nginx.conf

**專案對應的配置檔案放到 /etc/nginx/conf.d/ 或者 /etc/nginx/sites-enabled/ **

比如 tudo_nginx 檔案

upstream tornadoes{
    server 127.0.0.1:8000;
    server 127.0.0.1:8001;
    server 127.0.0.1:8002;
}

proxy_next_upstream error;

server {
    listen 8888;   # 一般是 80
    server_name 127.0.0.1; # 根據實際情況填寫對應ip

    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;
        # 把請求方向代理傳給tornado伺服器,負載均衡
        proxy_pass http://tornadoes;
    }
}
sudo cp deploy/tudo_nginx /etc/nginx/sites-enabled/

檢測配置檔案正確可用
sudo nginx -t

修改或增加了配置檔案後重啟
sudo nginx -s reload

顯示所有nginx程序的訊息
ps -ef|grep nginx

檢視程序狀態
sudo supervisorctl status


虛擬機器對映埠8888--->8888


curl 127.0.0.1:8888/login

結束所有屬於名為 tornadoes這個分組的程序

sudo supervisorctl stop tornadoes:

(tudo) [email protected]:~/py_case/tudo$ sudo  supervisorctl stop tornadoes:
tornadoes:tornado-8001: stopped
tornadoes:tornado-8000: stopped
tornadoes:tornado-8002: stopped

sudo supervisorctl status

sudo supervisorctl start tornadoes:

常見問題

  1. Linux 目錄和檔案的操作
  2. 命令的輸入 tab 鍵補全的操作
  3. 按文件操作的順序 (supervisord 沒有啟動的報錯)
  4. supervisor 的 web 管理介面
  5. 配置檔案修改定製應用的套路
  6. nginx 配置解釋,conf 檔案的作用
  7. vim 的使用和 sudo