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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

nginx、uwsgi部署django项目理论+实战

發(fā)布時(shí)間:2024/1/23 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 nginx、uwsgi部署django项目理论+实战 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
  • 基本環(huán)境:
    • Ubuntu 16.04.4 LTS
    • python 3.5 virtualenv
    • django project deployable

#理論分析

??部署django項(xiàng)目有很多方法,方法推薦可見 django官方文檔-deployment,作為一個(gè)強(qiáng)迫癥患者,當(dāng)然是要選擇一個(gè)既簡單又高效的部署方式了。在網(wǎng)上找到了一張這個(gè)對(duì)比圖:

??由此我就基本決定用uwsgi部署我的django項(xiàng)目了,下面我們正式來介紹一下uwsgi以及相關(guān)必要理論。

##WSGI
??WSGI,the Python Web Server Gateway Interface, 也就是說WSGI 是作為 Web 服務(wù)器與Web 應(yīng)用程序或應(yīng)用框架之間的一種低級(jí)別的接口,完成協(xié)議之間的轉(zhuǎn)換。WSGI 是基于現(xiàn)存的 CGI 標(biāo)準(zhǔn)而設(shè)計(jì)的。Django框架自帶了WSGI_Server,但是性能不好,所以自帶的web server更多的是測試(debug)用途,發(fā)布時(shí)則使用生產(chǎn)環(huán)境的WSGI server。

??從上圖來看WSGI就像一個(gè)橋梁連接服務(wù)器和應(yīng)用程序。當(dāng)瀏覽器發(fā)送請(qǐng)求時(shí),服務(wù)方調(diào)用應(yīng)用方并提供環(huán)境信息,以及一個(gè)回調(diào)函數(shù)(提供給應(yīng)用程序用來將消息頭傳遞給服務(wù)器方),并接收Web內(nèi)容作為返回值。故,我們可稱WSGI是一個(gè)中間件,主要功能如下:

  • 重寫環(huán)境變量后,根據(jù)目標(biāo)URL,將請(qǐng)求消息路由到不同的應(yīng)用對(duì)象。

  • 允許在一個(gè)進(jìn)程中同時(shí)運(yùn)行多個(gè)應(yīng)用程序或應(yīng)用框架。

  • 負(fù)載均衡和遠(yuǎn)程處理,通過在網(wǎng)絡(luò)上轉(zhuǎn)發(fā)請(qǐng)求和響應(yīng)消息。

  • 進(jìn)行內(nèi)容后處理,例如應(yīng)用XSLT樣式表。

##uWSGI
??uWSGI是一個(gè)Web服務(wù)器,它實(shí)現(xiàn)了WSGI協(xié)議、uwsgi、http等協(xié)議。Nginx中HttpUwsgiModule的作用是與uWSGI服務(wù)器進(jìn)行交換。而前述WSGI是一種Web服務(wù)器網(wǎng)關(guān)接口,是一個(gè)Web服務(wù)器(如nginx,uWSGI等服務(wù)器)與web應(yīng)用通信的一種規(guī)范。

uWSGI的主要特點(diǎn)如下:

  • 超快的性能
  • 低內(nèi)存占用
  • 多app管理
  • 詳盡的日志功能
  • 高度可定制(內(nèi)存大小限制,服務(wù)一定次數(shù)后重啟等)

##uwsgi
??uwsgi是一個(gè)協(xié)議,是一個(gè)uWSGI服務(wù)器自有的協(xié)議,它用于定義傳輸信息的類型(type of information),每一個(gè)uwsgi packet前4byte為傳輸信息類型描述。而uWSGI是實(shí)現(xiàn)了uwsgi和WSGI兩種協(xié)議的Web服務(wù)器。

nginx

??所以到現(xiàn)在你應(yīng)該清楚的明白一點(diǎn),我們要配置一個(gè) django項(xiàng)目,配置一個(gè)uWSGI服務(wù)器就夠了。但是考慮到性能問題,我們?cè)趗WSGI服務(wù)器之前再加一個(gè)nginx服務(wù)器。為什么呢?原因很簡單,因?yàn)閚ginx具備優(yōu)秀的靜態(tài)內(nèi)容處理能力,所以靜態(tài)內(nèi)容由nginx自己處理;動(dòng)態(tài)內(nèi)容轉(zhuǎn)發(fā)給uWSGI服務(wù)器,這樣就可以達(dá)到更好的客戶端響應(yīng)。

#部署實(shí)戰(zhàn)

??根據(jù)上面的分析,我們的部署架構(gòu)如下圖所示:

uWSGI部署

??uwsgi部署更詳細(xì)請(qǐng)參考uwsgi官方文檔,安裝命令pip install uwsgi,這里我就簡單列出條目:

# Django-related settings [uwsgi] socket = 127.0.0.1:8001# the base directory (full path) chdir = /share_dir/newsite/# Django s wsgi file wsgi-file = newsite/wsgi.py# process-related settings # master master = true# maximum number of worker processes processes = 10 enable-threads = true threads = 1# ... with appropriate permissions - may be needed # chmod-socket = 664 # clear environment on exit vacuum = true daemonize = /share_dir/newsite/uwsgi.log pidfile=/share_dir/newsite/uwsgi.pid # 啟動(dòng)uwsgi的用戶名和用戶組 uid=root gid=root

nginx

?安裝apt install nginx,之后修改配置文件如下:

server {# the port your site will be served onlisten 80 default_server;# the domain name it will serve for#server_name 127.0.0.1; # substitute your machine's IP address or FQDNcharset utf-8;# max upload sizeclient_max_body_size 75M; # adjust to taste# Django medialocation /media {alias /share_dir/newsite/media; # your Django project's media files - amend as required}location /static {alias /share_dir/newsite/global_static; # your Django project's static files - amend as required}# Finally, send all non-media requests to the Django server.location / {include /etc/nginx/uwsgi_params; # the uwsgi_params file you installeduwsgi_pass 127.0.0.1:8001;} }

uwsgi和nginx參數(shù)映射文件(uwsgi_params):

uwsgi_param QUERY_STRING $query_string; uwsgi_param REQUEST_METHOD $request_method; uwsgi_param CONTENT_TYPE $content_type; uwsgi_param CONTENT_LENGTH $content_length;uwsgi_param REQUEST_URI $request_uri; uwsgi_param PATH_INFO $document_uri; uwsgi_param DOCUMENT_ROOT $document_root; uwsgi_param SERVER_PROTOCOL $server_protocol; uwsgi_param UWSGI_SCHEME $scheme;uwsgi_param REMOTE_ADDR $remote_addr; uwsgi_param REMOTE_PORT $remote_port; uwsgi_param SERVER_PORT $server_port; uwsgi_param SERVER_NAME $server_name;

然后再介紹幾個(gè)常用命令:

// uwsgi命令 ps -ax | grep uwsgi //查看uwsgi運(yùn)行進(jìn)程 uwsgi yourfile.ini //啟動(dòng)uwsgi服務(wù),必須說明這是其中一種方式,其他的請(qǐng)參考官方文檔 uwsgi --stop uwsgi.pid // 停止服務(wù) uwsgi --reload uwsgi.pid // 重啟服務(wù) // nginx 命令 systemctl status/stop/restart/start nginx.services

??必須說這個(gè)總結(jié)的太簡單,當(dāng)時(shí)部署我是做了大量的工作,比如了解nginx的工作模型等,有時(shí)間我再總結(jié)!

總結(jié)

以上是生活随笔為你收集整理的nginx、uwsgi部署django项目理论+实战的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。