在Windows Server 2008上實作Apache + Subversion(SVN) + Trac

Subversion在維基上的解釋

Subversion,簡稱SVN,是一個開放原始碼的版本控制系統,相對於的RCS、CVS,採用了分支管理系統,它的設計目標就是取代CVS。網際網路上越來越多的控制服務從CVS轉移到Subversion。

基本上SVN是一套很不錯用的版本管理系統
而且透過套件就可以直接在電腦上作版本管理
另外也有許多程式支援SVN
像是eclipse等等

另外Trac則是一個可以顯示SVN控制下的專案更新版本跟各種資訊的網站
並且可以在上面互相交流專案的問題以及回報

這篇文章主要就是要解說怎麼將SVN以及Trac這兩套系統建構在Apache上

目前手頭上找到的資料
還沒有辦法直接在IIS7上直接使用SVN以及Trac
只能使用Apache伺服器加上套件來運作

以我自己的設定來說
PORT 80已經提供給IIS使用
所以只能額外提供別的PORT給Apache


【步驟1 – 下載必備程式】
請先下載以下幾個檔案
TortoiseSVN:TortoiseSVN-1.6.16.21511-win32-svn-1.6.17.msi(32位元) 或者是 TortoiseSVN-1.6.16.21511-x64-svn-1.6.17.msi(64位元)
Apache伺服器:httpd-2.2.19-win32-x86-no_ssl.msi
Subversion for Windows:Setup-Subversion-1.6.17.msi
python:python-2.5.2.msi
Genshi:Genshi-0.5.1.win32-py2.5.exe
mod_python:mod_python-3.3.1.win32-py2.5-Apache2.2.exe
setuptools:ez_setup.py 以及 setuptools-0.6c11.win32-py2.5.exe
Trac:Trac-0.12.2.win32.exe

PS~
目前mod_python這個套件最新只支援到python2.5跟Apache2.2
所以請注意下載的版本是否有配合好

另外建議
打開 TortoiseSVN 中的 Settings 功能
將設定中的Use “_svn” instead of “.svn” directories打勾
原因請參考此文
「如何快速變更 Subversion 專用的隱藏目錄從 .svn 改成 _svn」


【步驟2 – 安裝 Apache 並修改 PORT】
執行 httpd-2.2.19-win32-x86-no_ssl.msi
安裝過程中可以選擇安裝的路徑
我的範例路徑設定為
D:\_Service\Apache Software Foundation\Apache2.2

因為範例主機上已經有安裝了 IIS7
佔用了 80 這個 Port
另外還有 Tomcat 佔用了 8080

所以在安裝之前先將IIS7的站台停止
安裝完 Apache 之後才不會導致啟動失敗
可以在安裝完畢之後
先停止 Apache

接下來開啟 httpd.conf 這個檔案尋找

#Listen 12.34.56.78:80
Listen 80

我的範例設定為8081

#Listen 12.34.56.78:80
Listen 8081

也可以把 80 Port 改您喜歡的
只要不跟其他程式衝突即可
修改完畢存檔之後
就可以啟動 Apache


【步驟3 – 安裝 Subversion 伺服器】
執行Setup-Subversion-1.6.17.msi
安裝過程中會有顯示要安裝的路徑
預設是 C:\Program Files\Subversion
在這裡我的環境是設定為 D:\_Service\Subversion

安裝完畢之後
準備啟動伺服器
因為預設安裝完畢之後必須為手動啟動
我們在這裡改成用Windows的服務自動啟動

打開命令模式,輸入

sc create svnservice binpath= "svnserve --service --root=D:\_Data\SVN\_data" displayname= "Subversion Repository" depend= Tcpip

其中D:\_Data\SVN\_data這個是我準備要用來預設給SVN資源庫用的根目錄

這時候就會在服務中看到「Subversion Repository」這個服務項目
然後改為自動啟動即可

這樣以後我們可以利用svn://協定來傳輸SVN的資料


【步驟4 – 安裝 TortoiseSVN】
執行 TortoiseSVN-1.6.16.21511-win32-svn-1.6.17.msi (如果是64位元系統則是安裝 TortoiseSVN-1.6.16.21511-x64-svn-1.6.17.msi)
安裝完畢後會需要重新開機


【步驟5 – 使 Apache 支援 SVN 模組】
接下來需要開啟支援SNV
首先安裝 Setup-Subversion-1.6.17.msi
我將原本安裝的路徑改為
D:\_Service\Subversion

然後再度打開 httpd.conf
尋找

#LoadModule dav_fs_module modules/mod_dav_fs.so
#LoadModule dav_module modules/mod_dav.so

拿掉#變成

LoadModule dav_fs_module modules/mod_dav_fs.so
LoadModule dav_module modules/mod_dav.so

再加入下面兩行

LoadModule dav_svn_module "D:\_Service\Subversion\bin\mod_dav_svn.so"
LoadModule authz_svn_module "D:\_Service\Subversion\bin\mod_authz_svn.so"

