使用FastCGI部署Python的Django應用的教程

來源:互聯網
上載者:User
作為一個mod_python模組的替代,你可以考慮使用mod_wsgi模組,此模組開發的時間比mod_python的開發時間離現在更近一些,在Django社區已有一些使用。 一個完整的概述超出了本書的範圍,你可以從官方的Django文檔查看到更多的資訊。
使用FastCGI部署Django應用

儘管將使用Apache和mod_python搭建Django環境是最具魯棒性的,但在很多虛擬機器主機平台上,往往只能使用FastCGI

此外,在很多情況下,FastCGI能夠提供比mod_python更為優越的安全性和效能。 針對小型網站,相對於Apache來說FastCGI更為輕量級。
FastCGI 簡介

如何能夠由一個外部的應用程式很有效解釋WEB 伺服器上的動態網頁面請求呢? 答案就是使用FastCGI! 它的工作步驟簡單的描述起來是這樣的:

和mod_python一樣,FastCGI也是駐留在記憶體裡為客戶請求返回動態資訊,而且也免掉了像傳統的CGI一樣啟動進程時候的時間花銷。 但於mod_python不同之處是它並不是作為模組運行在web伺服器同一進程內的,而是有自己的獨立進程。

為什麼要在一個獨立的進程中運行代碼?

在以傳統的方式的幾種以mod_*方式嵌入到Apache的指令碼語言中(常見的例如: PHP,Python/mod_python和Perl/mod_perl),他們都是以apache擴充模組的方式將自身嵌入到Apache進程中的。

每一個Apache進程都是一個Apache引擎的副本,它完全包括了所有Apache所具有的一切功能特性(哪怕是對Django毫無好處的東西也一併載入進來)。 而FastCGI就不一樣了,它僅僅把Python和Django等必備的東東弄到記憶體中。

依據FastCGI自身的特點可以看到,FastCGI進程可以與Web伺服器的進程分別運行在不同的使用者權限下。 對於一個多人共用的系統來說,這個特性對於安全性是非常有好處的,因為你可以安全的於別人分享和重用代碼了。

如果你希望你的Django以FastCGI的方式運行,那麼你還必須安裝 flup 這個Python庫,這個庫就是用於處理FastCGI的。 很多使用者都抱怨 flup 的發布版太久了,老是不更新。 其實不是的,他們一直在努力的工作著,這是沒有放出來而已。
運行你的 FastCGI 伺服器

FastCGI是以客戶機/伺服器方式啟動並執行,並且在很多情況下,你得自己去啟動FastCGI的服務進程。 Web伺服器(例如Apache,lighttpd等等)僅僅在有動態網頁面訪問請求的時候才會去與你的Django-FastCGI進程互動。 因為Fast-CGI已經一直駐留在記憶體裡面了的,所以它響應起來也是很快的。

記錄

在虛擬機器主機上使用的話,你可能會被強制的使用Web server-managed FastCGI進程。 在這樣的情況下,請參閱下面的“在Apache共用主機裡運行Django”這一小節。

web伺服器有兩種方式於FastCGI進程互動: 使用Unix domain socket(在win32裡面是 具名管道 )或者使用TCP socket.具體使用哪一個,那就根據你的偏好而定了,但是TCP socket弄不好的話往往會發生一些許可權上的問題。 What you choose is a manner of preference; a TCP socket is usually easier due to permissions issues.

開始你的伺服器項目,首先進入你的項目目錄下(你的 manage.py 檔案所在之處),然後使用 manage.py runfcgi 命令:

./manage.py runfcgi [options]

想瞭解如何使用 runfcgi ,輸入 manage.py runfcgi help 命令。

你可以指定 socket 或者同時指定 host 和 port 。當你要建立Web伺服器時,你只需要將伺服器指向當你在啟動FastCGI伺服器時確定的socket或者host/port。

範例:

在TCP連接埠上運行一個線程伺服器:

./manage.py runfcgi method=threaded host=127.0.0.1 port=3033

在Unix socket上運行prefork伺服器:

./manage.py runfcgi method=prefork socket=/home/user/mysite.sock pidfile=django.pid

啟動,但不作為後台進程(在調試時比較方便):

./manage.py runfcgi daemonize=false socket=/tmp/mysite.sock

停止FastCGI的行程

如果你的FastCGI是在前台啟動並執行,那麼只需按Ctrl+C就可以很方便的停止這個進程了。 但如果是在後台啟動並執行話,你就要使用Unix的 kill 命令來殺掉它。 然而,當你正在處理後台進程時,你會需要將其付諸於Unix kill的命令

如果你在 manage.py runfcgi 中指定了 pidfile 這個選項,那麼你可以這樣來殺死這個FastCGI後台進程:

kill `cat $PIDFILE`

$PIDFILE 就是你在 pidfile 指定的那個。

你可以使用下面這個指令碼方便地重啟Unix裡的FastCGI守護進程:

#!/bin/bash# Replace these three settings.PROJDIR="/home/user/myproject"PIDFILE="$PROJDIR/mysite.pid"SOCKET="$PROJDIR/mysite.sock"cd $PROJDIRif [ -f $PIDFILE ]; then kill `cat -- $PIDFILE` rm -f -- $PIDFILEfi

exec /usr/bin/env -  PYTHONPATH="../python:.."  ./manage.py runfcgi socket=$SOCKET pidfile=$PIDFIL
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.