uwsgi+nginx部署django項目

来源:https://www.cnblogs.com/liulangdemao/archive/2018/08/15/9483845.html
-Advertisement-
Play Games

uwsgi 為何還需要這東西 簡單來說,nginx屬於反向代理伺服器,他能做什麼事呢?監聽一個埠,比如說80,可以配置一個反向代理埠,比如8000,這樣,所有外部用戶對80埠的訪問實際上都是請求了8000埠的數據,只是用戶並非真實的在與8000埠交流,而是通過了80這座橋梁。目前自己只覺得 ...


uwsgi

為何還需要這東西

簡單來說,nginx屬於反向代理伺服器,他能做什麼事呢?監聽一個埠,比如說80,可以配置一個反向代理埠,比如8000,這樣,所有外部用戶對80埠的訪問實際上都是請求了8000埠的數據,只是用戶並非真實的在與8000埠交流,而是通過了80這座橋梁。目前自己只覺得這樣能隱藏自己的真實埠,大家有什麼高見請留言指出。 
既然如此,那麼實際上還是只能單用戶訪問,所以我們需要一個可以多用戶併發訪問的工具,那麼便是uwsgi了。

如何安裝?

pip install uwsgi

配置文件

首先給大家看看我項目的文件狀態:

FlyCold
├── FlyCold
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
├── manage.py
├── SchoolBuy
│   ├── admin.py
│   ├── forms.py
│   ├── __init__.py
│   ├── models.py
│   ├── urls.py
│   └── views.py
└── templates

 

解釋以下,這個是精簡後的目錄樹,創建的項目名為FlyCold,生成的FlyCold子目錄及SchoolBuy子目錄。我的主要代碼在SchoolBuy里,setting.py在Flycold子目錄里,manager.py在FlyCold根目錄里。 
安裝之後來一個配置文件,內容如下

# myweb_uwsgi.ini file
[uwsgi]

# Django-related settings

socket = :8080
#真實服務的埠

# Django項目根目錄 (絕對路徑)
chdir           = /home/lyt/FlyCold

# wsgi.py文件在項目中的位置
module          = FlyCold.wsgi

# process-related settings
# master
master          = true

# 運行的進程數
processes       = 4

# ... with appropriate permissions - may be needed
# chmod-socket    = 664
# clear environment on exit
vacuum          = true

 

這個.ini文件可以放在任何地方,啟動的時候uwsgi --ini ***.ini

配置nginx

找到nginx.conf,寫入如下內容

    server {
        #這裡是訪問時用到的埠
    listen       80;
        server_name  localhost;

        charset UTF-8;
        #這塊存讓日誌文件
        access_log  /var/log/nginx/SchoolBuy_access.log;
        error_log   /var/log/nginx/SchoolBuy_error.log;


        client_max_body_size 75M;
        location / {
                include uwsgi_params;
                #同uwsgi內容
                uwsgi_pass 127.0.0.1:8001;
                #鏈接超時時間
                uwsgi_read_timeout 30;
        }
    }

 

如此一來,重啟你的nginx,訪問80埠,就能看到效果了。

還有問題?

你可能發現了,你網頁上的靜態資源無法訪問!!比如說admin頁面,會特別簡陋,這是因為nginx+uwsgi+Django時,Django對靜態資源的處理nginx不能代理(可能吧)。總之這種事不該讓Django做,因為nginx在處理靜態資源上能力更強,對於靜態資源,就讓nginx處理吧。 
通常來說,你會有兩種靜態資源/media/開頭的鏈接和/static/開頭的。static用來處理一些網站原始圖片,視頻,js,css文件,Django是自己就支持這種鏈接的。那麼如何關閉讓Django處理/static/開頭的文件呢,很簡單,在setting.py中將DEBUG值改為False,這時,Django就不去處理/static/文件了。 
那麼/media/呢?一般來說,用戶上傳的圖片,我們會保存起來,在網頁上顯示時候就用/media/,在setting.py中設置

MEDIA_URL = '/media/' #訪問的首碼鏈接
MEDIA_ROOT = os.path.join(BASE_DIR, '../media') #存放文件的具體位置