這 2 行要放在 mod_dav.so 之後
另外請注意一件事情
這邊填寫的路徑為您剛剛安裝 Setup-Subversion-1.6.17.msi 時選擇的路徑

如果您是採用用預設值的話
則是

LoadModule dav_svn_module "C:\Program Files\Subversion\bin\mod_dav_svn.so"
LoadModule authz_svn_module "C:\Program Files\Subversion\bin\mod_authz_svn.so"

還有一種方式是
1.把 Subversio 安裝目錄中的 httpd 資料夾的 mod_dav_svn.so 和 mod_authz_svn.so 這兩個檔案,複製到 Apache 安裝目錄中的 modules 資料夾裡面。
2.把 Subversio 安裝目錄中的 bin 資料夾的 libdb42.dll、libeay32.dll、以及 ssleay32.dll 複製到 Apache 安裝目錄中的 bin 或 modules 資料夾。
然後把原本加入的兩行改成

LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so

這樣也可以

然後重新啟動 Apache 就可以看到已經成功載入了 SVN 模組


【步驟6 – 整合 Apache 跟 SVN 資料庫】
接下來就是開始整合 Apache 跟 SVN 資料庫
為了讓 SVN 專案資料庫不至於東一個西一個的狀況下
我在這裡採用的方式是集中管理
使用 http://localhost:8081/svn/
這樣的方式將所有的 SVN 專案集中管理

為了之後方便管理
我設定了一個專門存放 SVN 相關資料的資料夾在 D:\_Data 中
然後這個 SVN 資料夾又建立了幾個資料夾
分別為
D:\_Data\SVN\_config 存放設定檔案(密碼、瀏覽權限設定等等)
D:\_Data\SVN\_data 存放 SVN 資料庫

接下來是準備產生驗證用的帳號密碼
首先為了方便輸入指令
在系統中的環境變數 path 加上

;D:\_Service\Apache Software Foundation\Apache2.2\bin

如果您的 Apache 安裝的路徑跟我不同
請記得修改為您的安裝路徑

然後打開「命令提示字元」(在執行中輸入 CMD 也可以打開)
輸入以下指令

htpasswd -c D:\_Data\SVN\_config\svn.passwd.demo.ini admin

在此解釋一下命令
htpasswd(產生密碼的工具) -c(第一次建立新檔案才要加上) D:\_Data\SVN\_config\svn.passwd.demo.ini(檔案位置) admin(帳號名稱)
送出命令之後,接下來會出現
New password:
這時候輸入密碼以及確認密碼
Re-type new password:
這裡我設置的密碼為 admin

然後為了區分權限
我又新增了一組帳號為

htpasswd D:\_Data\SVN\_config\svn.passwd.demo.ini project

密碼設置為 project

然後我們建立一份權限表在
D:\_Data\SVN\_config\svn.svnaccessfile.demo.ini
這個檔案中
打開編輯輸入

[groups]
Groups_admin = admin
Groups_project = project

# 為所有SVN資料庫指定預設的訪問規則
# 所有人可以讀,管理員可以寫,危險分子沒有任何權限,[/]代表根目錄
[/]
* = r
@Groups_admin = rw
dangerman =

# 允許開發人員可以完全訪問他們的項目版本庫
[project:/]
@Groups_project = rw

然後打開 httpd.conf
然後在最後面加上


DAV svn
SVNListParentPath on
SVNParentPath "D:\_Data\SVN\_data"

#認證的類型
AuthType Basic

#認證的名稱,顯示於登錄提示框
AuthName "Subversion 資料庫,請登錄!"

#存放用戶登入帳號密碼的檔案
AuthUserFile D:\_Data\SVN\_config\svn.passwd.demo.ini

#限定各個用戶或組在版本庫中目錄的訪問權限
AuthzSVNAccessFile D:\_Data\SVN\_config\svn.svnaccessfile.demo.ini

#讓所有用戶對版本庫都有讀的權限而只有特定的用戶才有寫的權限
Require valid-user

接下來我們建立一個 SVN 版本資料庫

svnadmin create --fs-type fsfs D:\_Data\SVN\_data\Demo

然後重啟 Apache

接下來在瀏覽器上輸入
http://localhost:8081/svn/project/

然後輸入帳號密碼
這時候我們用project這個帳號登入

就可以看到畫面了
之後我們也可以透過像是 eclipse 這類 IDE 登入 SVN 上傳資料


【步驟7 – 安裝 Python】
因為 Trac 這個程式是採用 Python 語言編寫的
所以必須先安裝 Python 環境

執行 python-2.5.2.msi
安裝預設的路徑為 C:\Python25
我的安裝路徑更改為 D:\_Service\Python\Python25
這是個人習慣
您也可以更改為自己喜愛的路徑

並且在環境變數 path 中添加

;D:\_Service\Python\Python25;D:\_Service\Python\Python25\Scripts

方便之後的指令使用

