1. 程式人生 > >uWSGI+Nginx+Django安裝和配置

uWSGI+Nginx+Django安裝和配置

WSGI是為python語言定義的通用閘道器介面,它承擔python web框架(django、flask、web.py等)和web伺服器(nginx、apache、lighttpd等)之間的中間層。


    瀏覽器                      chrome、firefox、ie等
      |
    web伺服器                   nginx、apache等
      |
    閘道器介面                    CGI、FastCGI、WSGI等
      |
    Python(程式、Web框架)     Django、Flask、Tornado等

python中自帶的wsgiref就是一種wsgi介面的標準實現,但是,由於100%使用python實現等原因,導致wsgiref實在過於緩慢,只能用於測試和學習。生產環境中我們需要使用效能更高的伺服器,目前常用的wsgi伺服器有:uWSGI、Gunicorn、twisted.web。

1 uWSGI的安裝

uWSGI是用C語言寫的高效能WSGI伺服器,安裝uWSGI前我們需要安裝Python和C編譯器(GCC)。推薦使用python包管理器pip安裝uWSGI。


#安裝最新穩定版
pip install uWSGI
#也可以安裝長期支援版(LTS版本)
#pip install http://projects.unbit.it/downloads/uwsgi-lts.tar.gz

在ubuntu下可以使用apt-get來安裝


apt-get install uwsgi  

在fedora、redhat、centos下使用yum安裝


yum groupinstall "Development Tools"
yum install python  

編譯安裝,從github下載uwsgi程式碼,cd到目錄下


python uwsgiconfig.py --build

2 測試uwsgi是否安裝成功

在終端中輸入以下命令檢視uwsgi的版本號,如果輸出正常,說明uswgi已安裝成功


$ uwsgi --version
2.0.11.1

我們可以編寫一個簡單的wsgi應用來測試uwsgi是否被安裝成功,首先建立一個test.py檔案:


# test.py
def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    return [b"Hello World"] # python3
    #return ["Hello World"] # python2

執行uwsgi:


uwsgi --http :8000 --wsgi-file test.py

引數中,http :8000表示使用http協議,埠號為8000,wigi-file則表示要執行的wsgi應用程式檔案。uwsgi執行後開啟瀏覽器,訪問http://127.0.0.1:8000/ ,或者是相應伺服器地址的8000埠,就可以看到hello world 頁面了。

上面的例子中,我們用瀏覽器直接訪問了uwsgi執行的python程式(只有一個入口函式的wsgi測試應用test.py),其訪問結構如下所示。


    瀏覽器 <-> uWSGI <-> Python

上述方式執行uWSGI服務的過程中,可以使用CTRL+C即可停止服務,在後續的章節中會講到自動管理和部署。

3 nginx和django的配置

nginx和django的安裝不是本文的重點,故在此略去,只討論配置部分。在這裡,我們要實現的效果如下:


    瀏覽器 <-> nginx <-> uWSGI <-> Django(python)

uwsgi_params 配置檔案

uWSGI使用的協議不完全是標準的WSGI協議,我們需要從Github下載uwsgi_paraments配置檔案,並將該檔案拷貝到專案路徑中(例如:/user/home/pengquanxin/projects/mysite1/)。

Nginx伺服器配置

接下來,要配置nginx伺服器和uWSGI互通,可以使用unix套接字方式和TCP埠方式。在nginx配置資料夾(/etc/naginx/site-enabled 或 /usr/local/etc/nginx/sites-enabled)中新建網站的配置檔案mystie_nginx.conf,輸入以下內容:


# mysite_nginx.conf

# nginx需要連線的上游
upstream django {
    server unix:///path/to/your/mysite/mysite.sock; # 使用unix套接字
    #server 127.0.0.1:8001; # 使用TCP埠請註釋上一行,並取消本行註釋,這裡的埠指的是跑uwsgi的埠
}