再在url.py中添加

from django.conf import settings
from django.conf.urls.static import static
if settings.DEBUG:
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

 

這裡的意思是在DEBUG=True時,會解析/media/文件,文件存放的位置是第二個參數。 
如此一來當即在部署為生產環境時,只需要吧DEBUG改為False,Django就不會去處理staticmedia了。

收集靜態文件

Django有一個工具可以將應用里用到的所有靜態文件收集起來,方便nginx解析。具體: 
setting.py中設置STATIC_ROOT = os.path.join(BASE_DIR, '../collectedstatic') 
這樣收集的靜態文件就都放進上面的目錄里了。如何運行這個工具?python3 manager.py collectstatic

配置nginx解析靜態文件

同樣,nginx.conf 
首先,在文件頂部加入 
user root 
聲明讓root用戶跑nginx,否則訪問靜態文件可能提示沒有許可權 
其次,在上面說的配置文件location /前加入以下帶內容

        location /static/ {
            autoindex on;
            alias /root/SchoolBuyWeb/collectedstatic/;
        }

        location /media/ {
            autoindex on;
            alias /root/SchoolBuyWeb/media/;
        }

註意alias後對應好自己設定的目錄即可! 
重啟nginx,現在已經ok了~~


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 給定一個二叉樹,檢查它是否是鏡像對稱的。 例如,二叉樹 [1,2,2,3,4,4,3] 是對稱的。 1 / \ 2 2 / \ / \ 3 4 4 3 但是下麵這個 [1,2,2,null,3,null,3] 則不是鏡像對稱的: 1 / \ 2 2 \ \ 3 3 說明: 如果你可以運用遞歸和迭代兩 ...
  • 參考:https://blog.csdn.net/android_heng/article/details/76599302 二叉樹建立包括:根節點,左孩子,右孩子,data 定義如下: BinTree root; BinTree lChild; BinTree rChild; Object dat ...
  • 給定兩個二叉樹,編寫一個函數來檢驗它們是否相同。 如果兩個樹在結構上相同,並且節點具有相同的值,則認為它們是相同的。 示例 1: 輸入: 1 1 / \ / \ 2 3 2 3 [1,2,3], [1,2,3] 輸出: true 示例 2: 輸入: 1 1 / \ 2 2 [1,2], [1,nul ...
  • C++ 前言 c++是一種比較早的語言,具體誕生在什麼時候我就不記得了 然後進入正文 正文 Part 1 C++程式構造 C++程式構造比較簡單實現 這玩意反正Noip在考場上是可以用的,它包含了許多頭文件,所以又被稱為萬能頭文件 Ps: 本人不推薦使用萬能頭文件 雖然現在沒什麼大事發生,但是指不定 ...
  • 第一天 環境搭建和HelloWorld 1、先去下個java吧,所有語音都有自己的庫嘛,理解,我使用的是jdk1.8,雖然好像出到了9,現在大部分公司應該還是用7或者8保證版本相容吧 地址:http://www.oracle.com/technetwork/java/javase/downloads ...
  • 在開發中,查詢操作是使用最多的,而查詢列表是其中之一,查詢列表可分為分頁查詢和不分頁查詢(它們之間多了一次總記錄數查詢),還可以分為單表查詢和多表關聯查詢,返回的結構體根據前端使用的表單框架不同而有所區別。 我們先看看,對於列表分頁查詢,在介面中是如何處理的 1 @get('/api/product ...
  • Session: 是服務端的一個鍵值對 內部機制依賴於cookie 1、分類 Django中預設支持Session,其內部提供了5種類型的Session供開發者使用: 資料庫(預設) 緩存 文件 緩存+資料庫 加密cookie 配置方式不同,操作方式相同 2、配置(settings.py) 2.1  ...
  • 1.為什麼學習Python? Python:腳本語言,易入門,可移植。 Python適用範圍:web開發、自動化測試工具編寫。 適用崗位:運維開發(運維)、自動化測試(軟體測試)、Python開發(軟體開發)。 2.Python版本和運行環境: python 2.x版本支持到2020年,現在已停止更 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...