1. 程式人生 > >Django部落格系統部署小結

Django部落格系統部署小結

提醒:本文最後更新於 2848 天前,文中所描述的資訊可能已發生改變,請謹慎使用。

上次總結了Django部落格系統的開發,這次接著總結程式部署的相關內容。這幾天我折騰了個夠,嘗試各種組合來搭環境,從一開始的Apache + mod_wsgi,之後的Nginx + uWSGI,再後來的Lighttpd + FastCGI,最後採用的是Lighttpd + Apache + FastCGI。

最後還是加上了Apache,是因為我發現Lighttpd自帶的mod_compress貌似只對靜態檔案有用,我的部落格動態輸出的頁面怎麼都不會被gzip。

Django提供FastCGI服務要用到flup

這個庫,wget下來setup.py install就裝好了。之後就可以參考Django官方文件寫指令碼來啟動fastcgi了(我的部落格根目錄是/home/jerry/www/blog):

#!/bin/bash

PROJDIR="/home/jerry/www/blog"
PIDFILE="$PROJDIR/blog.pid"
SOCKET="$PROJDIR/blog.sock"

cd $PROJDIR

if [ -f $PIDFILE ]; then
        kill `cat -- $PIDFILE`
        rm -f -- $PIDFILE
fi

exec python manage.py runfcgi socket=$SOCKET
pidfile=$PIDFILE

執行完這段指令碼,ps看下程序可以發現fastcgi已經以prefork模式在跑了。這裡有個需要注意的地方:啟動web服務和fastcgi的使用者如果不在一個組後面會出現permission deny。這個問題困擾我很久,後來乾脆把apache從www-data改到jerry帳號啟動就好了。

apache支援fastcgi需要裝mod_fastcgi,同樣先wget下來解壓,把Makefile.AP2重新命名為Makefile,用vim開啟,找到top_dir,把預設的“/usr/local/apache2”改為“/usr/share/apache2”,make && make install就編好了。去apache配置裡啟用這個模組,重啟下apache,如果沒出現錯誤這一步算是搞定。

接下來在apache配置裡把所有請求都rewrite給fastcgi,以下是關鍵配置:

<VirtualHost *:8080>
    ServerName www.imququ.com
    DocumentRoot "/home/jerry/www/blog/"

    FastCGIExternalServer /home/jerry/www/blog/blog.fcgi -socket /home/jerry/www/blog/blog.sock

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^/(.*)$ /blog.fcgi/$1 [QSA,L]
</VirtualHost>

現在可以測試下通過8080埠是否能成功訪問到網站,如果出現500看下log多半能發現原因。

最後搭Lighttpd用來提供80埠對外服務,還是貼關鍵配置:

server.modules = ("mod_compress","mod_proxy","mod_rewrite","mod_expire")

compress.cache-dir = "/var/cache/lighttpd/compress/"
compress.filetype = ("text/plain", "text/html", "application/javascript", "text/css")

$HTTP["host"] == "www.imququ.com" {
    server.port = 80
    server.document-root = "/home/jerry/www/blog"

    dir-listing.activate = "disable"

    expire.url = (
        "https://imququ.com/static/" => "access plus 1 years",
    )

    url.rewrite-once = ( 
        "^/favicon.ico$" => "https://imququ.com/static/favicon.ico", 
        "^/robots.txt$" => "https://imququ.com/static/robots.txt", 
        "^(/static.*)$" => "$1",
    )

    $HTTP["url"] !~ "https://imququ.com/static/.*" {
        proxy.server = (
            "" => ((
                "host" => "127.0.0.1",
                "port" => 8080        
            ))
        )
    }
}

所有靜態資源都在/static目錄下,mod_compress模組負責對它們gzip和cache,mod_expire模組會給響應加上一年的快取頭;static之外的請求則通過mod_proxy模組原封不動的轉給apache,apache再繼續轉給fastcgi。考慮到apache不直接對外提供服務,我把apache上127.0.0.1之外的請求都deny掉了。

到這裡就差不多了,用YSlow和Page Speed跑下分數,與server端有關的優化基本都是滿分,除了cdn這個不是我能搞定的。

