1、查看是否安裝舊版SVN
rpm -qa | grep subversion
2、卸載舊版本SVN
yum remove subversion
3、安裝SVN
yum -y install subversion
上面3步都是常規設置。
4、創建SVN版本庫(也就是項目要存放的倉庫)
mkdir -p /home/svn 創建所有項目的根目錄
svnadmin create /home/svn/ProjectName 創建一個項目要存放的位置(必須要在/home/svn根目錄下創建)
我將我的版本庫放在home/svn目錄下,這個svn表示我所有項目的根目錄,因為可能會存在多個項目都在一台虛擬機上存放的時候
svnadmin create是創建單個項目的版本庫。ProjectName是項目的名字
當上面命令執行后會在/home/svn/ProjectName文件夾下生成以下文件
5配置代碼庫
進入/home/svn/ProjectName/conf文件夾下
authz:文件是權限控制文件
passwd:是帳號密碼文件
svnserve.conf :SVN服務配置文件
設置可以訪問這個遠程倉庫的人的帳號密碼
vi passwd
在[users]下面進行用戶名密碼的設置
[users] # harry = harryssecret # sally = sallyssecret
user1 = 密碼
user2 = 密碼
。。。
編輯完后,按Esc鍵退出編輯模式,輸入 :wq! 保存文件並退出
不用跟系統的/etc/passwd文件中用戶名密碼相同,用戶名密碼可以隨意設置
note:
這里設置的用戶名密碼是用於svn://協議訪問代碼倉庫使用的。
這與http協議使用的帳號密碼不是使用相同的帳號密碼文件
設置權限控制
vi authz 編輯authz
在[groups]中設置組,和組員
在下面分別為設計組design和開發組dev
設計組需要有對ProjectName項目中的doc文件有讀寫權限,而開發組只能擁有讀的權限
[/doc]對這個文件夾有設置權限
開發組需要對ProjectName項目中的src源碼文件有讀寫權限。其他人員不能進行寫操作。
。所以分別設置/doc和/src文件的權限
為了測試方便,加一個[/]倉庫根目錄的訪問權限,任意用戶都可以讀取內容
不直接對特定用戶設置權限,而是對組進行授權,將用戶加入該組。
[groups] # harry_and_sally = harry,sally # harry_sally_and_joe = harry,sally,&joe design = user1,user2,user... developer = user11,user22,user... [/doc] @design = rw @dev = r [/src] @dev = rw * = r
[/]
* = r
修改svnserve.conf文件 vi svnserve.conf
清空內容並添加下面內容。主要設置帳號,和權限。還有當前項目的版本庫所在目錄,
realm中為了避免相對定位出錯,這里直接使用絕對路徑設置版本庫所在目錄
[general]
anon-access = none #匿名用戶不可訪問 auth-access = write #授權用戶可寫 password-db = passwd #使用哪個文件作為賬號文件 authz-db = authz #使用哪個文件作為權限文件 realm = /home/svn/ProjectName # 認證空間名,版本庫所在目錄
到此,svn倉庫已經搭建完畢了
啟動svn
svnserve -d -r /home/svn
讓svn以deamon守護進程方式 以root用戶啟動運行。
注意,這路徑不能到ProjectName
否則在訪問時候會報svn: E170000: URL 'svn://虛擬機ip地址/ProjectName' doesn't exist
訪問地址svn://ip/ProjectName 省略的svn這個根目錄
配置Apache的http協議訪問
查看httpd是否已經安裝的svn模塊
ls /etc/httpd/modules/ | grep svn
mod_authz_svn.so
mod_dav_svn.so
如果沒安裝,使用yum安裝。
yum install mod_dav_svn
安裝完成,對svn版本庫下的項目ProjectName進行位置映射
在/etc/httpd/conf.d/文件下創建subversion.conf文件並編輯
vi subversion.conf
LoadModule dav_svn_module modules/mod_dav_svn.so LoadModule authz_svn_module modules/mod_authz_svn.so <Location /ProjectName> DAV svn SVNPath /home/svn/ProjectName/ AuthType Basic AuthName "Subversion repos" AuthUserFile /home/svn/ProjectName/conf/accesspwd AuthzSVNAccessFile /home/svn/ProjectName/conf/authz Require valid-user </Location>
AuthType認證類型
AuthName 描述名,隨便取
AuthUserFile這個是http協議的訪問賬戶密碼文件,后面使用htpasswd命令創建
AuthzSVNAccessFile 權限認證文件,這個跟上面配置svn時候配置的權限設置一樣
Require 需要認證用戶才可以訪問
htpasswd創建賬戶密碼
htpasswd -c -m /home/svn/ProjectName/conf/accesspwd username
-c是創建新文件,只有第一次創建賬戶密碼時使用
-m是強制使用MD5加密密碼(默認)
accesspwd 是創建的文件名。
username你要創建的可訪問用戶的名字(如我想創建一個asd用戶訪問這個svn項目倉庫,這個username就是asd)
按提示輸入兩次密碼,我們就創建了一個可訪問用戶名和密碼。
如果想要新增加用戶abc(第二次添加用戶)
不需要使用-c參數,如果使用的會覆蓋原來的accesspwd文件
htpasswd -m /home/svn/ProjectName/conf/accesspwd abc
接着輸入兩次密碼,
繼續增加用戶。。。
你不再繼續創建新用戶,循環結束。
重啟Apache的服務
service httpd restart 或者 systemctl restart httpd.service
現在就可以通過"http://ip/ProjectName" 來訪問我們的svn服務器了
當然,上面的情況是在關閉防火牆或開放端口,或http服務正常啟動情況。
檢查端口是否被使用
netstat -tunlp | grep 80 檢查80端口使用情況
netstat -tunlp | grep 3690 檢查3690也就是svn的服務端口使用情況
端口被使用,說明服務正常開啟。
使用curl進行模擬瀏覽器請求
curl http://localhsot:80/ProjectName 檢查服務有沒有響應。
一般會返回401 Unauthorized 未認證的401錯誤
檢查防火牆
查看防火牆有沒有開啟 firewall-cmd --state #查看默認防火牆狀態(關閉后顯示notrunning,開啟后顯示running) systemctl status firewalld.service顯示一個防火牆的狀態 firewall-cmd --list-ports查看已經開放的端口 如果防火牆啟動,且沒有開放80和3690端口, 開啟端口: firewall-cmd --zone=public --add-port=80/tcp --permanent 命令含義: –zone #作用域 –add-port=80/tcp #添加端口,格式為:端口/通訊協議 –permanent #永久生效,沒有此參數重啟后失效 firewall-cmd --reload #重啟firewall
iptables被開啟
vi/etc/sysconfig/iptables #編輯防火牆配置文件添加80端口和3690端口 INPUT ACCEPT [0:0] :FORWARD ACCEPT[0:0] :OUTPUT ACCEPT[0:0] -A INPUT -m state--state RELATED,ESTABLISHED -j ACCEPT -A INPUT -p icmp -jACCEPT -A INPUT -i lo -jACCEPT -A INPUT -p tcp -mstate --state NEW -m tcp --dport 22 -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --Dport 3690 -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 8080-j ACCEPT -A INPUT -j REJECT--reject-with icmp-host-prohibited -A FORWARD -jREJECT --reject-with icmp-host-prohibited 保存退出
systemctl restart iptables.service #最后重啟防火牆使配置生效
或者service iptables restart這個語句重啟iptables
備注:這里使用80和8080端口為例。***部分一般添加到
“-A INPUT -p tcp -m state --state NEW -m tcp--dport 22 -j ACCEPT”行的上面或者下面,切記不要添加到最后一行,否則防火牆重啟后不生效。
我們可以使用telnet命令查看虛擬機的某個端口是否可以連通
如,我們測試apache服務器的80端口是否連通(這需要服務器已經啟動的情況下)
telnet ip 端口號
如果沒有這個命令,使用yum安裝這個命令
yum -y install telnet
其他情況
有可能我們虛擬機需要外網訪問,我們需要外網電腦上進行端口地址轉換
如我們外網地址為218.107.22.104
而我們虛擬機地址172.16.168.102
我們要將172.16.168.102:80端口映射到218.107.22.104:10020端口上,我們要保證我們的外網主機的防火牆策略允許對外網訪問的10020端口映射到虛擬機的80端口上。
如果沒有端口映射也會出現不能訪問的問題。
如果我們想要配置多個svn倉庫,我們可以在/home/svn/下創建其他的項目
svnadmin create /home/svn/新創建的倉庫名字
同樣的需要修改配置
配置http訪問,
在/etc/httpd/conf.d/路徑下新建一個project2.conf
LoadModule dav_svn_module modules/mod_dav_svn.so LoadModule authz_svn_module modules/mod_authz_svn.so <Location /新建倉庫名> DAV svn SVNPath /home/svn/新建倉庫名/ AuthType Basic AuthName "Subversion repos" AuthUserFile /home/svn/新建倉庫名/conf/accesspwd AuthzSVNAccessFile /home/svn/新建倉庫名/conf/authz Require valid-user </Location>
重啟httpd
最后通過
http://ip:80/新建倉庫名
對代碼倉庫進行訪問
ps
可能我們可以訪問svn服務器,也可以checkout出來項目,但是我們上傳文件到svn服務器上會出錯。
SVN Access to ‘/svn/Test/!svn/me’ forbidden
在上面設置都沒有問題的情況下需要給文件設置對應的用戶組,和設置文件權限
將/home/svn/目錄下的項目名修改用戶組 chown -R group:user url chown -R apache:apache /home/svn/新建倉庫名 -R 會將我們新建倉庫文件夾及其子目錄下的所有文件遞歸的更改用戶組 apache:apache表示我們要將文件夾及其子目錄下的所有文件修改組擁有着為apache,用戶為apache url 修改的文件夾路徑
設置訪問權限appache用戶擁有讀寫可執行,組用戶和其他組或用戶可以讀和執行
chmod -R 755 /home/svn/新建倉庫名
這樣設置完后,在使用svn就可以上傳文件修改文件了