使用uwsgi發布項目


 

 

 

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還在執行

 

 我們停止這個自定的項目名字試試

再看看就沒有了:

 

 

然后再啟動

 


免責聲明!

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



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