總的來說,python的web環境搭建相比php要複雜一些,不是把檔案丟到web目錄直接就能跑那麼簡單。不過,借這個機會把三大web server都瞭解一番也挺不錯的。人生的意義不就是在於折騰麼~

更新:通過Django內建的GZip Middleware搞定了動態頁面壓縮問題,這樣Apache就不需要了。@3.27

更新後的lighttpd配置如下:

$HTTP["host"]=~ "^(www\.|)imququ.com$" {
    server.document-root = "/home/jerry/www/blog"
    server.error-handler-404 = "blog.fcgi/404.html"

    expire.url = (
        "https://imququ.com/static/" => "access plus 1 years",
    )

    $HTTP["host"] =~ "^([^.]+\.[^.]+)$" {
        url.redirect = (
            ".*" => "http://www.%1"
        )
    }

    fastcgi.server = (
        "/blog.fcgi" => (
            "main" => (
                "socket" => "/home/jerry/www/blog/blog.sock",
                "check-local" => "disable",
            )
        ),
    )

    url.rewrite-once = ( 
        "^/favicon.ico$" => "https://imququ.com/static/favicon.ico", 
        "^/robots.txt$" => "https://imququ.com/static/robots.txt", 
        "^(/static.*)$" => "$1",
        "^(/.*)$" => "/blog.fcgi$1",
    )
}

--EOF--

提醒:本文最後更新於 2848 天前,文中所描述的資訊可能已發生改變,請謹慎使用。

相關推薦

Django部落系統部署小結

提醒:本文最後更新於 2848 天前,文中所描述的資訊可能已發生改變,請謹慎使用。 上次總結了Django部落格系統的開發,這次接著總結程式部署的相關內容。這幾天我折騰了個夠,嘗試各種組合來搭環境,從一開始的Apache + mod_wsgi,之後的Nginx + uWSGI,再後來的Lighttp

Django部落系統開發小結

提醒:本文最後更新於 2861 天前,文中所描述的資訊可能已發生改變,請謹慎使用。 從最開始的ROR,到後來的CI、CakePHP、ThinkPHP等各式各樣的MVC框架用了不少,還是覺得用來開發QuQuBlog的Django框架最吸引人,玩著玩著就上癮了。 記錄下開發過程中的一些點滴: Pytho

django--部落系統--後臺管理

