日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

nginx+uwsgi部署Django

發布時間:2023/12/20 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 nginx+uwsgi部署Django 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

?

本篇文章主要介紹了解決nginx+uwsgi部署Django的所有問題(小結),小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

最近,自己暑假寫的小項目也算完畢了,想著投放到自己云服務器上,本來以為只要打開端口運行python3 manager runserver 0.0.0.0:80就搞定了,最后才知道這只適用于Django的開發模式,只支持單用戶訪問,既然如此,那么就得需要web服務器進行部署了。我便使用了nginx

nginx?

為什么是nginx?

首先我覺得它小,很輕量級,用著簡便,沒有apache那么龐雜,并且網上都推薦nginx部署Django。

安裝

這里直接略過,說一點Linux用戶推薦大家源碼安裝,因為命令安裝可能會自己裝成一個淘寶二次開發的nginx,個人還是推薦用原版。

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 settingssocket = :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就不會去處理static和media了。

收集靜態文件

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了~~

總結

以上是生活随笔為你收集整理的nginx+uwsgi部署Django的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。