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: stoppedsupervisor> 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 服務使用
安裝和執行
-
安裝
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
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:
常見問題
- Linux 目錄和檔案的操作
- 命令的輸入 tab 鍵補全的操作
- 按文件操作的順序 (supervisord 沒有啟動的報錯)
- supervisor 的 web 管理介面
- 配置檔案修改定製應用的套路
- nginx 配置解釋,conf 檔案的作用
- vim 的使用和 sudo