久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

基于ubuntu如何通過Nginx部署Django

175次閱讀
沒有評論

共計 5631 個字符,預計需要花費 15 分鐘才能閱讀完成。

這篇文章主要介紹“基于 ubuntu 如何通過 Nginx 部署 Django”的相關知識,丸趣 TV 小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“基于 ubuntu 如何通過 Nginx 部署 Django”文章能幫助大家解決問題。

django 的部署可以有很多方式,采用 nginx+uwsgi 的方式是其中比較常見的一種方式。

在這種方式中,我們的通常做法是,將 nginx 作為服務器最前端,它將接收 web 的所有請求,統一管理請求。nginx 把所有靜態請求自己來處理(這是 nginx 的強項)。然后,nginx 將所有非靜態請求通過 uwsgi 傳遞給 django,由 django 來進行處理,從而完成一次 web 請求。可見,uwsgi 的作用就類似一個橋接器。起到橋梁的作用。

一、安裝 nginx 

nginx 是一款輕量級的 web 服務器 / 反向代理服務器及電子郵件(imap/pop3)代理服務器,并在一個 bsd-like 協議下發行。其特點是占有內存少,并發能力強,事實上 nginx 的并發能力確實在同類型的網頁服務器中表現較好。

nginx 同樣為當前非常流行的 web 服務器。利用其部署 django,我們在此也做簡單的介紹。

nginx 官網:

打開 ubuntu 控制臺(ctrl+alt+t)利用 ubuntu 的倉庫安裝。

fnngj@ubuntu:~$ sudo apt-get install nginx # 安裝 

啟動 nginx:

fnngj@ubuntu:~$ /etc/init.d/nginx start # 啟動
fnngj@ubuntu:~$ /etc/init.d/nginx stop # 關閉
fnngj@ubuntu:~$ /etc/init.d/nginx restart # 重啟 