1.後臺管理功能主要實現了,文章的新增與修改,以及富文字的使用 前端頁面 母版 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>{

Django 部落系統------登入註冊功能

一、登入: urls配置:註冊中需要圖片, url(r'^media/(?P<path>.*)$', serve, {'document_root': settings.MEDIA_ROOT}), 登入login只需用auth驗證一下即可,加了

阿里雲部署django實現公網訪問 SSH實現遠端控制 linux rhel7下安裝python django初探-建立簡單的部落系統(一) django初探-建立簡單的部落系統(二)

  本博的主要目的是對阿里雲部署django實現公網訪問進行一次簡單的記錄,方便日後查詢。   內容目錄:   (1)申請阿里雲伺服器及安全組配置   (2)實現ssh遠端控制   (3)實現ftp檔案傳輸   (4)安裝python3,在centos下同時使用python2和python3   

部署Django部落全記錄之Nginx篇(一)

Nginx的優點 注:具體原理沒搞清,先記著 Nginx更安全;Nginx能更好地處理靜態資源(通過一些http request header)。 Nginx也可以快取一些動態內容;Nginx可以更好地配合CDN。 Nginx可以進行多臺機器的負載均

部署Django部落全記錄之Gunicorn篇(二)

什麼是Gunicorn Gunicorn是一個被廣泛使用的高效能的Python WSGI UNIX HTTP伺服器,移植自Ruby的獨角獸(Unicorn )專案,使用pre-fork worker模式,具有使用非常簡單,輕量級的資源消耗,以及高效能等特點。 為什麼使用

django實戰(二)一個較完整的部落系統

昨天實現了一個簡單的部落格顯示系統,今天實現一個較為完整的部落格系統,當然還未進行完整的介面優化,但是釋出還是可以實現的。 一、資料庫的構建(M) 首先,我們分析一個部落格系統的功能: (1)一個部落格可以有多個標籤(多對多)

Django開發自己的部落系統

好久之前就想做一下自己的部落格系統了,但是在網上查了查好像是需要會一些Node.js的相關知識,而且還要安裝辣麼多的庫什麼的,就不想碰了。但是我遇到了Django這麼一款神器,沒想到我的部落格系統就這麼建立起來了。雖然是最基礎的型別。但是也算是成功了,這篇部落格

Django在OS X下的程式設計實戰(一)構建一個部落系統

廢話少說,直奔主題,你要做事之前需要有一臺電腦,最好是Linux或者OS X,因為我在Macbook pro下工作,所以至少這裡的命令都在OS X下執行通過的。所有程式碼都是單獨一行方便你拷貝。Python程式碼會有>>>的提示,除此之前,沒有特別提示都是

Python利用 Django完整的開發一個部落系統

今天花了一些時間搭了一個部落格系統,雖然並沒有相關於介面的美化,但是釋出是沒問題的。 開發環境 作業系統:windows 7 64位  Django: 1.96  Python:2.7.11  IDE: PyCharm 2016.1 功能篇 既然是部落格系統,釋出的自然是部落格了。讓我們想想,一篇

基於Django部落系統

基於django的部落格系統, 介面展示 首頁前端介面如下: 文章頁面: 後臺頁面: 文章頁面: ##專案結構圖 程式碼主要檔案結構如下: 分別介紹下各個目錄: accounts: 使用者模組 blog:部落格模組 comments: 評論模組

快速部署開源的 Java 部落系統 Tale

準備工作 1.雲主機(系統為ubuntu server 14.04) 2.域名(可以沒有,有的話需要備案) 3.ssh軟體(Xshell 5) 安裝jdk Tale是用java語言編寫的部落格系統,因此必須先安裝JDK8. $ sudo add-

Django來開發部落系統

本系統使用的Django版本是0.96.2,資料庫是Sqlite3,因為它不用配置伺服器,便於開發。 首先建立一個project: django-admin startproject webblog 然後進入webblog目錄,修改settings.py: DAT

如何快速部署國人開源的 Java 部落系統 Tale

除了悶頭專研技術之外,程式設計師還需要不斷地寫作進行技術積累,寫部落格是其中最重要的方式之一。商業部落格平臺不少,但是更符合程式設計師背景的方案,是自己開發一個部落格平臺或者使用開源的部落格平臺。 開源的部落格平臺多如牛毛,而且不乏優秀之作,如 Hexo、Oct

Django完整的開發一個部落系統

今天花了一些時間搭了一個部落格系統,雖然並沒有相關於介面的美化,但是釋出是沒問題的。 開發環境 作業系統:windows 7 64位 Django: 1.96 Python:2.7.11 IDE: PyCharm 2016.1 功能篇 既然

簡單的部落系統(四)Django請求HTML頁面檢視資訊--基於函式的檢視

1. 編寫用於查詢資料的功能函式 應用目錄 下的 views.py 檔案通常用於儲存響應各種請求的函式或類 from djan

簡單的部落系統(三)使用Django的後臺管理功能

Django新建專案和應用後,自帶有後臺管理功能,可直接使用 建立後臺管理員賬戶 (demosite) E:\PycharmP

簡單的部落系統(二)Django編寫資料模型類

設計資料庫和表結構是做網站的基礎。在Django中,不需要通過SQL語句直接跟資料庫打交道,而是完全用Python的類來建立資料

使用阿里雲 ECS 快速部署 WordPress 部落系統

今天在 阿里雲 ECS上 部署了一套 Lamp 系統,建了一個WordPress的網站,把操作過程記錄下來,文中所列指令碼可以直接應用。 廢話不多說直接開動,ECS雲服務購買可以點選 阿里雲ECS 雲主機 彈性計算 新人折扣   安裝Nginx 登入彈性雲伺服器。 執行以下命令,下載對應當