Svn服务器的搭建与配置
本文由ilanniweb提供友情贊助,首發(fā)于爛泥行天下
想要獲得更多的文章,可以關(guān)注我的微信ilanniweb
要把svn代碼同步到git服務(wù)器上,本來是想通過subgit直接同步進行就行了。但是自已以前沒有搭建過svn服務(wù)器,所以有了這篇文章。
我們就來介紹下svn服務(wù)器的搭建,下一篇文章,我們再介紹svn與git服務(wù)器之間的代碼同步。
Svn服務(wù)器的搭建與配置網(wǎng)上文章很多,我們只介紹自己關(guān)注的幾點。
一、安裝svn
和以前的文章一樣,要搭建svn服務(wù)器,我們首先要安裝svn,根據(jù)OS的不同,我們來介紹在centos和ubuntu上的安裝。
1.1 在centos上安裝
在centos上安裝svn非常簡單,我們直接使用yum方式進行安裝即可,命令如下:
yum -y install install subversion httpd mod_dav_svn mod_perl mod_ssl openssl
svn安裝完畢后,我們來查看svn的版本,如下:
svn –version
通過上圖可以看到,目前centos6上svn的版本還是1.6的,版本比較舊了,不過不影響svn的使用就ok。
1.2 在ubuntu上安裝
在ubuntu上安裝svn也是非常簡單,直接使用apt-get方式安裝即可,命令如下:
sudo apt-get -y install subversion apache2 libapache2-svn ssl-cert
svn安裝完畢后,我們來查看svn的版本,如下:
svn –version
通過上圖可以看到,目前ubuntu上svn的版本比較新是1.8的。
二、配置svn
svn安裝完畢后,我們現(xiàn)在來配置svn。svn的配置在centos和ubuntu上上基本上是一樣的,所以在此我們就不進行區(qū)分了。
2.1 創(chuàng)建svn倉庫
首先,我們來新建一個ilanni目錄用于存儲svn倉庫,如下:
mkdir -p /data/ilanni
現(xiàn)在我們來創(chuàng)建第一個svn倉庫ilannisvn,使用如下命令:
svnadmin create /data/ilanni/ilannisvn
ll /data/ilanni/ilannisvn/
通過上圖,我們可以很明顯的看出svn創(chuàng)建倉庫時會生成conf、db等相關(guān)的目錄及文件。
現(xiàn)在,我們再來創(chuàng)建第二個svn倉庫ilannitest,使用如下命令:
svnadmin create /data/ilanni/ilannitest
ll /data/ilanni/ilannitest/
2.2 svn倉庫權(quán)限配置
svn倉庫創(chuàng)建完畢,我們就可以配置svn倉庫的訪問權(quán)限。
svn倉庫權(quán)限,我們可以進行單獨配置,也可以進行統(tǒng)一配置。考慮實際情況,一般會有多個svn倉庫,所以我們進行統(tǒng)一配置。
首先,我們創(chuàng)建用于管理所有倉庫帳號密碼、權(quán)限控制等的目錄svndata,如下:
mkdir -p /data/svndata/
svndata目前創(chuàng)建完畢后,我們進行其他文件的配置。
2.2.1 創(chuàng)建svnserve.conf文件
接下來我們來創(chuàng)建svn倉庫權(quán)限的總控制文件svnserve.conf,如下:
vim /data/svndata/svnserve.conf
[general]
#未鑒定的用戶無權(quán)限訪問該版本庫
anon-access = none
#鑒定后的可讀寫版本庫
auth-access = write
#使用的密碼文件是同級路徑的passwd文件,即是/data/svndata/passwd
password-db = passwd
#使用的權(quán)限控制文件是同級路徑的authz文件,即是/data/svndata/authz
authz-db = authz
#realm指定版本庫的認(rèn)證域,即在登錄時提示的認(rèn)證域名稱。各個倉庫的認(rèn)證域都可以自定義
realm = svndata
svnserve.conf文件主要是指定相關(guān)用戶和權(quán)限等配置。
2.2.2 創(chuàng)建passwd文件
svnserve.conf文件創(chuàng)建完畢后,我們來創(chuàng)建用于保存用戶和密碼的文件passwd,如下:
vim /data/svndata/passwd
[users]
ilanniadmin = 123456
test1 = 123456
test2 = 123456
test3 = 123456
passwd文件用于存儲用戶名和密碼,其中等號的兩邊要有一個空格,=前面是用戶名和,=后面是密碼,密碼是明文保存的。
2.2.3 創(chuàng)建authz文件
passwd文件創(chuàng)建后,我們開始創(chuàng)建svn倉庫的權(quán)限控制文件authz。
注意:權(quán)限管理的統(tǒng)一思路是:創(chuàng)建多個組,將各個用戶加入到各個組,控制各個組的權(quán)限。以后對權(quán)限管理就維持在組的維度上,否則以人為粒度管理,會死人滴。
vim /data/svndata/authz
[groups]
develop = test1,test2
android = test3
admin = ilanniadmin
[ilannisvn:/]
@develop = rw
@admin = rw
* =
[ilannisvn:/config]
@admin = rw
test1 = r
* =
[ilannitest:/]
@develop = r
@admin = rw
* =
現(xiàn)在這個權(quán)限控制是admin用戶組,對ilannisvn和ilannitest倉庫具有讀寫權(quán)限。
develop用戶組對ilannisvn倉庫具有讀寫權(quán)限,對ilannitest具有只讀權(quán)限,并且develop用戶組的test1用戶對ilannisvn倉庫下的config目錄只讀不能寫。
android用戶組對svn所有倉庫沒有任何訪問權(quán)限。
2.2.4 單獨配置svnserve.conf文件
在前面我們說了,要對svn倉庫權(quán)限進行統(tǒng)一管理。而以上章節(jié)中,我們把相關(guān)的文件創(chuàng)建完畢后,我們只需要修改每個倉庫的svnserve.conf文件,這樣就能達到統(tǒng)一管理每個倉庫的權(quán)限。
修改ilannisvn倉庫的svnserve.conf文件,如下:
vim /data/ilanni/ilannisvn/conf/svnserve.conf
[general]
anon-access = none
auth-access = write
#說明使用總控制的密碼文件
password-db = /data/svndata/passwd
#說明使用總控制的權(quán)限文件
authz-db = /data/svndata/authz
realm = ilannisvn
修改ilannitest倉庫的svnserve.conf文件,如下:
vim /data/ilanni/ilannitest/conf/svnserve.conf
[general]
anon-access = none
auth-access = write
#說明使用總控制的密碼文件
password-db = /data/svndata/passwd
#說明使用總控制的權(quán)限文件
authz-db = /data/svndata/authz
realm = ilannitest
到此有關(guān)svn倉庫權(quán)限配置已經(jīng)完畢。
三、使用svn協(xié)議訪問
svn搭建與配置完畢后,我們現(xiàn)在來訪問svn。svn的訪問方法有幾種,在此我們只介紹最常使用的三種。先來介紹使用svn協(xié)議訪問的方法。
啟動svn,使用如下命令:
svnserve -d -r /data/ilanni/
ps -ef |grep svn
netstat -tunlp
通過上圖,我們可以很明顯看出svn協(xié)議使用tcp的3690端口。
現(xiàn)在我們來直接使用svn協(xié)議訪問svn服務(wù)器,如下:
svn co –username test1 –password 123456 svn://192.168.8.33/ilannisvn
svn info
通過上圖,我們可以很明顯的看出通過svn命令是可以訪問svn服務(wù)器的。
現(xiàn)在我們再來添加一個文件,然后提交到svn服務(wù)器,如下:
vim ilannisvn.txt
this is a test file.
svn add ilannisvn.txt
svn commit -m ‘ilannisvn test’
現(xiàn)在我們使用windows下的svn工具查看,如下:
svn://192.168.8.33/ilannisvn
通過上圖,我們可以看到test1用戶提交的日志。這就說明使用svn協(xié)議訪問svn服務(wù)器就已經(jīng)ok了。
四、使用http訪問
要使用http訪問svn服務(wù)器,我們需要配置apache服務(wù),下面根據(jù)OS不同分別講解下。
注意:無論是使用http還是https訪問svn,passwd文件都是通過htpasswd命令創(chuàng)建。
4.1 在centos上配置
在centos上配置apache與svn集成,我們只需要修改apache的配置文件subversion.conf即可。
subversion.conf修改內(nèi)容如下:
vim /etc/httpd/conf.d/subversion.conf
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
<Location /repos>
?? DAV svn
SVNParentPath /data/ilanni
#一定要放在這行下面,否則會出現(xiàn)權(quán)限混亂的現(xiàn)象
AuthzSVNAccessFile /data/svndata/authz
?? AuthType Basic
?? AuthName “Authorization Realm”
AuthUserFile /data/svndata/passwd
#告訴apache在authfile中所有的用戶都可以訪問。 如果沒有它,則只能第一個用戶可以訪問新建庫。
Require valid-user
</Location>
subversion.conf文件修改完畢后,我們要重新創(chuàng)建svn的用戶和密碼文件passwd,但是passed文件我們要使用apache的工具htpasswd進行創(chuàng)建。如下:
htpasswd -cm /data/svndata/passwd ilanniadmin
htpasswd命令參數(shù)中-c是創(chuàng)建passwd文件,-m是使用md5加密。
passwd文件創(chuàng)建完畢后,我們再來添加test1和test2用戶,使用如下命令:
htpasswd -m /data/svndata/passwd test1
htpasswd -m /data/svndata/passwd test2
htpasswd -m /data/svndata/passwd test3
passwd用戶和密碼添加完畢后,然后我們在修改/data目錄屬性,如下:
chown apache:apache -R /data/
chmod 755 -R /data/
以上配置完畢后,我們來重啟apache,使用如下命令:
/etc/init.d/httpd restart
4.2 使用svn客戶端驗證
現(xiàn)在我們來使用svn客戶端來連接svn服務(wù)器,
以檢出ilannisvn倉庫為例,如下圖:
http://192.168.8.33/repos/ilannisvn
上圖中,輸入具有權(quán)限的用戶及密碼。
通過上圖,我們可以很明顯的看出,我們已經(jīng)從svn服務(wù)器檢出svn的代碼。這說明svn已經(jīng)能通過http訪問。
4.3 在ubuntu上配置
在ubuntu上配置apache與svn集成,和centos上一樣的,也只需要修改apache的配置文件subversion.conf即可。
subversion.conf修改內(nèi)容如下:
sudo vim /etc/apache2/mods-available/dav_svn.conf
<Location /repos>
?? DAV svn
? SVNParentPath /data/ilanni
#一定要放在這行下面,否則會出現(xiàn)權(quán)限混亂的現(xiàn)象
AuthzSVNAccessFile /data/svndata/authz
AuthType Basic
AuthName “Authorization Realm”
AuthUserFile /data/svndata/passwd
#告訴apache在authfile中所有的用戶都可以訪問。 如果沒有它,則只能第一個用戶可以訪問新建庫。
Require valid-user
</Location>
subversion.conf文件修改完畢后,我們要重新創(chuàng)建svn的用戶和密碼文件passwd,但是passed文件我們要使用apache的工具htpasswd進行創(chuàng)建。如下:
htpasswd -cm /data/svndata/passwd ilanniadmin
htpasswd命令參數(shù)中-c是創(chuàng)建passwd文件,-m是使用md5加密。
passwd文件創(chuàng)建完畢后,我們再來添加test1和test2用戶,使用如下命令:
htpasswd -m /data/svndata/passwd test1
htpasswd -m /data/svndata/passwd test2
htpasswd -m /data/svndata/passwd test3
passwd用戶和密碼添加完畢后,然后我們在修改/data目錄屬性,如下:
sudo chown -R www-data:www-data /data/
sudo chmod 755 -R /data/
以上配置完畢后,我們來重啟apache,使用如下命令:
/etc/init.d/apache2 restart
4.4 使用svn客戶端驗證
現(xiàn)在我們來使用svn客戶端來連接svn服務(wù)器,
以檢出ilannitest倉庫為例,如下圖:
http://192.168.8.34/repos/ilannitest
上圖中,輸入具有權(quán)限的用戶及密碼。
通過上圖,我們可以很明顯的看出,我們已經(jīng)從svn服務(wù)器檢出svn的代碼。這說明svn已經(jīng)能通過http訪問。
五、使用https訪問
要使用https訪問svn服務(wù)器,我們也是需要配置apache服務(wù),下面根據(jù)OS不同分別講解下。
注意:無論是使用http還是https訪問svn,passwd文件都是通過htpasswd命令創(chuàng)建。
5.1 在centos上配置
在centos上配置apache與svn集成,我們只需要修改apache的配置文件subversion.conf和ssl.conf即可。
對于ssl.conf文件,我們使用默認(rèn)的即可。但是如果我們要使用自己的ssl證書的話,可以修改ssl.conf文件的SSLCertificateFile和SSLCertificateKeyFile選項即可。
如果不使用自己的ssl證書的話,保持該文件默認(rèn)就行了,如下:
vim /etc/httpd/conf.d/ssl.conf
LoadModule ssl_module modules/mod_ssl.so
Listen 443
SSLPassPhraseDialog? builtin
SSLSessionCache???????? shmcb:/var/cache/mod_ssl/scache(512000)
SSLSessionCacheTimeout? 300
SSLMutex default
SSLRandomSeed startup file:/dev/urandom? 256
SSLRandomSeed connect builtin
SSLCryptoDevice builtin
<VirtualHost _default_:443>
ErrorLog logs/ssl_error_log
TransferLog logs/ssl_access_log
LogLevel warn
SSLEngine on
SSLProtocol all -SSLv2
SSLCipherSuite DEFAULT:!EXP:!SSLv2:!DES:!IDEA:!SEED:+3DES
SSLCertificateFile /etc/pki/tls/certs/localhost.crt
SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
<Files ~ “\.(cgi|shtml|phtml|php3?)$”>
??? SSLOptions +StdEnvVars
</Files>
<Directory “/var/www/cgi-bin”>
??? SSLOptions +StdEnvVars
</Directory>
SetEnvIf User-Agent “.*MSIE.*” \
???????? nokeepalive ssl-unclean-shutdown \
???????? downgrade-1.0 force-response-1.0
CustomLog logs/ssl_request_log \
????????? “%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \”%r\” %b”
</VirtualHost>
而subversion.conf文件,只需要添加SSLRequireSSL選項即可。如下:
vim /etc/httpd/conf.d/subversion.conf
LoadModule dav_svn_module???? modules/mod_dav_svn.so
LoadModule authz_svn_module?? modules/mod_authz_svn.so
<Location /repos>
?? DAV svn
?? SVNParentPath /data/ilanni
#一定要放在這行下面,否則會出現(xiàn)權(quán)限混亂的現(xiàn)象
? AuthzSVNAccessFile /data/svndata/authz
?? AuthType Basic
?? AuthName “Authorization Realm”
?? AuthUserFile /data/svndata/passwd
#告訴apache在authfile中所有的用戶都可以訪問。 如果沒有它,則只能第一個用戶可以訪問新建庫。
?? Require valid-user
?? SSLRequireSSL
</Location>
以上配置完畢后,我們來重啟apache,使用如下命令:
/etc/init.d/httpd restart
5.2 使用svn客戶端驗證
現(xiàn)在我們來使用svn客戶端來連接svn服務(wù)器,還是以檢出ilannisvn倉庫為例,如下圖:
https://192.168.8.33/repos/ilannisvn
接受ssl驗證。
通過上圖,我們可以很明顯的看出,我們已經(jīng)從svn服務(wù)器檢出svn的代碼。這說明svn已經(jīng)能通過https訪問。
5.3 在ubuntu上配置
在ubuntu上配置apache與svn集成,和centos上是差不多的,也是需要修改apache的配置文件subversion.conf和default-ssl.conf。
對于ssl.conf文件,我們使用默認(rèn)的即可。但是如果我們要使用自己的ssl證書的話,可以修改default-ssl.conf文件的SSLCertificateFile和SSLCertificateKeyFile選項即可。
如果不使用自己的ssl證書的話,保持該文件默認(rèn)就行了,如下:
sudo vim /etc/apache2/sites-available/default-ssl.conf
<IfModule mod_ssl.c>
<VirtualHost _default_:443>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
SSLEngine on
SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
<FilesMatch “\.(cgi|shtml|phtml|php)$”>
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Directory>
BrowserMatch “MSIE [2-6]” \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
BrowserMatch “MSIE [17-9]” ssl-unclean-shutdown
</VirtualHost>
</IfModule>
在ubuntu上啟用svn的https訪問方法和centos上還是有幾個地方不一樣的,不一樣的地方如下:
啟用ssl模塊,使用如下命令:
sudo a2enmod ssl
這條命令相當(dāng)于執(zhí)行了以下兩條命令,如下:
sudo ln -s /etc/apache2/mods-available/ssl.load /etc/apache2/mods-enabled
sudo ln -s /etc/apache2/mods-available/ssl.conf /etc/apache2/mods-enabled
如果沒有a2enmod指令,也可直接在apache2.conf中設(shè)置SSL模塊加載,如下:
LoadModule ssl_module /usr/lib/apache2/modules/mod_ssl.so
啟用SSL站點,使用如下命令:
sudo a2ensite default-ssl
最后我們再來編輯dav_svn.conf文件,加入SSLRequireSSL選項即可,如下:
sudo vim /etc/apache2/mods-available/dav_svn.conf
<Location /repos>
?? DAV svn
?? SVNParentPath /data/ilanni
#一定要放在這行下面,否則會出現(xiàn)權(quán)限混亂的現(xiàn)象
AuthzSVNAccessFile /data/svndata/authz
AuthType Basic
AuthName “Authorization Realm”
AuthUserFile /data/svndata/passwd
#告訴apache在authfile中所有的用戶都可以訪問。 如果沒有它,則只能第一個用戶可以訪問新建庫。
Require valid-user
SSLRequireSSL
</Location>
以上配置完畢后,我們來重啟apache,使用如下命令:
/etc/init.d/apache2 restart
5.4 使用svn客戶端驗證
現(xiàn)在我們來使用svn客戶端來連接svn服務(wù)器,
以檢出ilannitest倉庫為例,如下圖:
https://192.168.8.34/repos/ilannitest
通過上圖,我們可以很明顯的看出,我們已經(jīng)從svn服務(wù)器檢出svn的代碼。這說明svn已經(jīng)能通過https訪問。
六、svn倉庫權(quán)限驗證
以上幾個章節(jié)我們介紹了svn服務(wù)器的搭建與配置,以及svn服務(wù)器的訪問方法,這個章節(jié),我們再來驗證下svn倉庫權(quán)限。
在第二章節(jié)中,我們配置的svn倉庫權(quán)限,如下:
這個權(quán)限控制是admin用戶組,對ilannisvn和ilannitest倉庫具有讀寫權(quán)限。
develop用戶組對ilannisvn倉庫具有讀寫權(quán)限,對ilannitest具有只讀權(quán)限,并且develop用戶組的test1用戶對ilannisvn倉庫下的config目錄只讀不能寫。
android用戶組對svn所有倉庫沒有任何訪問權(quán)限。
現(xiàn)在我們來驗證admin用戶組的ilanniadmin用戶對svn倉庫的權(quán)限,如下:
svn co –username ilanniadmin –password 123456 https://192.168.8.33/repos/ilannisvn
svn co –username ilanniadmin –password 123456 https://192.168.8.33/repos/ilannitest
通過上圖,我們可以很明顯的看出ilanniadmin用戶具有對ilannisvn和ilannitest倉庫具有讀權(quán)限,下面我們來測試寫權(quán)限。
通過上圖,我們可以很明顯的看出ilanniadmin用戶具有對ilannisvn和ilannitest倉庫具有讀寫權(quán)限,這說明我們的權(quán)限配置是對的。
在此我們只驗證admin用戶組,其他的權(quán)限請各位童鞋自行驗證。
到此有關(guān)svn服務(wù)器搭建與配置的文章就全部結(jié)束。
轉(zhuǎn)載于:https://blog.51cto.com/7336056/1859834
總結(jié)
以上是生活随笔為你收集整理的Svn服务器的搭建与配置的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Unity使用FGUI的基本操作(一)
- 下一篇: 周记3