# nginx伺服器配置
server {
    # 監聽埠
    listen      80;
    # 域名
    server_name .example.com;
    # 編碼
    charset     utf-8;

    # 最大上傳大小
    client_max_body_size 75M;   

    # Django 的media路徑
    location /media  {
        alias /path/to/your/mysite/media;  
    }

    # 靜態檔案路徑
    location /static {
        alias /path/to/your/mysite/static;
    }

    # 將動態請求轉發到uwsgi跑的django程式
    location / {
        uwsgi_pass  django;
        include     /path/to/your/mysite/uwsgi_params; # 從github上下載的uwsgi_params 檔案路徑
    }
}

你也可以把這個配置檔案放在專案路徑中,然後建立一個連結到nginx配置資料夾:


sudo ln -s ~/path/to/your/mysite/mysite_nginx.conf /etc/nginx/sites-enabled/

部署靜態檔案

在部署伺服器之前,需要先將Django的靜態檔案部署到靜態資料夾中,首先,編輯django網站的settings.py檔案


STATIC_ROOT = os.path.join(BASE_DIR, "static/")

然後,執行以下命令


python manage.py collectstatic

4 啟動服務

在啟動nginx之前,我們需要先啟動uWSGI,進入專案目錄然後輸入以下命令,在這裡我們使用unix套接字方式:


#注:django1.6 前的版本需要手動新增wsgi.py
uwsgi --socket mysite.sock

如果nginx和uwsgi跑在同一臺伺服器上,使用unix套接字就可以了,unix套接字方式效能要高很多,但不能跨機器訪問。當nginx和uWSGI不在一臺伺服器上時,就需要使用TCP埠方式(別忘了更改nginx配置檔案,取消相應註釋):


uwsgi --socket :8001 --module mysite.wsgi --chmod-socket=664

接下來,啟動nginx伺服器,就可以訪問django站點了。

5 使用ini配置檔案跑uWSGI

到這裡,我們已經把nginx+uWSGI+Django跑起來了,但uWSGI的引數比較多的時候,每次都要輸入非常麻煩,這時,我們可以在django專案目錄下建立一個mysite.uwsgi.ini


[uwsgi]
# 專案根目錄路徑(full path)
chdir           = /path/to/your/project
# Django的 wsgi 檔案
module          = mysite.wsgi
# virtualenv目錄 (full path)
home            = /path/to/virtualenv

master          = true
# 最大工作程序數(CPU密集型建議設為CPU核心數,IO密集型建議設為CPU核心數的兩倍)
processes       = 16
# unix套接字檔案路徑
socket          = /path/to/your/project/mysite.sock
# socket檔案許可權
# chmod-socket    = 664
# 退出時清空環境
vacuum          = true

然後,直接根據配置檔案執行uwsgi即可:


uwsgi --ini mysite.uwsgi.ini

6 管理uwsgi

Emperor模式

uWSGI的Epreror模式可以用來管理機器上部署的uwsgi服務,在這種模式下,會有一個特殊的程序(皇帝)對其它部署的服務(諸侯)進行監視。我們將所有配置檔案(ini或xml檔案,如上一節中的mysite.uwsgi.ini)統一放到一個資料夾(如:/etc/uwsgi/vassals)中,然後啟動Emperor模式:


uwsgi --emperor /etc/uwsgi/vassals

這樣,就會自動讀取資料夾中的配置檔案,並自動監控這些uwsgi服務: - 檢測資料夾中有新的配置檔案時,會啟動新的uwsgi服務例項 - 檢測到一個配置檔案發生改變,會自動重啟該服務 - 檢測到一個配置檔案被移除,則自動停止該服務 - 如果一個服務死了(諸侯),皇帝程序會重啟該服務 - 如果監控程序(皇帝)死了,所有服務(諸侯)都會停止

用systemd管理uwsgi服務

配合Eperor模式,在centos、fedora、archlinux中,我們可以用systemd來管理uwsgi,首先,建立一個systemd service檔案(/etc/systemd/system/emperor.uwsgi.service)


[Unit]
Description=uWSGI Emperor
After=syslog.target

[Service]
ExecStart=/root/uwsgi/uwsgi --emperor /etc/uwsgi/vassals
Restart=always
KillSignal=SIGQUIT
Type=notify
StandardError=syslog
NotifyAccess=all

[Install]
WantedBy=multi-user.target

這樣我們就可以用systemd來管理uwsgi服務了。啟動服務:


$ systemctl start emperor.uwsgi.service

查詢服務執行狀態:


$ systemctl status emperor.uwsgi.service

停止服務


systemctl stop emperor.uwsgi.service

linux系統中,還有一種通用的方法,就是在init.d 或 rc.d 中加入啟動指令碼,這種方式不夠智慧,而且網上資料很多,在這裡暫不討論。

7 常用引數和選項

  • chdir 專案目錄
  • home virtualenv目錄(如沒有執行virtualenv虛擬環境,則無需設定)
  • socket 套接字檔案或TCP套接字,例如:site1.uwsgi.sock 或 127.0.0.1:8000
  • uid 使用者id
  • gid 使用者組id
  • processes 工作程序數
  • harakiri 程序超過該時間未響應就重啟該程序(預設單位為秒)
  • module 要啟動的wsgi模組入口,如:mysite.wsgi:application
  • ini 指定ini配置檔案
  • xml 指定xml配置檔案(與ini類似)
  • file 指定要執行的wsgi程式檔案,如:test.py
  • emperor Emperor模式
  • so-keepalive 開啟TCP KEEPALIVE(unix套接字方式下無效)
  • vacuum 退出時清空環境

相關推薦

uWSGINginxDjango安裝配置

WSGI是為python語言定義的通用閘道器介面,它承擔python web框架(django、flask、web.py等)和web伺服器(nginx、apache、lighttpd等)之間的中間層。 瀏覽器 chrome、firefox、ie等

nginx concat module 安裝配置

-m 安裝和配置 文件類型 ext 增加 .html csdn taobao read 簡介 nginx_concat_module 是淘寶研發的針對 nginx 的文件合並模塊,主要用於合並前端代碼減少 http 請求數。如果你的應用環境中部署了 nginx,那麽可以考

基於nginxtengine的tcp反向代理,負載均衡 安裝配置

zip http 端口 arc -s pro 進入 iteye obj 先下載nginx_tcp_proxy_module模塊。 wget https://github.com/yaoweibin/nginx_tcp_proxy_module/archive/mast

NginxNginx安裝配置文件簡要介紹

安裝 配置文件 1 概述本文主要介紹了nginx的兩種安裝方法,通過yum和編譯安裝,同時對安裝後的配置文件的語法和格式進行了簡要的介紹2 nginx的安裝2.1 yum安裝nginx在光盤自帶的base源裏沒有,需要通過官方路徑或者是epel源中安裝.官方:http://nginx.org/pack

windows下安裝配置nginx

過去 啟動 win 直接 端口號 本地 註意 環境 安裝 下載nginx 到官網下載window版的nginx http://nginx.org/ 配置環境變量 解壓到本地的某個路徑下, 打開cmd窗口,cd到nginx的目錄下 這裏要註意cd的時候

nginx安裝配置

clu remote list server bin get 6.2 pro stub 安裝參照:http://www.runoob.com/linux/nginx-install-setup.html 配置參照:https://www.cnblogs.com/Miss-m

CentOS&.NET Core初試-3-Nginx安裝配置

新建 集群 防火墻 解決 http服務器 head nec def rem Nginx簡介 ??Nginx是一個免費的,開源的,高性能的HTTP服務器和反向代理,以及IMAP / POP3代理服務器。 ??Nginx以其高性能,穩定性,豐富的功能集,簡單的配置和低資源消耗而

windows下的nginx安裝配置及與tomcat關聯配置記錄

   1. 官方中文說明:http://wiki.nginx.org/NginxChs  或者http://nginx.org/ 下載:當前穩定版: Nginx 1.0.5 | Nginx/windows 1.0.5 (更新記錄) (2011年7月19日) 我們下

Nginx Linux系統下的安裝配置應用

Nginx 安裝配置 Nginx("engine x")是一款是由俄羅斯的程式設計師Igor Sysoev所開發高效能的 Web和 反向代理 伺服器,也是一個 IMAP/POP3/SMTP 代理伺服器。 在高連線併發的情況下,Nginx是Apache伺服器

nginxmycat在Windows系統中的安裝配置

nginx在Windows上的搭建 1.解壓Windows安裝包到D:\program files(x86) 2.配置檔案     開啟nginx安裝目錄找到conf資料夾,開啟nginx.conf     配置訪問節點      upstream tomcat1

Nginx 之一 伺服器的安裝部署(一): LInux 環境下 Nginx 伺服器的安裝基本配置

一、編譯和安裝前的準備工作 本部落格依賴環境: Linux Ubuntu 16.04 1.1 足夠的磁碟空間 能夠裝得下 Nginx 的軟體包和安裝檔案, 這個基本都能滿足。 1.2 需要的工具 為了編譯 Nginx 原始碼, 需要安裝標準的 GCC 編譯器。

django-allauth的安裝配置

文章轉載於:https://mp.weixin.qq.com/s/IWOqbp5ZUuLPkMt25ylgPQ django-allauth是最受歡迎的管理使用者登入與註冊的第三方Django安裝包。django-allauth支援本地和第三方賬號(Github,百度、微博、微信等等。。),集成

windows10系統nginxftp安裝配置

1、windows10系統下nginx的安裝    下載網址:http://nginx.org/en/download.html      本人選擇的是nginx-1.14.0.zip    首先將其解壓在自己想要放的位置,我放在了D:/nginx資料夾下    然後在cmd

Ubuntu18.04安裝配置Django,並實現簡單示例

oct ati 文件 djang set tle 問題 不能 all 一、前言(系統,django介紹,window、mac、linux簡單區別)   Django是python開發過程最重要的web框架。因為在看的Django教學視頻是在mac下安裝的,我自己用的是Lin

Linux系統下Nginx安裝配置

系統環境:centos7 64位 Nginx介紹 1)什麼是Nginx Nginx是一款高效能的http 伺服器/反向代理伺服器及電子郵件(IMAP/POP3)代理伺服器。由俄羅斯的程式設計師Igor Sysoev所開發,官方測試n

nginxNginx安裝配置

Nginx的安裝和配置 6.2.1 使用Nginx的必備軟體 如果要使用Nginx的常用功能,那麼首先需要確保該作業系統上至少安裝如下軟體: 6.2.1.1 gcc、g++編譯器 ubuntu平臺線上安裝指令: sudo apt-get install gcc sudo a

Nginx安裝配置(轉)

3 Nginx安裝 3.1 安裝前的準備 1)準備 pcre-8.12.tar.gz。該檔案為正則表示式庫。讓nginx支援rewrite需要安裝這個庫。 2) 準備 nginx-1.5.0.tar.gz。該檔案為nginx的linux版本

nginx安裝配置反向代理

1 下載nginx  2 安裝gcc  # yum -y install gcc-c++ 3 安裝 pcre  # yum -y install pcre pcre-devel 4 安裝 zlib # yum -y install zlib zlib-devel 5

010 Linux 下通過yum、apt、dnf方式安裝配置Nginx伺服器

一、安裝 Centos系統 1、安裝Nginx源。 Centos7下:#rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

如何在CentOS 7上安裝配置Nginx

1.安裝CentOS 7 EPEL倉庫 sudo yum install epel-release 2.安裝Nginx 現在Nginx儲存庫已經安裝在您的伺服器上,使用以下yum命令安裝Nginx : sudo yum install