修改 nginx 默認端口號,打開 /etc/nginx/nginx.conf 文件,修改端口號。

 server {
 listen 8088; #  修改端口號
 server_name localhost;
 #charset koi8-r; 
 #access_log logs/host.access.log main;
 location / {
 root html;
 index index.html index.htm;
 }

大概在文件 36 行的位置,將默認的 80 端口號改成其它端口號,如 8088。因為默認的 80 端口號很容易被其它應用程序占用。

然后,通過上面命令重啟 nginx。訪問:http://127.0.0.1:8088/

如果出現如上圖,說明 nginx 啟動成功。 

二、安裝 uwsgi 

  通過 pip 安裝 uwsgi。

root@ubuntu:/etc# python3 -m pip install uwsgi

測試 uwsgi,創建 test.py 文件:

def application(env, start_response):
 start_response(200 ok , [( content-type , text/html)])
 return [b hello world]

通過 uwsgi 運行該文件。

fnngj@ubuntu:~/pydj$ uwsgi --http :8001 --wsgi-file test.py

接下來配置 django 與 uwsgi 連接。此處,假定的我的 django 項目位置為:/home/fnngj/pydj/myweb

復制代碼   代碼如下:

uwsgi –http :8001 –chdir /home/fnngj/pydj/myweb/ –wsgi-file myweb/wsgi.py –master –processes 4 –threads 2 –stats 127.0.0.1:9191

常用選項:

http:協議類型和端口號

processes:開啟的進程數量

workers:開啟的進程數量,等同于 processes(官網的說法是 spawn the specified number ofworkers / processes)

chdir:指定運行目錄(chdir to specified directory before apps loading)

wsgi-file:載入 wsgi-file(load .wsgi file)

stats:在指定的地址上,開啟狀態服務(enable the stats server on the specified address)

threads:運行線程。由于 gil 的存在,我覺得這個真心沒啥用。(run each worker in prethreaded mode with the specified number of threads)

master:允許主進程存在(enable master process)

daemonize:使進程在后臺運行,并將日志打到指定的日志文件或者 udp 服務器(daemonize uwsgi)。實際上最常用的,還是把運行記錄輸出到一個本地文件上。

pidfile:指定 pid 文件的位置,記錄主進程的 pid 號。

vacuum:當服務器退出的時候自動清理環境,刪除 unix socket 文件和 pid 文件(try to remove all of the generated file/sockets)

三、nginx+uwsgi+django 

接下來,我們要將三者結合起來。首先羅列一下項目的所需要的文件:

myweb/
├── manage.py
├── myweb/
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
└── myweb_uwsgi.ini

在我們通過 django 創建 myweb 項目時,在子目錄 myweb 下已經幫我們生成的 wsgi.py 文件。所以,我們只需要再創建 myweb_uwsgi.ini 配置文件即可,當然,uwsgi 支持多種類型的配置文件,如 xml,ini 等。此處,使用 ini 類型的配置。

# myweb_uwsgi.ini file
[uwsgi]
# django-related settings
socket = :8000
# the base directory (full path)
chdir = /home/fnngj/pydj/myweb
# django s wsgi file
module = myweb.wsgi
# process-related settings
# master
master = true
# maximum number of worker processes
processes = 4
# ... with appropriate permissions - may be needed
# chmod-socket = 664
# clear environment on exit
vacuum = true

這個配置,其實就相當于在上一小節中通過 wsgi 命令,后面跟一堆參數的方式,給文件化了。

socket  指定項目執行的端口號。

chdir  指定項目的目錄。

module  myweb.wsgi,可以這么來理解,對于 myweb_uwsgi.ini 文件來說,與它的平級的有一個 myweb 目錄,這個目錄下有一個 wsgi.py 文件。

其它幾個參數,可以參考上一小節中參數的介紹。

接下來,切換到 myweb 項目目錄下,通過 uwsgi 命令讀取 myweb_uwsgi.ini 文件啟動項目。

fnngj@ubuntu:~$ cd /home/fnngj/pydj/myweb/
fnngj@ubuntu:~/pydj/myweb$ uwsgi --ini myweb_uwsgi.ini 
[uwsgi] getting ini configuration from myweb_uwsgi.ini
*** starting uwsgi 2.0.12 (32bit) on [sat mar 12 13:05:06 2016] ***
compiled with version: 4.8.4 on 26 january 2016 06:14:41
os: linux-3.19.0-25-generic #26~14.04.1-ubuntu smp fri jul 24 21:18:00 utc 2015
nodename: ubuntu
machine: i686
clock source: unix
detected number of cpu cores: 2
current working directory: /home/fnngj/pydj/myweb
detected binary path: /usr/local/bin/uwsgi
!!! no internal routing support, rebuild with pcre support !!!
chdir() to /home/fnngj/pydj/myweb
your processes number limit is 15962
your memory page size is 4096 bytes
detected max file descriptor number: 1024
lock engine: pthread robust mutexes
thunder lock: disabled (you can enable it with --thunder-lock)
uwsgi socket 0 bound to tcp address :8000 fd 3
python version: 3.4.3 (default, oct 14 2015, 20:37:06) [gcc 4.8.4]
*** python threads support is disabled. you can enable it with --enable-threads ***
python main interpreter initialized at 0x8b52dc0
your server socket listen backlog is limited to 100 connections
your mercy for graceful operations on workers is 60 seconds
mapped 319920 bytes (312 kb) for 4 cores
*** operational mode: preforking ***
wsgi app 0 (mountpoint=) ready in 1 seconds on interpreter 0x8b52dc0 pid: 7158 (default app)
*** uwsgi is running in multiple interpreter mode ***
spawned uwsgi master process (pid: 7158)
spawned uwsgi worker 1 (pid: 7160, cores: 1)
spawned uwsgi worker 2 (pid: 7161, cores: 1)
spawned uwsgi worker 3 (pid: 7162, cores: 1)
spawned uwsgi worker 4 (pid: 7163, cores: 1)

注意查看 uwsgi 的啟動信息,如果有錯,就要檢查配置文件的參數是否設置有誤。

再接下來要做的就是修改 nginx.conf 配置文件。打開 /etc/nginx/nginx.conf 文件,添加如下內容。

……
server {
 listen 8099; 
 server_name 127.0.0.1 
 charset utf-8;
 access_log /var/log/nginx/myweb_access.log;
 error_log /var/log/nginx/myweb_error.log;
 client_max_body_size 75m;
 location / { 
 include uwsgi_params;
 uwsgi_pass 127.0.0.1:8000;
 uwsgi_read_timeout 2;
 } 
 location /static {
 expires 30d;
 autoindex on; 
 add_header cache-control private;
 alias /home/fnngj/pydj/myweb/static/;
 }
 }
……

 listen 指定的是 nginx 代理 uwsgi 對外的端口號。

server_name  網上大多資料都是設置的一個網址(例,www.example.com),我這里如果設置成網址無法訪問,所以,指定的到了本機默認 ip。

在進行配置的時候,我有個問題一直想不通。nginx 到底是如何 uwsgi 產生關聯。現在看來大概最主要的就是這兩行配置。

include uwsgi_params;

uwsgi_pass 127.0.0.1:8000;

include 必須指定為 uwsgi_params;而 uwsgi_pass 指的本機 ip 的端口與 myweb_uwsgi.ini 配置文件中的必須一直。

現在重新啟動 nginx,翻看上面重啟動 nginx 的命令。然后,訪問:http://127.0.0.1:8099/

通過這個 ip 和端口號的指向,請求應該是先到 nginx 的。如果你在頁面上執行一些請求,就會看到,這些請求最終會轉到 uwsgi 來處理。

關于“基于 ubuntu 如何通過 Nginx 部署 Django”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注丸趣 TV 行業資訊頻道,丸趣 TV 小編每天都會為大家更新不同的知識點。

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-07-15發表,共計5631字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 苍山县| 碌曲县| 贺兰县| 高陵县| 宜兰县| 沭阳县| 固始县| 瑞昌市| 杭锦后旗| 思南县| 余姚市| 阿拉尔市| 青铜峡市| 十堰市| 南汇区| 思南县| 邯郸县| 蒙山县| 阿鲁科尔沁旗| 石狮市| 湟源县| 共和县| 云霄县| 铜陵市| 比如县| 青河县| 达尔| 合作市| 深水埗区| 颍上县| 隆子县| 马龙县| 黄平县| 开远市| 都匀市| 淳安县| 丹巴县| 清丰县| 且末县| 怀柔区| 三亚市|