1、先下載 uwsgi
指定豆瓣源下載
pip install -i https://pypi.douban.com/simple uwsgi
2、查看你的uwsgi基於那個python解釋器運行的
uwsgi --python-version
運行簡單的uWSGI
先建立一個測試的文件 eg: test_uwsgi.py def application(env, start_response): start_response('200 OK', [('Content-Type','text/html')]) return [b"Hello World"] # python3 return ["Hello World"] # python2
然后運行你的文件:
uwsgi --http :8000 --wsgi-file +文件名
uwsgi --http :8000 --wsgi-file test_uesgi.py
這個時候就可以看到我們的uwsgi已經啟動了的
這個時候我們訪問的時候 就可以通過8000端口看到 我們測試文件的內容
上面是通過追加file來訪問文件,我們可以通過追加model 來訪問文件夾(就是我們的python程序)
uwsgi 啟動命令
uwsgi啟動文件 uwsgi --http :8000 --wsgi-file |文件名 uwsgi啟動文件夾(其實就是我們的python程序) uwsgi --http :8000 --wsgi-module +項目名字 wsgi.py
首先 進入我們的django程序中 創建一個app:django-admin startapp +app名字
eg:
我們進入我們django項目下的url中寫上響應信息
然后退出保存
然后 切換到上一級目錄 就是切換到uwsgi.py和url.py保存的上一級別
然后使用uwsgi命令啟動(切記這個時候我們使用的是http請求鏈接的下面與nginx的結合的時候就是socket鏈接了)
uwsgi --htpp :啟動端口 --module +項目.wsgi # 指定其項目下的wsgi.py文件啟動
uwsgi --http :9000 --module mysite15.wsgi
可以后面加上參數 --py-autoreload = 1 自動加載 就相當於我們的denug = True 模式 修改完之后自動生效
uwsgi --http :8088 --module mysite15.wsgi --py-autoreload=1
eg: 這是一個啟動的額命令並且后面是指向的uwsgi的日志信息
/data/server/pyenv/easyops/bin/uwsgi -s :9090 -p 2 -d /data/logs/uwsgi/easyops/uwsgi.log -w index --py-autoreload=1
nginx + uwsgi+django:
靜態文件的丟失:
然后下面我們來看看我們的admin界面
訪問之后就是這樣的了 沒有樣式了 ,這說明uwsgi是不會杜讀取我們的靜態界面的 就是我們的樣式
第一種使用命令方式:
然后我們通過nginx來分配尋找靜態資源
先說一種 我們可以直接通過nginx來直接分發到我們的 項目上的,運用ngin的proxy_pass 參數
django的靜態文件和nginx的配置:
使用nginx和uwsgi結合的配置信息
首先進入nginx的conf目錄中看到很重要的自帶的配置文件:uwsgi_params 這個文件就是專門做nginx和uwsgi結合的
然后進入nginx.conf中進行配置 在http中的server下進行配置
如果我們創建的 查找靜態資源的路徑沒有的話就需要去創建一個
然后進入我們的django程序中的setting中把我們剛才指定nginx尋找靜態文件的目錄給告訴django程序 然后把它的靜態文件給那個文件夾 nginx就能找到了
要在settings加上一個 :STATIC_ROOT= nginx指定尋找靜態文件的目錄
mysite/settings.py
STATIC_ROOT='/opt/nginx1-12/static' STATIC_URL = '/static/' STATICFILES_DIRS=[ os.path.join(BASE_DIR,"static"), ]
上述的參數STATIC_ROOT用在哪?
通過python manage.py collectstatic 收集所有你使用的靜態文件保存到STATIC_ROOT!
STATIC_ROOT 文件夾 是用來將所有STATICFILES_DIRS中所有文件夾中的文件,以及各app中static中的文件都復制過來 # 把這些文件放到一起是為了用nginx等部署的時候更方便
mysite/settings.py
STATIC_ROOT='/opt/nginx1-12/static' STATIC_URL = '/static/' STATICFILES_DIRS=[ os.path.join(BASE_DIR,"static"), ]
上述的參數STATIC_ROOT用在哪?
通過python3 manage.py collectstatic 收集所有你使用的靜態文件保存到STATIC_ROOT!
STATIC_ROOT 文件夾 是用來將所有STATICFILES_DIRS中所有文件夾中的文件,以及各app中static中的文件都復制過來
# 把這些文件放到一起是為了用nginx等部署的時候更方便
下面這個提醒我們沒有manage.py是因為我們要去項目根目錄
有時候會提醒我們沒有這個文件夾 那我們就自己手動mkdir一個
然后執行
python manage.py collectstatic
會告訴我們都已經完成了
然后查看我們指定的文件夾內
這個時候我們就要啟動我們的uwsgi了 這時候有個坑,uwsgi和nginx的結合的時候不可以使用
uwsgi指明http協議,瀏覽器可以直接訪問,走的是http協議, 然而nginx的uwsgi_pass 不認識http協議,必須要用socket連接
所以使用nginx和uwsgi分發的命令應該是socket啟動的
uwsgi --socket :9000 --module 項目.wsgi --py-autoreload=1
uwsgi --socket :9000 --module mysite15.wsgi --py-autoreload=1
第二種使用ini配置文件:
隨意在任意一處創建一個uwsgi.ini結尾的文件 但是最好在我們的項目目錄下:
[uwsgi] #使用nginx連接時使用 socket=0.0.0.0:9000 #不用nginx直接當做web服務器使用 #http=0.0.0.0:9000 #項目目錄絕對路徑 chdir=/data/opt/Myproject/venv/mysite15 #wsgi文件路徑,在項目底下 wsgi-file=mysite15/wsgi.py #指定解釋器目錄 home=/data/opt/Myproject/venv # which python 找一下你的項目用的python解釋器的位置 我用的虛擬環境所以就是這個位置 processes=4 threads=2 master=True pidfile=uwsgi.pid #daemonize=uwsgi.log
然后退出看下當前位置如果有uwsgi.ini文件就直接啟動
啟動:
uwsgi --ini uwsgi.ini
如果沒有的話就指定位置啟動不然會進行報錯找不到的
uwsgi --ini uwsgi.ini文件存放的目錄/uwsgi.ini
supervisor:
supervisor 是一個基於python的任務管理工具,在python3下無法下載只能通過python2 去下載
easy_install supervisor
2、將你的supervisor重定向到一個指定文件方便查看
echo_supervisord_conf > 你要指定的文件目錄
echo_supervisord_conf > /etc/supervisord.conf
3、
找到我們的當前的環境下的uwsgi
然后進入你重定向的這個文件內 在配置文件的最后面加上兩行配置
[program:隨意設置的名字]
command=python解釋器下的bin目錄下的 uwsgi 然后加載你的uwsgi.ini文件
[program:my_django15]
command=/data/opt/Myproject/venv/bin/uwsgi --ini /data/opt/Myproject/venv/mysite15/uwsgi.ini
然后啟動:
supervisord -c /etc/supervisord.conf
然后進入任務界面:
supervisorctl
這個時候看到我們的uwsgi還在執行
我們停止這個自定的項目名字試試
再看看就沒有了:
然后再啟動