編碼的世界 / 優質文選 / 感情

Centos7搭建SVN服務(多個倉庫)


2022年6月05日
-   

1、下載安裝 subversion
[root@CentOS var]# yum -y install subversion

測試安裝是否成功
[root@CentOS var]# svnserve version

2、創建 svn 版本庫,初始化相關配置文件
[root@CentOS var]# mkdir -p /opt/svnrepos/code
[root@CentOS var]# mkdir -p /opt/svnrepos/custom
[root@CentOS var]# svnadmin create /opt/svnrepos/code
[root@CentOS var]# svnadmin create /opt/svnrepos/custom

查看版本庫相關配置文件
[root@CentOS var]# cd /opt/svnrepos/code
[root@CentOS warehouse1]# ll
總用量 8
drwxr-xr-x. 2 root root 54 3月 2 22:49 conf
drwxr-sr-x. 6 root root 253 3月 2 22:51 db
-rrr. 1 root root 2 3月 2 22:47 format
drwxr-xr-x. 2 root root 231 3月 2 22:47 hooks
drwxr-xr-x. 2 root root 41 3月 2 22:47 locks
-rw-rr. 1 root root 229 3月 2 22:47 README.txt

如果刪除版本庫:
[root@CentOS var]# sudo rm -rf /opt/svnrepos/code

進入code 目錄下的conf文件夾。將其中的authz與passwd文件複制到svnrepos目錄
[root@CentOS var]# cd /opt/svnrepos/warehouse1/conf
[root@CentOS conf]# cp authz /opt/svnrepos/
[root@CentOS conf]# cp passwd /opt/svnrepos/

修改code/conf下的svnserve.conf文件,將其中的passwd文件制定與authz文件制定進行修改,其他配置按正常單svn配置。(custom同樣設置一遍)
編輯示例:
[general]
#禁止匿名用戶訪問
anon-access = no
#授權用戶擁有讀寫權限
auth-access = write
# 使用公共的passwd
password-db = /opt/svnrepos/passwd
# 使用公共的authz
authz-db = /opt/svnrepos/authz
#指定版本庫的認證域, code倉庫路徑/opt/svnrepos/code/, custom倉庫路徑為/opt/svnrepos/custom/
realm = /opt/svnrepos/code/

anon-access = none:表示禁止匿名用戶訪問。
auth-access = write:表示授權用戶擁有讀寫權限。
password-db = passswd:指定用戶名口令文件,即 passwd 文件。
authz-db = authz:指定權限配置文件,即 authz 文件。
realm = /opt/svnrepos/code/:指定認證域,即 /opt/svnrepos 目錄。
編輯svn用戶配置文件
[root@CentOS var]# vim /opt/svnrepos/passwd

編輯示例:
[users]
# harry = harryssecret
# sally = sallyssecret
# 用戶名,密碼
admin = admin
quest = 123456
lisi= 123456
zhangsan = 123456
wangwu=123456
ligang=123456

編輯svn權限控制配置文件
[root@CentOS var]# vim /opt/svnrepos/authz

[aliases]
[groups]
#用戶組名=用戶名
admin=admin
quest=quest
users_code=lisi,zhangsan
users_custom=wangwu,ligang
#表示根目錄(/opt/svnrepos/),對全部版本庫設置權限
[/]
#表示admin組對根目錄有讀寫權限,r為讀,w為寫
@admin=rw
#表示code倉庫根目錄(/opt/svnrepos/code/)
[code:/]
#表示users_code組對根目錄有讀寫權限,r為讀,w為寫
@users_code=rw
#表示code倉庫下的test目錄
[code:/test]
#表示quest組對根目錄有讀寫權限,r為讀
@quest=r
#表示custom倉庫根目錄(/opt/svnrepos/custom/)
[custom:/]
#表示users_code組對根目錄有讀寫權限,r為讀,w為寫
@users_custom=rw
#表示custom倉庫下的test目錄
[custom:/test]
#表示quest組對根目錄有讀寫權限,r為讀
@quest=r

4.在 /etc/init.d 目錄下,創建腳本 svnd
[root@CentOS init.d]# touch svnd
[root@CentOS init.d]# chmod u+x svnd

編輯後的 svnd 腳本如下所示
#!/bin/sh
# chkconfig: 2345 10 90
# description: svn server
SVN_HOME=/opt/svnrepos
if [ ! -f "/usr/bin/svnserve" ]
then
echo "svnserver startup: cannot start"
exit
fi
case "$1" in
start)
echo "Starting svnserve…"
/usr/bin/svnserve -d listen-port 3690 -r $SVN_HOME
echo "Finished!"
;;
stop)
echo "Stoping svnserve…"
killall svnserve
echo "Finished!"
;;
restart)
$0 stop
$0 start
;;
*)
echo "Usage: svn { start | stop | restart } "
exit 1
esac

 
5.啟動 svn 服務
[root@CentOS init.d]# service svnd start
Starting svnserve…
Finished!
[root@CentOS init.d]# ps -ef | grep 'svnserve'
root 4225 1 0 23:33 ? 00:00:00 /usr/bin/svnserve -d listen-port 3690 -r /opt/svnrepos
root 4230 3505 0 23:33 pts/0 00:00:00 grep color=auto svnserve
[root@CentOS init.d]#

安裝好 svn 服務後,默認是沒有隨系統啟動自動啟動的, CentOS 7 的 /etc/rc.d/rc.local 是沒有執行權限的, 系統建議創建 systemd service 啟動服務
查看svnserve.service位置:systemctl enable svnserve.service 

於是查看 systemd 裏 svn 的配置文件 /lib/systemd/system/svnserve.service
[Unit]
Description=Subversion protocol daemon
After=syslog.target network.target
[Service]
Type=forking
EnvironmentFile=/etc/sysconfig/svnserve
ExecStart=/usr/bin/svnserve daemon pid-file=/run/svnserve/svnserve.pid $OPTIONS
[Install]
WantedBy=multi-user.target

找到 svn 的 service 配置文件 /etc/sysconfig/svnserve 編輯配置文件
vi /etc/sysconfig/svnserve

將 OPTIONS="-r /var/svn" 改為 svn 版本庫存放的目錄,:wq 保存退出
在提示符下輸入
systemctl enable svnserve.service

重啟服務器:shutdow -r now
輸入
ps -aux | grep 'svn'


6.開放 3690 端口 (svn服務默認端口)
[root@CentOS init.d]# firewall-cmd zone=public add-port=3690/tcp permanent
success
[root@CentOS init.d]# firewall-cmd reload
success
[root@CentOS init.d]#

7.在 windows 下使用TortoiseSVN進行測試
如code倉庫svn地址   
svn://192.168.2.2/code
如custom倉庫svn地址
svn://192.168.2.2/custom



 
8.將 svn 添加為系統服務,並設置為開機啟動
[root@CentOS init.d]# chkconfig add svnd
[root@CentOS init.d]# chkconfig svnd on

9.配置httpd訪問方式
 安裝httpd服務:
$ sudo yum install httpd

檢查httpd是否安裝成功:
 httpd -version
Server version: Apache/2.4.6 (CentOS)
Server built: Jul 18 2016 15:30:14

安裝mod_dav_svn,mod_dav_svn是apache服務器訪問svn的一個模塊。通過yum安裝:
sudo yum install mod_dav_svn

安裝成功後,會有mod_dav_svn.so和mod_authz_svn.so兩個文件。
$ sudo find / -name mod_dav_svn.so
/usr/lib64/httpd/modules/mod_dav_svn.so
$ sudo find / -name mod_authz_svn.so
/usr/lib64/httpd/modules/mod_authz_svn.so

修改svn倉庫的用戶組為apache
$ sudo chown -R apache:apache /opt/svnrepos

創建用戶文件passwd_httpd(httpd方式密碼為md5加密,需重新配置用戶名密碼),示例如下:
$ sudo touch /opt/svnrepos/passwd_http #創建用戶文件
$ sudo htpasswd /opt/svnrepos/passwd_httpd admin #創建用戶admin
$ sudo htpasswd /opt/svnrepos/passwd_http guest #創建用戶gues

 
配置httpd
$ sudo touch /etc/httpd/conf.d/subversion.conf
$ cat /etc/httpd/conf.d/subversion.conf
<Location /svn>
DAV svn
#SVNPath定義到具體倉庫位置
#SVNPath /opt/svnrepos/code
#SVNParentPath 定義多個倉庫
SVNParentPath /opt/svnrepos
AuthType Basic
AuthName "Subversion repos"
#用戶名密碼(密碼為md5加密)
#AuthUserFile /opt/svnrepos/passwd_httpd
AuthzSVNAccessFile /opt/svnrepos/authz
Require valid-user
</Location>

啟動httpd服務
$ service httpd start

客戶端使用http://192.168.2.2/svn/code就可以訪問剛才建立的svn倉庫了。 如果返回403錯誤,可能是防火牆問題。增加防火牆規則:


//永久的添加該端口
$ firewall-cmd permanent zone=public add-port=80/tcp
//加載配置,使得修改有效
$ firewall-cmd reload
//查看開啟的端口
$ firewall-cmd permanent zone=public list-ports

 
 
 
 

熱門文章