註:同樣的,如果您的安裝路徑跟我不同,請修改為您的安裝路徑。


【步驟8 – 安裝 Genshi 模板系統】
執行 Genshi-0.5.1.win32-py2.5.exe
安裝過程中會自動偵測 Python 的安裝路徑


【步驟9 – 安裝 mod_python】
執行 mod_python-3.3.1.win32-py2.5-Apache2.2.exe
安裝過程中會自動偵測 Python 的安裝路徑
安裝完畢之後,會詢問Apache的安裝路徑
選擇即可


【步驟10 – 安裝 Subversion Python Bindings】
執行 svn-python-1.6.6.win32-py2.5.exe
此程式是讓Subversion 跟 Python可以綁定在一起
接下來在後面可以讓Trac直接讀取SVN的資料庫
安裝過程中會自動偵測 Python 的安裝路徑


【步驟11 – 安裝 PySQLite 資料庫系統】
執行安裝 pysqlite-2.5.5.win32-py2.5.exe
安裝過程中會自動偵測 Python 的安裝路徑


【步驟12 – 安裝 setuptools 套件】
打開命令提示字元

切換到放置 ez_setup.py 檔案的資料夾
我的放置位置是

cd D:\_Data\_Source

然後執行

python ez_setup.py -U setuptools

這時候會安裝setuptools套件


【步驟13 – 更新 Trac 套件】
打開命令提示字元
切換到D:\_Data\_Source

cd D:\_Data\_Source

然後執行

svn checkout http://svn.edgewall.org/repos/trac/trunk

這時候就會從SVN下載最新的Trac套件

接下來輸入

cd trunk

切換到剛剛下載的 trunk 資料夾中

然後再度輸入指令

python setup.py install

安裝過程中可能會遇到兩種無法安裝的狀況
第一種:安裝的時候會顯示’Genshi>=0.6’錯誤,必須打開setup.py檔案,將’Genshi>=0.6’修改為’Genshi>=0.5.1’才可以。
第二種:安裝中會出現無法複製’.svn’或者是’_svn’資料夾的錯誤,這時候將trunk 資料夾中這些資料夾砍掉即可安裝完畢。


【步驟14 – 安裝 Trac 伺服器】
執行安裝 Trac-0.12.2.win32.exe
安裝過程中會自動偵測 Python 的安裝路徑


【步驟15 – 建立一個 Trac 網站】
在這裡說明一下
我的Trac規劃放置路徑在 D:\_Data\Trac 這裡
其中裡面規畫了兩個資料夾
D:\_Data\Trac\_config 這是要存放密碼設定的地方
D:\_Data\Trac\_data 這是要存放建立好的Trac網站的地方

接下來打開「命令提示字元」

因為我們之前就有新增了相關的變數到path中
所以接下來要執行命令的時候會很方便

trac-admin D:\_Data\Trac\_data\demo initenv

這樣就建立好一個Trac網站了

然後啟動Trac伺服器

tracd -p 8082 D:\_Data\Trac\_data\demo

設定 8082 的原因是因為
80 被 IIS 使用
8080 被 Tomcat 使用
8081 被 Apache 使用

接下來在瀏覽器上輸入

http://localhost:8082/

就可以看到內容了


【步驟16 – 讓 Apache 伺服器直接可以瀏覽 Trac 網站】
首先在 Apache的 httpd.conf 中加入下面一行:

LoadModule python_module modules/mod_python.so

再來創建登入用的帳號密碼檔案
輸入以下指令

htpasswd -c D:\_Data\Trac\_config\trac.passwd.demo.ini admin

跟建立SVN使用的帳號密碼相同
這裡我設定的密碼為admin

接下來
在 Apache的 httpd.conf 中加入下面參數:


SetHandler mod_python
PythonHandler trac.web.modpython_frontend
PythonOption TracEnv D:\_Data\Trac\_data\demo
SetEnv PYTHON_EGG_CACHE /tmp
PythonOption TracUriRoot /trac/demo

AuthType Basic
AuthName "Trac - Demo,請登錄!"
AuthUserFile D:\_Data\Trac\_config\trac.passwd.demo.ini
Require valid-user

一樣要注意的是
相關路徑跟紀錄帳號密碼的檔案
如果您跟我預設的方式不同
請修改為您自己的環境設定

重新啟動 Apache

然後在瀏覽器中輸入

http://localhost:8081/trac/demo

通過帳號驗證之後
就可以看到內容了

到此就完成了 Apache + SVN + Trac 的服務集合



【備註:如何更新Trac版本】
首先在命令中輸入

D:\_Service\Python\Python25\Scripts\easy_install -upgrade trac

這時候就可以更新Trac版本下來

然後命令中再輸入要更新的Trac站台(這個步驟好像非必要)

D:\_Service\Python\Python25\Scripts\trac-admin.exe D:\_Data\Trac\_data\Demo upgrade

Leave a Reply

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

You may use these HTML tags and attributes:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>