CentOS 6.5 x86_64系統下安裝Subversion-1.8.11,並且根據生產環境需要,使用Apache伺服器來支持HTTP協議訪問,並且使用Nginx做了反向代理。 ...
註:以下所有操作均在CentOS 6.5 x86_64位系統下完成。
我們需要搭建一個自己的SVN伺服器。
此外,搭建好的SVN伺服器除了需要支持svn協議外,最好還需要支持HTTP協議和HTTPS協議,這個時候就需要有Web伺服器的介入工作。
#準備工作#
在這之前需要先把Apache和Nginx安裝好,具體見:《CentOS安裝Apache-2.4.10+安全配置》、《CentOS安裝Nginx-1.6.2+安全配置》。
#Subversion的安裝#
開始下載Subversion併進行編譯安裝:
# wget http://mirror.bit.edu.cn/apache/subversion/subversion-1.8.11.tar.gz # tar zxf subversion-1.8.11.tar.gz # cd subversion-1.8.11 # ./configure --prefix=/usr/local/subversion-1.8.11 --with-apr=/usr/local/apr-1.4.5 --with-apr-util=/usr/local/apr-util-1.3.12 --with-sqlite=/usr/local/sqlite-3.8.7.4 # make && make install # ln -s /usr/local/subversion-1.8.11/ /usr/local/subversion
給SVN創建倉庫根目錄:
# mkdir -p /data/svnserver
假設我們現在需要開發一個名為proj1的項目,給這個項目創建一個SVN倉庫:
# /usr/local/subversion-1.8.11/bin/svnadmin create /data/svnserver/proj1 # chmod 777 -R /data/svnserver/proj1/db/
註:上面給db/目錄加入777許可權是因為提交代碼時需要對該目錄進行修改操作,否則可能提交代碼時會提示錯誤:
db/txn-current-lock permission denied
給SVN創建Apache的Web用戶驗證文件:
# /usr/local/apache/bin/htpasswd -cm /data/svnserver/auth.conf brishenzhou New password: Re-type new password: Adding password for user brishenzhou # /usr/local/apache/bin/htpasswd -m /data/svnserver/auth.conf otherman New password: Re-type new password: Adding password for user otherman
註:只有第一次需要加-c參數,後面再添加用戶則不需要。
給SVN創建倉庫訪問許可權文件:
# vim /data/svnserver/access.conf [groups] admin=brishenzhou developer=brishenzhou,otherman # Default access rule for ALL repositories # admins can write [/] @admin=rw # Allow developers complete access to their project repos [proj1:/] @developer=rw
至此,Subversion的安裝已經完畢,接下來是讓其與Apache協同工作,支持HTTP協議訪問。
#Subversion+Apache的HTTP協議支持#
把subversion相關的so文件拷貝過去給Apache:
# ls /usr/local/subversion/libexec/ mod_dav_svn.so mod_authz_svn.so # cp /usr/local/subversion/libexec/mod_dav_svn.so /usr/local/apache/modules/mod_dav_svn.so # cp /usr/local/subversion/libexec/mod_authz_svn.so /usr/local/apache/modules/mod_authz_svn.so
接著修改http.conf配置文件,如下:
# vim /usr/local/apache/conf/httpd.conf LoadModule dav_svn_module modules/mod_dav_svn.so LoadModule authz_svn_module modules/mod_authz_svn.so <Location /svn> DAV svn SVNParentPath /data/svnserver AuthType Basic AuthName "Subversion repository" AuthUserFile /data/svnserver/auth.conf Require valid-user AuthzSVNAccessFile /data/svnserver/access.conf </Location>
註:VIM下可以使用快捷鍵shift+g到文件末尾添加Location。
#Subversion的啟動/關閉#
首先啟動SVN服務,為了安全這裡必須使用www用戶來啟動(這個用戶也必須是Apache的工作用戶):
# chown -R www:www /data/svnserver # su -l www $ /usr/local/subversion-1.8.11/bin/svnserve -d -r /data/svnserver
註:如果在切換用戶身份的時候提示錯誤:This account is currently not available. 這個時候先臨時修改svn賬號的登錄許可權:
# vim /etc/passwd www:x:501:501::/home/www:/bin/bash
然後再切換,執行完命令後切換回root再修改svn賬號登錄許可權:
$ exit # vim /etc/passwd www:x:501:501::/home/svn:/sbin/nologin
這裡我們來查看下當前subversion的進程:
# ps -aux | grep svn www 6564 0.0 0.0 /usr/local/subversion-1.8.11/bin/svnserve -d -r /data/svnserver
從上面進程可以看出進程的屬主是www用戶,之後Subversion將會監聽3690埠。
如果要關閉Subversion服務,只需要使用kill命令殺死進程即可,比如:
# kill -9 6564
Subversion服務啟動完畢後,接著啟動Apache服務:
# /usr/local/apache/bin/apachectl restart
這個時候打開瀏覽器訪問地址http://youripaddress:8888/svn/proj1應該可以看到:
輸入前面設置的用戶名和密碼後就可以看到:
證明訪問成功。
#Nginx反向代理#
為了不需要輸入8888埠號,這裡使用Nginx來做反向代理,再將請求轉給Apache,配置nginx.conf:
# vim /usr/local/nginx/conf/nginx.conf server { listen 80; server_name localhost; location ~ ^/svn/ { access_log off; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://127.0.0.1:8888; } }
這個時候就可以直接訪問而不需要帶上8888埠號了。
至此,Subversion伺服器安裝成功並支持HTTP協議訪問。