10. 完成uWSGI命令學習與使用
pip3 install uwsgi
10.3 uwsgi的hello world測試
參照博客https://www.cnblogs.com/tiger666/articles/10313069.html里面的安裝uwsgi版塊
創建一個測試文件testuwsgi.py, 運行簡單的uWSGI站點
10.3.1 創建文件vim /opt/testuwsgi.py 寫入以下內容
def application(env, start_response): start_response('200 OK', [('Content-Type','text/html')]) return [b"Hello World"]
10.3.2 使用uwsgi命令啟動此文件
uwsgi --http :9000 --file testuwsgi.py
10.3.3 在瀏覽器通過IP加端口進行訪問
http://10.0.0.5:9000
10.4 配置uwsgi.ini文件
在django項目根目錄下(manage.py同級別目錄)創建這個文件
[uwsgi]
#使用nginx連接時使用,Django程序所在服務器地址
# socket=0.0.0.0:9000
#直接做web服務器使用,Django程序所在服務器地址
http=0.0.0.0:9000
#項目目錄
chdir=/opt/book_manage
#項目中wsgi.py文件的目錄,相對於項目目錄
wsgi-file=LIB/wsgi.py
# 進程數
processes=1
# 線程數
threads=2
# uwsgi服務器的角色
master=True
# 存放進程編號的文件
pidfile=uwsgi.pid
# 日志文件,因為uwsgi可以脫離終端在后台運行,日志看不見。我們以前的runserver是依賴終端的
# 如果啟用了supervisor工具,就將此行注釋
daemonize=uwsgi.log
# 指定依賴的虛擬環境
virtualenv=/root/Envs/book_manage_env
注意: 目前暫時先用http,如果使用nginx的話,就需要注釋掉http,啟用socket
10.5 使用uwsgi命令啟動django程序
uwsgi --ini /opt/book_manage/uwsgi.ini
10.6 uwsgi啟動后無法訪問的問題解決
修改項目里面的wsgi.py文件,將settings的配置指向dev.py
vim /opt/book_manage/book_manage/wsgi.py
修改配置文件
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'book_manage.settings')
10.7 uwsgi不能處理靜態文件
uwsgi本身是支持高並發,多進程的功能,這是它的優點
缺點: 不能處理靜態文件
11 收集django的靜態文件
由於uwsgi對靜態文件的處理很差,然而nginx處理靜態文件是一把手,所以我們的項目部署還需要結合nginx來使用
11.1 設置django的靜態文件目錄並收集, 打開mysite/settings.py, 加入這一項配置:
STATIC_ROOT='/opt/book_manage/static' # 在STATIC_URL = '/static/'配置上面加這一行
STATIC_URL = '/static/'
STATICFILES_DIRS=[
os.path.join(BASE_DIR,"static"),
]
那么,上述的參數STATIC_ROOT用在哪?看下面
11.2 通過python3 manage.py collectstatic 收集所有你使用的靜態文件保存到STATIC_ROOT
python3 manage.py collectstatic
# STATIC_ROOT 文件夾 是用來將所有STATICFILES_DIRS中所有文件夾中的文件,以及各app中static中的文件都復制過來
# 把這些文件放到一起是為了用nginx等部署的時候更方便
11.3 查看django的靜態文件收集目錄
ls /opt/book_manage/static
12.完成nginx的安裝並配置nginx
完成nginx處理圖書管理系統項目的靜態文件, 與后端的接口配置
12.1 nginx.conf配置文件詳情
server {
listen 80;
server_name 10.0.0.5;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
include uwsgi_params;
uwsgi_pass 0.0.0.0:9000;
}
location /static {
root /opt/book_manage;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
虛擬主機: 用於接受用戶發起的80端口的請求,反向代理轉發給9000的uwsgi應用, 同時處理后端的靜態文件static
12.2 nginx配置並啟動好之后,再啟用uwsgi.ini配置文件里面的socket並禁用http配置
[uwsgi]
#使用nginx連接時使用,Django程序所在服務器地址
socket=0.0.0.0:9000
#直接做web服務器使用,Django程序所在服務器地址
# http=0.0.0.0:9000
#項目目錄
chdir=/opt/book_manage
#項目中wsgi.py文件的目錄,相對於項目目錄
wsgi-file=book_manage/wsgi.py
# 進程數
processes=2
# 線程數
threads=2
# uwsgi服務器的角色
master=True
# 存放進程編號的文件
pidfile=uwsgi.pid
# 日志文件,因為uwsgi可以脫離終端在后台運行,日志看不見。我們以前的runserver是依賴終端的
# 如果啟用了supervisor工具,就將此行注釋
daemonize=uwsgi.log
# 指定依賴的虛擬環境
virtualenv=/root/Envs/book_manage
13. 測試uwsgi與nginx
測試手動啟動uwsgi與nginx,能夠保證正常訪問即可
13.1 啟動uwsgi
/root/Envs/book_manage/bin/uwsgi /opt/book_manage/uwsgi.ini
13.2 平滑重啟nginx
/opt/nginx116/sbin/nginx -s reload
13.3 項目訪問不了的解決思路(重要指數****************)
1 先關閉nginx, 再關閉uwsgi,直接使用python manage.py runserver命令啟動django項目
2 關閉剛才啟動的django,使用uwsgi將項目跑起來, 使用9000端口訪問,確認是否正常
3 注釋掉uwsgi配置文件中的http,啟用socket,再啟動uwsgi,再啟動nginx,再進行訪問
http://10.0.3.156
14 supervisor工具的安裝與使用
14.1 supervisor的概念
supervisor 是基於 python 的任務管理工具,用來自動運行各種后台任務,當然你也能直接利用 nohup 命令使任務自動后台運行,但如果要重啟任務,每次都自己手動 kill 掉任務進程,這樣很繁瑣,而且一旦程序錯誤導致進程退出的話,系統也無法自動重載任務。
14.2 安裝
由於supervisor在python3下無法使用,因此只能用python2去下載!!!!!!
由於supervisor在python3下無法使用,因此只能用python2去下載!!!!!!
由於supervisor在python3下無法使用,因此只能用python2去下載!!!!!!
easy_install supervisor # 這個是python2下面的安裝模塊命令,等同於python3下面的pip
如果easy_install命令無法使用的話,就安裝一下python-setuptools工具即可
yum install python-setuptools
14.3. 使用命令生成supervisor配置文件
echo_supervisord_conf > /etc/supervisord.conf
14.4. 修改配置文件/etc/supervisord.conf
在文件末尾添加如下配置:
[program:book_manage]
command=/root/Envs/book_manage/bin/uwsgi /opt/book_manage/uwsgi.ini
stopasgroup=true
killasgroup=true
# 如果發現關閉supervisor進程后,結束uwsgi進程無效,就需要加上這兩個參數
14.5. 啟動supervisor工具
supervisord -c /etc/supervisord.conf
14.6 查看supervisor的狀態
supervisorctl
supervisor交互模式中基本操作命令
start 進程名 # 啟動進程
stop 進程名 # 停止進程
start all # 啟動所有進程
stop all # 啟動所有進程
14.7 supervisor啟動命令參數
# 任務管理命令如下:有兩種,一個是參數形式, 一個是交互式
# 參數形式
supervisord -c /etc/supervisor.conf stop/start/restart all
supervisord -c /etc/supervisor.conf start qishi8
# 交互式形式
supervisord -c /etc/supervisor.conf
14.8 重新加載supervisor(了解即可)
一、添加好配置文件后
二、更新新的配置到supervisord
supervisorctl update
三、重新啟動配置中的所有程序
supervisorctl reload
四、啟動某個進程(program_name=你配置中寫的程序名稱)
supervisorctl start program_name
五、查看正在守候的進程
supervisorctl
六、停止某一進程 (program_name=你配置中寫的程序名稱)
supervisorctl stop program_name
七、重啟某一進程 (program_name=你配置中寫的程序名稱)
supervisorctl restart program_name
八、停止全部進程
supervisorctl stop all
注意:顯示用stop停止掉的進程,用reload或者update都不會自動重啟。