Django部落格系統部署小結
提醒:本文最後更新於 2848 天前,文中所描述的資訊可能已發生改變,請謹慎使用。
上次總結了Django部落格系統的開發,這次接著總結程式部署的相關內容。這幾天我折騰了個夠,嘗試各種組合來搭環境,從一開始的Apache + mod_wsgi,之後的Nginx + uWSGI,再後來的Lighttpd + FastCGI,最後採用的是Lighttpd + Apache + FastCGI。
最後還是加上了Apache,是因為我發現Lighttpd自帶的mod_compress貌似只對靜態檔案有用,我的部落格動態輸出的頁面怎麼都不會被gzip。
Django提供FastCGI服務要用到flup
#!/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 登入彈性雲伺服器。 執行以下命令,下載對應當