uWSGI命令學習與使用


10. 完成uWSGI命令學習與使用

10.2 使用pip安裝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都不會自動重啟。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM