使用Nginx+uWSGI方法部署Django web程序

在上一篇文章《五步教你實現使用Nginx+uWSGI+Django方法部署Django程序(上)》中,闡述瞭如何只使用uWSGI來部署Django程序。html

固然,單單隻有uWSGI是不夠的,在實際的部署環境中,Nginx是必不可少的工具。nginx

在本篇文章中,我將一直延用「N步法」的風格來闡述如何將uWSGI與Nginx作鏈接來部署Django程序。並在最後,會較爲完整的闡述本社區的部署方法。django

本文大綱:服務器

  • 環境介紹socket

  • 配置uWSGI工具

  • 配置Nginx測試

  • Nginx+uWSGI+Django的實現方式spa

  • 一些建議命令行

環境介紹

  1. Ubuntu 12.04.1 LTS調試

  2. django 1.4.2

  3. nginx/1.2.6

  4. uWSGI 1.4.4

關於uWSGI的安裝可參見上一篇文章 上一篇文章《五步教你實現使用Nginx+uWSGI+Django方法部署Django程序(上)》

咱們假定你已經安裝好Nginx了。

配置uWSGI

在上一篇文章《五步教你實現使用Nginx+uWSGI+Django方法部署Django程序(上)》中,咱們是直接使用命令行來啓動uWSGI,在實際部署環境中,咱們經常使用的是配置文件的方式,而非命令行的方式。個人通常作法是用命令行來測試是否uWSGI安裝成功,而後用配置文件來真正部署。

另外,爲了實現Nginx與uWSGI的鏈接,二者之間將採用soket來通信方式。

在本節中,咱們將使用uWSGI配置文件的方式來改進uWSGI的啓動方式。

假定你的程序目錄是 /home/work/src/sites/testdjango1/testdjango/mysite

咱們將要讓Nginx採用8077端口與uWSGI通信,請確保此端口沒有被其它程序採用。

注意,請肯定你在上一節《五步教你實現使用Nginx+uWSGI+Django方法部署Django程序(上)》中的django_wsgi.py文件已經存在了。

新建一個XML文件:

djangochina_socket.xml,將它放在 /home/work/src/sites/testdjango1/testdjango/mysite 目錄下:

<uwsgi>
    <socket>:8077</socket>
    <chdir>/home/work/src/sites/testdjango1/testdjango/mysite</chdir>
    <module>django_wsgi</module>
    <processes>4</processes> <!-- 進程數 --> 
    <daemonize>uwsgi.log</daemonize></uwsgi>

在上面的配置中,咱們使用 uwsgi.log 來記錄日誌,開啓4個進程來處理請求。

這樣,咱們就配置好uWSGI了。

配置Nginx

咱們假設你將會把Nginx程序日誌放到你的目錄/home/work/var/test/logs/下,請確保該目錄存在。

咱們假設你的Django的static目錄是/home/work/src/sites/testdjango1/testdjango/collectedstatic/ , media目錄是/home/work/src/sites/testdjango1/testdjango/public/media/,請確保這些目錄存在。

咱們假設你的域名是 www.you.com (在調試時你能夠設置成你的機器IP)

咱們假設你的域名端口是 80(在調試時你能夠設置一些特殊端口如 8070)

基於上面的假設,咱們爲conf/nginx.conf添加如下配置

server {

        listen   80;
        server_name www.you.com;
        access_log /home/work/var/test/logs/access.log;
        error_log /home/work/var/test/logs/error.log;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
         include        uwsgi_params;
         uwsgi_pass     127.0.0.1:8077;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        location /static/ {
            alias  /home/work/src/sites/testdjango1/testdjango/collectedstatic/;
            index  index.html index.htm;
        }

        location /media/ {
            alias  /home/work/src/sites/testdjango1/testdjango/public/media/;
        }
    }

在上面的設置後,可讓Nginx來處理靜態文件(/static/ 和 /media/ )。非靜態文件請求Nginx會發給 socket 8077,而後讓uWSGI來進行處理。

Nginx+uWSGI+Django的實現方式

在完成上面配置後,須要按如下步驟來作:

  1. 重啓Nginx服務器,以使Nginx的配置生效。

    nginx -s  reload

    重啓後檢查Nginx日誌是否有異常。

  2. 啓動uWSGI服務器

    cd /home/work/src/sites/testdjango1/testdjango/mysite
    
    uwsgi -x djangochina_socket.xml

    檢查日誌 uwsgi.log 是否有異常發現。

  3. 訪問服務

    基於上面的假設你的域名是www.you.com

    所以,咱們訪問 www.you.com,若是發現程序與 單獨使用Django啓動的程序如出一轍時,就說明成功啦!

  4. 關閉服務的方法

    將uWSGi進程殺死便可。

一些建議

  1. uWSG配置文件的進程數,能夠根據實際狀況分配。不要開得太大,不然機器可能會內存耗用過高。通常來講,對於一個小社區來講,4個進程已經足夠了。

  2. 通常狀況下,能夠編寫一下 stop.sh 腳本 來關閉uWSGI。

相關文章
相關標籤/搜索