apache+python+mod_python+django 編譯安裝指南
1、本文將知道你在 linux 下使用源碼包安裝
apache 2.2.16
python 2.7
mod_python 3.3.1
django svn trunk version
但是,因為無法得知編譯過程中得到的出錯資訊,故本文預設編譯過程全部順利通過,任何疑問請在文後討論區中進行。
2、本文中介紹的命令前面的“
”僅代表命令提示字元,請不要將其連同命令一起輸入。
一、安裝 apache 2.2.16
1、下載請到
http://httpd.apache.org
下載最新的 httpd 伺服器,只要版本跟 2.2.16 相差不大,就可以參考本文進行配置安裝。
2、解壓
tar xvfz httpd-2.2.16.tar.gz
上面命令會在目前的目錄得到 httpd-2.2.16 目錄,這個目錄就是 apache 2.2.16 的源碼目錄。
對於解壓命令的詳細介紹,請看我的這篇文章:
3、Configure
編譯安裝原始碼的過程一般都是 configure/make/make install 三步曲,apache 也遵循這個規則。
進入 httpd-2.2.4 目錄:
cd httpd-2.2.16
執行如下命令查看 configure 的協助資訊
./configure --help
安裝的全部細節都是由 configure 以及它的參數進行控制的。
如果你剛開始嘗試從原始碼包安裝軟體,請儘快習慣 configure 之後冗長複雜的參數!
下面是我推薦的 configure 參數,它會將 apache 安裝到 /opt/apache 下面,並且帶所有常用的 apache Modules:
./configure --prefix=/opt/apache --with-config-file-path=/opt/apache/conf --enable-mods-shared=most --enable-track-vars --enable-cgi --enable-so --enable-file-cache --enable-disk-cache --enable-cache --enable-mem-cache --enable-dumpio --enable-logio --enable-mime-magic --enable-headers --enable-usertrack --enable-version --enable-ssl --enable-http --enable-rewrite --enable-proxy --enable-proxy-connect --enable-proxy-http --enable-proxy-ftp --enable-proxy-ajp --enable-proxy-balancer
當然,安裝所有擴充模組意味著將 apache 功能擴充到極限,但如果你不會配置這些模組,或者置之不理,他們很可能會給你帶來不必要的麻煩或者安全隱患。
(選型中“--enable-so”參數以允許Apache使用DSO,以便稍後mod_python的編譯)
4、make / make install
真正漫長的步驟開始了(我指時間上),下面命令開始編譯過程:
make
等待編譯完成之後,執行:
make install
會將 apache 安裝到第三步配置的 /opt/apache 目錄中。
5、配置 apache
配置 apache 的 httpd.conf 檔案是一項大工程,互連網上有很多高人的文章指導你進行正確必要的配置,我在這裡就不贅述了。
如何將 apache 加入到系統服務中,請看我的這篇文章:
將 apache 加入 linux 系統服務
6、已知問題及解決方案
如果你遇到類似下面的 .so 許可權錯誤:
httpd: Syntax error on line 63 of /opt/apache/conf/httpd.conf: Cannot load /opt/apache/modules/mod_python.so into server: /opt/apache/modules/mod_python.so: cannot restore segment prot after reloc: Permission denied
說明是你的 .so 檔案許可權不夠,很可能是你的 SELinux(如果你有裝)的許可權檢查沒有通過導致的。
使用下面命令可以將 .so 檔案定義為共用類庫檔案,就可以通過許可權檢查:
chcon -t texrel_shlib_t /opt/apache/modules/*.so
注意:千萬別將 *.so 許可權改為 777,具體原因請看我的這篇文章:解決 SELinux 帶來的 PHP 許可權問題
上面安裝 apache 的過程講述很詳細,之後 python / mod_python 將只給出必要解釋和推薦的 configure 命令。
二、安裝 python 2.7
1、編譯安裝
到 www.python.org下載最新的 python 源碼包,解壓得到目錄,進入該目錄,執行:
./configure --prefix=/opt/python/2.7
make
make install
使用下面命令將 python 添加到 /usr/bin 中,並且區別其他版本的 python 執行檔案,使它們可以共存
ln /opt/python/2.7/bin/python /usr/bin/python2.7
以後可以將新版本的 python 編譯到 /opt/python/[版本]中,使用上面命令產生對應版本的連結。
2、設定運行命令
這裡需要注意一下執行程式,現在的 python 2.7 的執行程式是 python2.7,如果想進入 python 2.7 的 shell,需要鍵入 python2.7,如果想系統使用 python 2.7 執行 .py 指令碼,需要在指令碼第一行將 python 運行命令修改為:
!/usr/bin/python2.7
如果你覺得以後預設使用 python 2.7 就好,那麼可以:
rm -f /usr/bin/python
ln /opt/python/2.7/bin/python /usr/bin/python
這樣執行 python 進入的就是 2.7 了。
三、安裝 mod_python
1、到 www.modpython.org
下載源碼包,解壓得到目錄,進入該目錄,執行:
./configure --with-apxs=/opt/apache/bin/apxs --with-python=/usr/bin/python2.7
make
make install
------------------
注意這裡有一個bug
connobject.c: In function '_conn_read':
connobject.c:142: error: request for member 'next' in something not a structure
or union
apxs:Error: Command failed with rc=65536
.
make[1]: *** [mod_python.so] Error 1
make[1]: Leaving directory `/usr/src/rpm/BUILD/mod_python-3.3.1/src'
make: *** [do_dso] Error 2
需修改mod_python-3.3.1/src/connobject.c中
!(b == APR_BRIGADE_SENTINEL(b)
為
!(b == APR_BRIGADE_SENTINEL(bb)
--------------
完畢之後,mod_python 會在 /opt/apache/modules 中添加 mod_python.so 庫檔案,並且在 /opt/python/2.7/lib/python2.7/site-packages 中添加 mod_python 包。
如果編譯器沒有檢測到 apache 和 python,會報錯退出。
2、配置 httpd.conf
找到 /opt/apache/conf/httpd.conf 設定檔,在適當位置添加:
LoadModule python_module modules/mod_python.so
記住,modules/mod_python.so 必須有可以通過 SELinux 檢查的許可權,參看本文第一章第6節的內容!
四、安裝 django
這次我們採用 django 的 SVN Head Version(最新開發版本)。
採用這個版本的好處是,官方的任何更新,你只需要運行 svn 進行更新就會得到最新的版本,並且更新即可用。
1、如果系統沒有 Subversion,找到裝上(過程略)。
2、得到最新版本的 working copy
這裡有兩個版本可以選擇,擇其一運行命令:
一是 django 全部源碼(檔案相當多):
svn co http://code.djangoproject.com/svn/django
/source/svn/django
二是 django 的當前最新版本 trunk:
svn co http://code.djangoproject.com/svn/django/trunk
/source/svn/django_trunk
3、將 django 源碼連結到 python 的 site-packages 公用代碼目錄中
全部源碼版本:
ln -s /source/svn/django/trunk/django /opt/python/2.5.1/lib/python2.5/site-packages/django
最新版本 trunk:
ln -s /source/svn/django/django /opt/python/2.5.1/lib/python2.5/site-packages/django
注意一定要帶上參數 -s,否則後面調用會出錯!
上面的命令只是建立了當前源碼目錄的一個連結到 site-packages 中,這樣每次運行下面命令更新 django 之後,python 調用的都是更新之後的最新版本:
cd /source/svn/django
svn cleanup(如果提示locked,執行這一句)
svn update
4、拷貝 django 管理檔案
運行下面命令將管理檔案拷貝到 /usr/bin 中,以便隨處可以執行該檔案:
cp /source/svn/django/trunk/django/bin/django-admin.py /usr/bin/
或者
cp /source/svn/django/django/bin/django-admin.py /usr/bin/
如果運行 django-admin.py 得到如下錯誤資訊:
ImportError: No module named django.core
說明 django-admin.py 運行在了另一個版本的 python 中!
記住,我們的 django 是安裝在 python 2.7 中的(/opt/python/2.7),如果你的 python 2.7 執行命令為 python2.7(參考第二章第2節),需要將 /usr/bin/django-admin.py 第一行修改為:
!/usr/bin/python2.7
或者是已經安裝 django 的 python 的執行命令。
4、參考文章
官方的安裝指南,請參考:
http://www.djangoproject.com/documentation/install/
如何使用 django,請參考官方指南這一部分:
http://www.djangoproject.com/documentation/modpython/
推薦使用 .htaccess 檔案,而不是直接修改 httpd.conf 設定檔,因為 .htaccess 更加靈活。
記得將 httpd.conf 設定檔中 AllowOverride 配置項作相應配置(比如 AllowOverride = All)
五、總結
如果完全按照上面的安裝步驟進行安裝,我們會得到如下內容:
apache 2.2.16 目錄:
/opt/apache
python 2.7 目錄:
/opt/python/2.7
mod_python.so 位置:
/opt/apache/modules/mod_python.so
django 源碼包目錄:
/source/svn/django
修改過的檔案:
/opt/apache/conf/httpd.conf
如果想更新 django:
cd /source/svn/django
svn update
本文來自CSDN部落格,轉載請標明出處:http://blog.csdn.net/bearjb2006/archive/2010/07/30/5776462.aspx