2014-05-07

使用Ubuntu架設SVN Server + WebSVN

一直都想架設版本控管系統,雖然現在已經有Git這種分散式控管的版本控制,網路上也有像githubbitbucket這種很大又免費的Git Server,但小研究了一下,他的控管方式跟SVN不太一樣,可能會顛覆原本的觀念。公司開發程式的工程師就兩位,所有的專案又不能對外公開,那就先研究一下比較好架設的SVN就好,Git就等之後學會了再來慢慢轉換過去。

目標:
  1. 能夠版本控制(廢話)
  2. 可以透過svn://或是http://連線
  3. 能有web介面看到現在所有的專案
  4. 有帳號密碼才能存取
綜合網路上各篇文章吸收研究後,底下是我採用的方法,步驟紀錄就筆記一下。


首先安裝好Ubuntu Server,接著分成三階段:

一、基本設定

  1. 先安裝相關套件
    1. sudo apt-get install apache2 subversion libapache2-svn php5 apache2-utils apache2-doc php-pear db5.1-util php5-json openssl-blacklist subversion-tools

  2. 準備相關資訊:
    1. Repository根目錄: /home/svn
    2. WebSvn根目錄: /var/www/websvn
    3. svn帳號: svn
    4. svn群組名稱: svngroup

  3. 增加帳號,並把相關帳號放入群組
    1. sudo mkdir /home/svn
    2. sudo addgroup svngroup
    3. sudo useradd -d /home/svn -G svngroup svn
    4. sudo usermod -G svngroup -a www-data
    5. sudo usermod -G svngroup -a 妳的帳號

  4. 先產生一個測試Repository(注意順序)
    1. sudo chown -R svn:svngroup /home/svn
    2. sudo mkdir /home/svn/demo
    3. sudo svnadmin create /home/svn/demo
    4. sudo chmod -R g+rwx /home/svn/demo

到此基本的設定就OK了,但還無法從client端取得資料,接著我們來設定相關協定。


二、設定http

  1. 編輯/etc/apache2/mods-available/dav_svn.conf,讓他變成如下:
    1. <Location /repos>
    2. DAV svn
    3. SVNParentPath /home/svn
    4. SVNListParentPath On
    5. AuthType Basic
    6. AuthName "Subversion Repository" #這個是跳出認證視窗提示文字
    7. AuthUserFile /etc/subversion/passwd
    8. Require valid-user
    9. #LimitXMLRequestBody 0 #如果上傳太多檔案可能SVN會報錯,打開這個選項
    10. </Location>

  2. 重新啟動apache讓他生效
    1. sudo /etc/init.d/apache2 restart

  3. 產生認證帳號密碼檔,這樣從http存取Repository的時候就會跳出輸入帳號密碼視窗,就不會任何人都可修改
    1. sudo htpasswd -c /etc/subversion/passwd 帳號名稱
    會要你輸入兩次密碼,輸入完成即可

    以上指令僅限第一次使用,之後要再產生新帳號的話,必須把-c參數拿掉,不然會重新產生passwd的檔案,如下
    1. sudo htpasswd /etc/subversion/passwd 帳號名稱

  4. 確認剛才的帳號有產生
    1. sudo cat /etc/subversion/passwd

  5. 這樣應該就可以利用 http://網站IP或Domain/repos/REPO_NAME 存取Repository了,也可以使用瀏覽器瀏覽。

三、設定svn

  1. 當利用svnadmin create指令產生新的Repository之後,該目錄底下有個conf目錄,編輯svnserve.conf檔案
    1. [general]
    2. anon-access = none #訪客不可存取
    3. auth-access = write #認證使用者可寫入
    4. password-db = passwd #帳號密碼表的檔案

  2. 存檔好之後,我們再來編輯conf目錄底下passwd檔案(就是上面指定的帳號密碼表),加入可存取該Repository的帳號與密碼
    1. [users]
    2. user = user-password

  3. 啟動SVN
    我們利用xinetd來委託啟動,如果server沒有安裝的話就先裝一下吧
    1. sudo apt-get install xinetd

  4. 新增個svn檔
    1. sudo vi /etc/xinetd.d/svn

  5. 加入底下
    1. service svn
    2. {
    3. disable = no
    4. port = 3690
    5. socket_type = stream
    6. protocol = tcp
    7. wait = no
    8. user = svn
    9. server = /usr/bin/svnserve
    10. server_args = -i -r /home/svn
    11. }
    注意紅框處的值是要隨實際情況來改變的

  6. 存檔好後執行
    1. sudo /etc/init.d/xinetd restart
    即可。

四、websvn

  1. 變身root
    1. sudo -i

  2. 下載websvn最新版(最新版只到2011/6就沒了)並解壓縮
    1. cd ~
    2. wget http://websvn.tigris.org/files/documents/1380/49056/websvn-2.3.3.tar.gz
    3. tar -zxvf websvn-2.3.3.tar.gz

  3. 將所有檔案搬到/var/www底下
    1. mkdir /var/www/websvn
    2. mv /root/websvn-2.3.3/* /var/www/websvn

  4. 重新編輯一次/etc/apache2/mods-available/dav_svn.conf,在最底下加上
    1. <Location /websvn>
    2. Options FollowSymLinks
    3. order allow,deny
    4. allow from all
    5. AuthType Basic
    6. AuthName "Subversion Repository"
    7. </Location>

  5. 增加程式碼高亮
    1. apt-get install enscript

  6. 修改設定檔
    1. cd /var/www/websvn/include
    2. cp distconfig.php config.php
    3. vi config.php

  7. 增加SVN Parent目錄與encscript
    1. $config->parentPath("/home/svn");
    2. $config->setEnscriptPath('/usr/bin');

  8. 重新啟動apache之後就可以在 http://網站IP或Domain/websvn 看到已經建立的Repository了

以後要新增Repository:
  1. cd /home/svn
  2. svnadmin create RepositoryName
  3. sudo chown -R svn:svngroup RepositoryName
  4. sudo chmod -R ug+rwx RepositoryName
然後編輯底下conf/svnserve.conf與passwd檔案即可


參考連結:

沒有留言:

張貼留言