基于ubuntu怎么通過Nginx部署Django

本文小編為大家詳細(xì)介紹“基于ubuntu怎么通過Nginx部署Django”,內(nèi)容詳細(xì),步驟清晰,細(xì)節(jié)處理妥當(dāng),希望這篇“基于ubuntu怎么通過Nginx部署Django”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學(xué)習(xí)新知識吧。

創(chuàng)新互聯(lián)建站-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比綏濱網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式綏濱網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋綏濱地區(qū)。費(fèi)用合理售后完善,十余年實(shí)體公司更值得信賴。

一、安裝nginx                                                                       

nginx是一款輕量級的web 服務(wù)器/反向代理服務(wù)器及電子郵件(imap/pop3)代理服務(wù)器,并在一個bsd-like 協(xié)議下發(fā)行。其特點(diǎn)是占有內(nèi)存少,并發(fā)能力強(qiáng),事實(shí)上nginx的并發(fā)能力確實(shí)在同類型的網(wǎng)頁服務(wù)器中表現(xiàn)較好。

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

nginx官網(wǎng):

打開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 #關(guān)閉
fnngj@ubuntu:~$ /etc/init.d/nginx restart #重啟

修改nginx默認(rèn)端口號,打開/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行的位置,將默認(rèn)的80端口號改成其它端口號,如 8088。因?yàn)槟J(rèn)的80端口號很容易被其它應(yīng)用程序占用。

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

基于ubuntu怎么通過Nginx部署Django

如果出現(xiàn)如上圖,說明nginx啟動成功。 

二、安裝uwsgi                                                           

 通過pip安裝uwsgi。

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

測試uwsgi,創(chuàng)建test.py文件:

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

通過uwsgi運(yùn)行該文件。

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

基于ubuntu怎么通過Nginx部署Django

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

復(fù)制代碼 代碼如下:


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

常用選項(xiàng):

http : 協(xié)議類型和端口號

processes : 開啟的進(jìn)程數(shù)量

workers : 開啟的進(jìn)程數(shù)量,等同于processes(官網(wǎng)的說法是spawn the specified number ofworkers / processes)

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

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

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

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

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

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

pidfile : 指定pid文件的位置,記錄主進(jìn)程的pid號。

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

三、nginx+uwsgi+django                                        

接下來,我們要將三者結(jié)合起來。首先羅列一下項(xiàng)目的所需要的文件:

myweb/

├── manage.py

├── myweb/

│  ├── __init__.py

│  ├── settings.py

│  ├── urls.py

│  └── wsgi.py

└── myweb_uwsgi.ini

在我們通過django創(chuàng)建myweb項(xiàng)目時,在子目錄myweb下已經(jīng)幫我們生成的 wsgi.py文件。所以,我們只需要再創(chuàng)建myweb_uwsgi.ini配置文件即可,當(dāng)然,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

這個配置,其實(shí)就相當(dāng)于在上一小節(jié)中通過wsgi命令,后面跟一堆參數(shù)的方式,給文件化了。

socket  指定項(xiàng)目執(zhí)行的端口號。

chdir   指定項(xiàng)目的目錄。

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

其它幾個參數(shù),可以參考上一小節(jié)中參數(shù)的介紹。

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

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的啟動信息,如果有錯,就要檢查配置文件的參數(shù)是否設(shè)置有誤。

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

……
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  網(wǎng)上大多資料都是設(shè)置的一個網(wǎng)址(例,www.example.com),我這里如果設(shè)置成網(wǎng)址無法訪問,所以,指定的到了本機(jī)默認(rèn)ip。

在進(jìn)行配置的時候,我有個問題一直想不通。nginx到底是如何uwsgi產(chǎn)生關(guān)聯(lián)?,F(xiàn)在看來大概最主要的就是這兩行配置。

include uwsgi_params;

uwsgi_pass 127.0.0.1:8000;

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

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

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

基于ubuntu怎么通過Nginx部署Django

讀到這里,這篇“基于ubuntu怎么通過Nginx部署Django”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識點(diǎn)還需要大家自己動手實(shí)踐使用過才能領(lǐng)會,如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

網(wǎng)頁題目:基于ubuntu怎么通過Nginx部署Django
文章網(wǎng)址:http://muchs.cn/article44/ihcehe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站、手機(jī)網(wǎng)站建設(shè)建站公司、小程序開發(fā)、云服務(wù)器、商城網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

微信小程序開發(fā)