在ubuntu服務器上搭建svn服務

分享一篇比較全的文章,方便自己以後查看,因爲自己搭建沒有使用apache,十分感謝這位大哥的文章微笑

安裝svn及apache服務:

sudo apt-get install apache2 libapache2-svn subversion 

增加svn用戶組,用於管理svn,並加入到www-data的apache組:

然後可以創建svn項目倉庫了:

sudo addgroup subversion
sudo usermod -G subversion -a www-data

然後可以創建svn項目倉庫了:

# 一般可以將項目倉庫建立到/home/svn目錄
# 假設項目名爲myproject,先建立空目錄
$ sudo mkdir /home/svn
$ cd /home/svn
$ sudo mkdir myproject
$ sudo chown -R root:subversion myproject
 
#創建爲svn項目,使用以下命令
$ sudo svnadmin create /home/svn/myproject
# 然後才賦予組成員對所有新加入文件倉庫的文件擁有相應的權限:
# 如果命令順序搞錯,可能會報錯,請參照官方wiki
$ sudo chmod -R g+rws myproject

啓動服務

svnserve -d -r /home/svn/myproject

這裏-d參數等效於--daemon,  -r參數等效於--root 。
啓動服務後,svnserve 將會在端口 3690 等待請求,-d選項告訴 svnserve 以守護進程方式運行,這樣在手動終止之前不會退出。-rt選項設置根位置來限制服務器的訪問目錄,從而增加安全性和節約輸入svnserve URL的時間。對於root參數, 如果不加root參數,服務url爲:svn://<hostname>/svn/myproject,而如果加上root參數,服務url爲:svn://<hostname>/myproject
注意:如果 url參數設置有誤的話,會導致訪問的時候會報錯,此問題我在配置時糾結了好久。

最後是配置apache,用http協議訪問svn服務:

# 在安裝了libapache2-svn時會自動生成該文件
$ sudo vi /etc/apache2/mods-available/dav_svn.conf

編輯dav_svn.conf配置文件,內有註釋,可以去掉前面的#使語句生效,最後內容大概如下即可:

<Location /svn>  #/svn表示http://hostname/svn/myproject
  DAV svn
  SVNParentPath /home/svn #配置倉庫父目錄
  AuthType Basic
  AuthName "ToFishes Project Svn"
  AuthUserFile /etc/subversion/passwd  #svn用戶文件
  AuthzSVNAccessFile /etc/subversion/authz #授權訪問文件
  Require valid-user
</Location>

svn用戶文件/etc/subversion/passwd 和 授權訪問文件/etc/subversion/authz是不存在的,需要手動創建。

svn用戶文件可以通過命令創建:

#首次創建需要加-c選項,同時可以增加一個svn用戶
#執行該命令會提示爲新用戶user_name設置密碼
sudo htpasswd -c /etc/subversion/passwd user_name
 
#以後添加新用戶,需要去掉-c選項,否則以前的用戶就被覆滅了
sudo htpasswd /etc/subversion/passwd new_name

用戶是可以添加了,同時需要管理授權,用於多個svn項目,劃分不同的用戶組:

用vi /etc/subversion/authz編輯授權文件,無文件則編輯並保存後會自動創建,無需擔心。

授權文件內容格式如下:

#用戶組指令
[groups]
#格式爲  組名 = 用戶名1,用戶名2
group1 = user1, user2
group2 = user1, user3
#other groups...
#格式爲  svn項目的倉庫名:對應目錄
[svn_repository_name:/]
#設置組的權限,r=read, w=write
@group1 = rw
[svn_repository_name2:/web/css]
@group2 = rw


改完最後重啓apache :   sudo /etc/init.d/apache2 restart。然後用svn客戶端,如小烏龜訪問,可能會出現如下錯誤:

Invalid command 'AuthzSVNAccessFile', perhaps misspelled or defined by a module not included in the server configuration

這是需要加載authz_svn這個模塊的支持。 建議將這兩個module都加載一下:

a2enmod authz_svn
a2enmod dav_svn

這樣工作就全部完成了,用小烏龜可以訪問了。注意小烏龜訪問的url:

自帶的svnserve服務(訪問地址類似於svn://<hostname>/myproject/)
與Apache配合使用  (訪問地址類似於http://<hostname>/myproject/)


svn的備份恢復

在老服務器進行導出操作:
$ svnadmin dump 原先的repo的目錄路徑(/repository/directory) > dumpfile.svndump


 在新服務器將dumpfile.svndump導入到新的repository 目錄中。
$ svnadmin load 新建的repos的目錄路徑(/repository/directory) < dumpfile.svndump

svn開機自啓動祕訣:

(1)進入/ect/init.d/目錄下:cd /etc/init.d

(2)創建腳本:sudo vi svnstart

腳本內容如下:

#!/bin/bash
svnserve -d -r /home/svn
此處svn路徑根據你自己的路徑調整

(3)修改權限:sudo chmod 777 svnstart

(4)將腳本添加到默認自啓動中,使用命令:sudo update-rc.d svnstart defaults

該文章轉自:http://blog.csdn.net/freshui/article/details/9268655

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章