svn nginx
服務器系統(tǒng)總體規(guī)劃:1、Apache 負責SVN 具體事務,端口802,SVN 相關業(yè)務由域名 svn.opensoce.com 承擔,來自svn.opensoce.com 的請求全部轉發(fā)至802端口
服務器系統(tǒng)總體規(guī)劃:
1、Apache 負責SVN 具體事務,端口802,SVN 相關業(yè)務由域名 svn.opensoce.com 承擔,來自svn.opensoce.com 的請求全部轉發(fā)至802端口交由802端口給Apache 處理
2、Nginx 做主體Web 服務,對外開放80端口,負責普通網站業(yè)務和svn 業(yè)務轉發(fā)
安裝部署過程:
一、支持包安裝及相關用戶、用戶組創(chuàng)建
tar zxf libiconv-1.13.tar.gz
cd libiconv-1.13
./configure --prefix=/usr/local
make
mak install
tar zxf zlib-1.2.3.tar.gz
cd zlib-1.2.3
./configure
make
make install
#最好不要讓root 用戶參與到svn 的權限管理和日常的運行和維護工作中來, 所以我們建立一個用戶(如svn)
同時為了處理好權限的問題,我們可以建立一個組(如www ),其他希望使用svn 的用戶加入這個組
在root 權限下用下面的命令創(chuàng)建用戶和組:
groupadd www
useradd svn -g www
useradd www -g www
二、Apache 安裝
Apache 官網: http://httpd.apache.org/
wget http://labs.renren.com/apache-mirror/httpd/httpd-2.2.16.tar.bz2 tar jxf httpd-2.2.16.tar.bz2
cd httpd-2.2.16.tar.bz2
./configure --enable-dav --enable-so --enable-ssl
--prefix=/usr/local/webserver/apache2 --enable-mods-shared=all make
make install
,刪除httpd 的調試符號
cp httpd httpd.old
strip httpd
刪除調試符號
strip --strip-debug /tools/lib/*
strip --strip-unneeded /tools/{,s}bin/* #這個參數(shù)千萬不可應用于庫文件 rm -rf /tools/{info,man}
添加為服務
cp /usr/local/webserver/apache2/bin/apachectl /etc/init.d/apache2 chkconfig --add apache2
chkconfig --list apache2 apache #服務默認在運行級3,5啟動
三、Apache 配置
vi /usr/local/webserver/apache2/conf/httpd.conf
#修改用戶組
User svn
Group www
#修改端口為
Listen 802
四、Subversion 安裝
BDB:
Subversion: http://subversion.apache.org/source-code.html 目前版本
1.6.12
wget http://subversion.tigris.org/downloads/subversion-1.6.12.tar.bz2 wget
tar jxf subversion-deps-1.6.12.tar.bz2
cd subversion-1.6.12
./configure --with-apxs=/usr/local/webserver/apache2/bin/apxs --prefix=/usr/local/webserver/subversion
--with-apr=/usr/local/webserver/apache2
--with-apr-util=/usr/local/webserver/apache2 --with-ssl
--with-zlib=/usr/local/lib --without-berkeley-db
,PYTHON=/usr/bin/python --with-swig=/usr/bin/swig --enable-shared --enable-static --enable-swig-binding=python
#python和swig 可能需提前安裝
在以上編譯過程中可能會出現(xiàn) configure: error: Subversion requires SQLite 解決方法:可以下載最新的Sqlite 版本sqlite-amalgamation-3.7.0.tar.gz wget http://www.sqlite.org/sqlite-amalgamation-3.7.0.tar.gz
tar zxvf sqlite-amalgamation-3.7.0.tar.gz
cd sqllit-3.7.0
cp sqlite3.c ../subversion-1.6.12/sqlite-amalgamation/sqlite3.c 經過上面的步驟mod_dav_svn.so and mod_authz_svn.so將會被copy 到/usr/local/webserver/apache2/modules/下;
同時在 /usr/local/webserver/apache2/conf/httpd.conf中會增加如下2行: LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
檢查一下是否都正確,如果沒有的話可能就要手動加進去。
注意一下運行. /configure時加的這幾個參數(shù)PYTHON=/usr/bin/python –with-swig=/usr/bin/swig –enable-shared –enable-static
–enable-swig-binding=python,開始的時候編譯svn 的時候沒有加這幾個參數(shù),單獨使用svn 都沒問題,但是如果安裝trac 的話就會出錯,一般出現(xiàn)類似下面的錯誤:
--------------------------------------------------------------------- Python Traceback
Traceback (most recent call last):
File "/usr/local/lib/python2.5/site-packages/trac/web/main.py", line 387, in dispatch_request
dispatcher.dispatch(req)
File "/usr/local/lib/python2.5/site-packages/trac/web/main.py", line 191, in dispatch
chosen_handler = self._pre_process_request(req, chosen_handler) File "/usr/local/lib/python2.5/site-packages/trac/web/main.py", line 263, in _pre_process_request
chosen_handler = f.pre_process_request(req, chosen_handler) File
"/usr/local/lib/python2.5/site-packages/trac/versioncontrol/api.py", line 73, in pre_process_request
self.get_repository(req.authname) # triggers a sync if applicable
,File
"/usr/local/lib/python2.5/site-packages/trac/versioncontrol/api.py", line 92, in get_repository
self.repository_type)TracError: Unsupported version control system "svn"
--------------------------------------------------------------------- 解決方法就是在make svn的時候要加上這幾個參數(shù)”PYTHON=/usr/bin/python –with-swig=/usr/bin/swig –enable-shared –enable-static
–enable-swig-binding=python”
同時執(zhí)行了上面的make && make install后還要編譯安裝Subversion SWIG Python bindings
Swig-py 的安裝說明在
subversion-1.6.12/subversion/bindings/swig/INSTALL文件里說的比較詳細,安裝過程如下:
cd subversion-1.6.12
make swig-py
make install-swig-py
那么你可以看到swig-py 的install 目錄是
/usr/local/webserver/subversion/lib/svn-python。用如下命令講這個擴展包擴展到python :
echo
/usr/local/webserver/subversion/lib/svn-python >/usr/lib/python2.3/site-packages/subversion.pth
剩下的就是測試svn 的swig-py 包是不是能work 了,很簡單。
python
>>>import svn.repos
如果不報錯,就完事大吉了。
如果報錯,那么檢查幾件事情:
I. subversion的configure 是不是enable 了shared 和static ,是不是帶–with-swig ;
II. libsvn_swig_py-x.so是否存在于/usr/local/subversion/lib目錄; III. /usr/local/subversion/lib是否已經增加到ld.so.conf 文件
(/etc/ld.so.conf)
,IV. 請使用ldconfig -v |grep swig來檢查是否有swig 的下列動態(tài)庫 libsvn_swig_py-1.so.0 -> libsvn_swig_py-1.so.0.0.0
如果一切正常,這個安裝就完成了。
安裝完成后, 運行svnserver –version 確認版本為1.6.12。
SVN 服務器安裝結束.
五、Subversion 配置
切換到用戶svn 來創(chuàng)建svn 倉庫,對svn 進行配置
首選選擇一個目錄位置作為svn 倉庫的存放位置,例如某項目以
/var/svndata/myproject 作為存放位置。
創(chuàng)建項目版本庫”myproject”,默認指定倉庫的文件格式為fsfs : /usr/local/webserver/subversion/bin/svnadmin create
/var/svndata/myproject
修改目錄權限
chown -R svn:www /data0/htdocs/svn
chmod -R g w /var/svndata/myproject
chmod g s /var/svndata/myproject/db
接下來修改Apache 配置文件
vi /usr/local/webserver/apache2/conf/httpd.conf # 在文件末尾添加如下內容
# Location中的/svn只是個虛目錄,用于區(qū)別普通的網站訪問,
# 例如url 為 http://127.0.0.1/svn/myproject,則/svn的部分就會由下述配置去解析。
# 如果你想在url 中使用/svn11去解析,那么下面的Location 配置就變?yōu)?
Dav svn
SVNListParentPath on
#----允許在網頁上顯示svn 父目錄list --記住,注釋不要和配置項寫到同一行,否則會出錯..
SVNParentPath "/var/svndata"
#----/var/svndata 是SVN 的父目錄
AuthType Basic
#----連接類型設置
,AuthName "Subversion Repository"
#----連接框提示
AuthUserFile /etc/svn/passwd
#----用戶配置文件
AuthzSVNAccessFile /etc/svn/authz
#----svn用戶配置文件
Require valid-user
這里設置SVNParentPath 而不是SVNPath 的好處是可以幾個repository 同時訪問
其中 /etc/svn/passwd 文件是通過htpasswd 命令來創(chuàng)建的,第一次設置用戶時使用-c 表示新建一個用戶文件 /etc/svn/authz文件內容如
[groups]
Admin = www
#admin組成員, 前面我們創(chuàng)建了www 組,并在該組下創(chuàng)建了用戶svn
[myproject:/]
#版本庫myproject 的權限,注意寫的形式
@Admin = rw
#admin組有讀寫的權限
svn = rw
#svn有讀寫的權限
[www:/]
#版本庫www 的權限
@Admin = rw
svnman = rw
[/]
#如果允許任意用戶瀏覽svnroot 的內容,則設置下面這句
*=r
#svn父目錄所有人都與讀的權限
修改訪問控制文件
/usr/local/webserver/apache2/bin/htpasswd -c /etc/svn/passwd svn
#這個文件名即為httpd.conf 中配置的文件名, 最后的svn 即為要添加的用戶名 New password: xxxxxx
Re-type new password: xxxxxx
Adding password for user svn
#完成后執(zhí)行 chmod a r /etc/svn/passwd, 以保障apache 能夠讀取該文件 #以后需添加用戶時執(zhí)行
/usr/local/webserver/apache2/bin/htpasswd -c /etc/svn/passwd newuser #反復執(zhí)行此程序,將自己需要添加的用戶(替換命令最后的用戶名) 添加進去!
,重啟apache
/usr/local/webserver/apache2/bin/apachectl restart
打開瀏覽器訪問 http://svn_server_address/svn , 如果有東西顯示就說明成功。
接下來可以import 代碼文件了,可以在其他機子上完成:
svn import -m "Hello, my project" [path]
#說明:
#[path] 是導入的路徑,不寫就是當前路徑
#path目錄下, 需要建立三個目錄: trunk, tags, branches (類似CVS) 這不是必須的,但是這對今后的項目管理很有好處
#把最初的代碼放在trunk 目錄下!
#import之后用command "svn co http://svn_server_address/svn/myproject"就該可以check out剛才import 的代碼了
六、安裝配置Trac
安裝配置Trac
Trac
是一個非常優(yōu)秀的源代碼瀏覽工具,現(xiàn)在也很流行。在安裝前,需要注意的是,Trac 需要以下幾個軟件的支持,安裝前一定要先安裝好。
要預先安裝的軟件包在trac-0.10.4的INSTALL 文件里有列出,copy 如下: * Python, version >= 2.3.
Please keep in mind, that for RPM-based systems you will also need python-devel and python-xml packages.
* Subversion, version >= 1.0. (>= 1.1.x recommended)
* Subversion SWIG Python bindings (not PySVN).
* PySQLite, version 1.x (for SQLite 2.x) or version 2.x (for SQLite 3.x) * Clearsilver, version >= 0.9.3 (0.9.14 recommended)
* A web server capable of executing CGI/FastCGI scripts, or Apache HTTPD with
mod_python. (Trac also comes with a standalone server, but its use is not
recommended for use in a production environment.)
以上各包,一個也不能少,除非你不用apache 來做web (而使用tracd ,這是trac 本身都不建議使用的httpd ),當然我們用CGI 方式來運行python 腳本,所以省掉一個mod_python.
,補充說明下,光有PySQLite 而沒有SQLite 顯然是不行的
這幾個軟件包可以在 http://www.rpmfind.net 和 http://www.rpmfind.com 上找到適合自己系統(tǒng)的版本,下載后直接安裝即可。當然你也可以通過下載源碼編譯安裝這些包。
然后開始安裝trac :
tar zxvf trac-0.10.4.tar.gz
cd trac-0.10.4
python ./setup.py install
關于trac 本身的安裝就這么簡單,詳情請參考trac-0.10.4/INSTALL文檔。其中還有后續(xù)章節(jié)所涉及內容的詳述,包括如何使用 trac-admin初始化一個trac 項目,如何啟動tracd 服務,以及如何配置使用apache 來提供trac 的web 服務。 trac 安裝的缺省路徑是/usr,trac-admin 和tracd 都在/usr/bin目錄,trac 的模版等都在/usr/share/trac目錄。
使用trac-admin 命令可以初始化一個trac 項目,一個trac 項目對應一個SVN repository ,這是應用中應該注意的。
#trac-admin /var/trac/myproject initenv
這個命令即可啟動初始化/var/trac/myproject項目的交互進程,是建立trac 項目,運行后提示如下:
Project Name [My Project]> 輸入項目名稱
Database connection string [sqlite:db/trac.db]> 因為前面使用的是sqlite 所以直接回車即可
Repository type [svn]>倉庫類型svn 回車
Path to repository [/path/to/repos]>倉庫路徑 輸入剛才的
/home/svn/myproject
Templates directory [/usr/share/trac/templates]> 模板路徑,還是回車
初始化完成后,可以通過修改/var/trac/myproject/conf/trac.ini來改變設置,甚至可以改變svn repository的設置,你需要做的只是在改完后使用
trac-admin /var/trac/myproject resync來重新同步trac 項目和svn repository 。
更細節(jié)的配置內容請參考trac 相關文檔。
順便修改一下權限
chown -R svn:www /var/svndata
trac 有兩種方式提供web 服務,其一是trac 自帶的tracd ,它本身就是一個httpd ,啟動方式如下:
,tracd --port 8000 /var/trac/myproject
或者你有兩個項目,則在后面加一個目錄:
tracd --port 8000 /var/trac/myproject1 /var/trac/myproject2
這種方式很簡單,但問題是trac 本身都不建議你用,因為tracd 不夠完善. 但不管怎么樣,你可以試用一下tracd ,看看你的安裝配置是不是都可以work 了,畢竟加上apache ,是件相對復雜很多的事情,所以,在這之前用tracd 來檢驗一下還是必要的。
啟動服務后,你就可以在一臺客戶機上使用瀏覽器來來瀏覽你開啟的web 服務了。比如:
如果可以看到trac 的默認首頁,就說明是OK 的,然后就開始將trac 集成到apache.
把trac 集成的到apache 有很多方法, 可以使用mod_python模塊, 可以使用cgi 模塊或者fast-cgi 模塊
我這里使用了cgi 模式,這個方法比較簡單。如果你需要速度快一點, 那使用fast-cgi 好了.
首先把trac 源代碼目錄中cgi-bin 目下的兩個文件拷貝到你存放cgi 的地方, 比如/usr/local/webserver/apache2/cgi-bin目錄下。
然后修改apache 的配置文件httpd.conf
vi /usr/local/webserver/apache2/conf/httpd.conf
然后添加以下內容:
#
### Trac settings
#
Alias /trac/chrome/common "/usr/share/trac/htdocs"
Options Indexes MultiViews
AllowOverride None
Order allow,deny
Allow from all
ScriptAlias /trac /usr/local/webserver/apache2/cgi-bin/trac.cgi SetEnv TRAC_ENV_PARENT_DIR "/var/trac"
,AuthType Basic
AuthName "Trac Login"
AuthUserFile /etc/svn/passwd
Require valid-user
密碼文件svntrac.htpasswd 我們和svn 共享, 這樣就只需要管理一套密碼了. 保存, 退出, 重啟apache. 再訪問
看看是不是可以得到trac 的默認首頁, 然后點擊”browse source”,你應該可以看到svn 倉庫里的資源.
這里需要注意的是:
SetEnv TRAC_ENV "/var/trac/myproject" #單個項目時用這樣寫 SetEnv TRAC_ENV_PARENT_DIR "/var/trac" #多個項目時這樣寫
還有如果多個項目使用一個密碼文件可以這樣配置”trac/*/login”,單個的話就”tra/login”
對于多個項目的話當在瀏覽器里輸入
時顯示的是一個簡單的Available Projects頁面,如果希望修改這個頁面,請編輯/usr/share/trac/templates/index.cs, 下面是我根據我們項目需要而更改的index.cs 文件
Available Projects Of XXX Team
Wiki Navigation
XXX Team's Projects
2.1.21 --- For ss project, release 2.1.21 ---- My example project
2.1.27 ---- My example project
2.2.0 code ---- My example project
Sol ---- Sol project
Real Case ---- Real project
XXX Team's Member
xxx
xxx