Debian Linux: Apache2(Virtual Host) + Subversion(SVN) + Trac 快速建置

整合之前文章, 來做快速建置筆記, 如果有看不懂的步驟, 或遇到任何問題, 可以回到原始文件再看看(下述文件會把較可能出問題的地方列出來).

Debian 的建置 通常是放在 /var/lib 下, 所以下述採用的如下:

  • svn : /var/lib/svn/repository (通常我喜歡多設一個 repository, 不然 /var/lib/svn 就夠了)
  • trac: /var/lib/trac 

# subversion + apache2

  1. apt-get install libapache2-svn apache2 subversion
  2. mkdir /var/lib/svn/repository
  3. svnadmin create /var/lib/svn/repository/PROJECT_NAME
  4. find /var/lib/svn/repository/PROJECT_NAME -type f -exec chmod 660 {} \;
  5. find /var/lib/svn/repository/PROJECT_NAME -type d -exec chmod 2770 {} \;
  6. chown -R root.www-data /var/lib/svn/repository/PROJECT_NAME
  7. vim /etc/apache2/mods-available/dav_svn.conf

<Location /svn>
DAV svn
SVNParentPath /var/lib/svn/repository
AuthType Basic
AuthName "Subversion Repository"
AuthUserFile /etc/apache2/dav_svn.passwd
AuthzSVNAccessFile /etc/apache2/dav_svn.authz
Require valid-user
</Location>

vim /etc/apache2/dav_svn.authz

[PROJECT_NAME:/]
* =
ACCOUNT1 = r
ACCOUNT2 = rw

# 建帳號

  • /usr/bin/htpasswd -c /etc/apache2/dav_svn.passwd ACCOUNT1
  • /usr/bin/htpasswd /etc/apache2/dav_svn.passwd ACCOUNT2

# test & import

  1. cd /tmp/
  2. svn co http://DOMAIN_NAME/svn/PROJECT_NAME/
  3. cd PROJECT_NAME
  4. mkdir branches tags trunk
  5. svn import http://DOMAIN_NAME/svn/PROJECT_NAME/ -m 'inintial import'
  6. # subversion finish.

# trac

  1. apt-get install trac libapache2-mod-python
  2. mkdir -p /var/lib/trac/
  3. trac-admin /var/lib/trac/PROJECT_NAME initenv

  My Project => PROJECT_NAME
  /path/to/repos => /var/lib/svn/repository/PROJECT_NAME

vim /var/lib/trac/PROJECT_NAME/conf/trac.ini

default_charset = iso-8859-15 => default_charset = utf-8

# test: tracd --port 8000 /var/lib/trac/PROJECT_NAME

# trac-admin 新增帳號這些動作, 會記在 db/trac.db 裡面, 由此處可統一控管所有帳號權限, 和是否可以連進來等.

  • trac-admin /var/lib/trac/PROJECT_NAME permission remove anonymous '*'
  • # TRAC_ADMIN(需要全部大寫, 設此帳號為管理者, 此 TRAC_ADMIN 不是可代換變數 )
  • trac-admin /var/lib/trac/PROJECT_NAME permission add ACCOUNT TRAC_ADMIN

vim /etc/apache2/sites-available/PROJECT_NAME.conf

<VirtualHost *>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/lib/trac
    ServerName VIRTUAL_HOST_NAME
    ErrorLog /var/log/apache2/trac-error.log
    CustomLog /var/log/apache2/trac-access.log combined

    SetHandler mod_python
    PythonHandler trac.web.modpython_frontend
    PythonOption TracEnv "/var/lib/trac/PROJECT_NAME"
    PythonOption TracUriRoot "/trac/PROJECT_NAME"
    <LocationMatch "/trac/[^/]+/login">
      AuthType Basic
      AuthName "Trac"
      # 跟 svn account 同一個檔即可.
      AuthUserFile /etc/apache2/dav_svn.passwd
      Require valid-user
    </LocationMatch>
</VirtualHost>

再 ln -s /etc/apache2/sites-available/PROJECT_NAME.conf /etc/apache2/sites-enabled/PROJECT_NAME.conf

# test => Virtual Host & Trac

  • http://VIRTUAL_HOST_NAME/trac/PROJECT_NAME

賀~ 到此就建置完成囉~


再來的是, 如果還要再加上其它 trac 跟 svn 的時後該如何加上去, 只要下述步驟即可:

# build new PROJECT_NAME in svn

  1. svnadmin create /var/lib/svn/repository/PROJECT_NAME
  2. find /var/lib/svn/repository/PROJECT_NAME -type f -exec chmod 660 {} \;
  3. find /var/lib/svn/repository/PROJECT_NAME -type d -exec chmod 2770 {} \;
  4. chown -R root.www-data /var/lib/svn/repository/PROJECT_NAME
  5. vim /etc/apache2/dav_svn.authz # add project & account permission

[PROJECT_NAME:/]
* =
ACCOUNT1 = r
ACCOUNT2 = rw

# 建立帳號 

  • # htpasswd 在這次記得千萬不要 -c (會蓋掉之前的所有紀錄, 變成只有此新帳號的檔案 XD)
  • /usr/bin/htpasswd -c /etc/apache2/dav_svn.passwd ACCOUNT1
  • /usr/bin/htpasswd /etc/apache2/dav_svn.passwd ACCOUNT2

# test & initial import

  • cd /tmp/
  • svn co http://DOMAIN_NAME/svn/PROJECT_NAME/
  • cd PROJECT_NAME
  • mkdir branches tags trunk
  • svn import http://DOMAIN_NAME/svn/PROJECT_NAME/ -m 'inintial import'
  • # subversion finish.

# trac

  • trac-admin /var/lib/trac/PROJECT_NAME initenv

My Project => PROJECT_NAME
/path/to/repos => /var/lib/svn/repository/PROJECT_NAME

  • vim /var/lib/trac/PROJECT_NAME/conf/trac.ini

default_charset = iso-8859-15 => default_charset = utf-8

  • chown www-data:www-data -R /var/lib/trac/PROJECT_NAME
  • trac-admin /var/lib/trac/PROJECT_NAME permission remove anonymous '*'
  • 注意: TRAC_ADMIN(需要全部大寫, 設此帳號為管理者, 此 TRAC_ADMIN 不是可代換變數)
  • trac-admin /var/lib/trac/PROJECT_NAME permission add ACCOUNT TRAC_ADMIN  
  • vim /etc/apache2/sites-enabled/PROJECT_NAME.conf

<VirtualHost *>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/lib/trac # 這個不重要
    ServerName VIRTUAL_HOST_NAME
    ErrorLog /var/log/apache2/trac-error.log
    CustomLog /var/log/apache2/trac-access.log combined

    SetHandler mod_python
    PythonHandler trac.web.modpython_frontend
    PythonOption TracEnv "/var/lib/trac/PROJECT_NAME"
    PythonOption TracUriRoot "/trac/PROJECT_NAME"
    <LocationMatch "/trac/[^/]+/login">
      AuthType Basic
      AuthName "Trac"
      # 跟 svn account 同一個檔即可.
      AuthUserFile /etc/apache2/dav_svn.passwd
      Require valid-user
    </LocationMatch>
</VirtualHost>

# add trac new account

  • /usr/bin/htpasswd /etc/apache2/dav_svn.passwd ACCOUNT
  • trac-admin /var/lib/trac/PROJECT_NAME permission add ACCOUNT TRAC_ADMIN

# 完成, SVN & TRAC URL

  • svn co http://VIRTUAL_HOST_NAME/svn/PROJECT_NAME
  • trac http://VIRTUAL_HOST_NAME/trac/PROJECT_NAME/

要備份的話, 直接備份下面三個目錄即可:

  • /etc/apache2/conf.d
  • /var/lib/svn
  • /var/lib/trac

總結快速開帳號流程:

  1. /usr/bin/htpasswd /etc/apache2/dav_svn.passwd ACCOUNT
  2. trac-admin /var/lib/trac/PROJECT_NAME permission add ACCOUNT TRAC_ADMIN
  3. vim /etc/apache2/dav_svn.authz # 把帳號加入

關於 Tsung

對新奇的事物都很有興趣, 喜歡簡單的東西, 過簡單的生活.
本篇發表於 My_Note-Unix。將永久鏈結加入書籤。

Debian Linux: Apache2(Virtual Host) + Subversion(SVN) + Trac 快速建置 有 10 則回應

  1. water 說道:

    你好~真得好高興看到這篇文章,寫的真得很好!我使用Trac + subversion 三年了!最近剛好有朋友請我幫忙架設一次,幸好有看到你這篇文章,讓我的心應手,在這過程中我發現一個小問題,當我按步驟操作增加第二個trac project的時候,發現只有一個trac會動.當我在 /etc/apache2/sites-enabled 下同時有兩個 Project1_Name.conf Project2_Name.conf時,只會有其中一個可以用 web-browser可以使用,如果要用另為一個,那我必須 rm 另外一個檔案才可以使用,可否有其他人跟我有一樣的問題?
    謝謝~

  2. Tsung 說道:

    我寫的就是要同時讓多個 trac + svn 架在同一台機器上的囉~ 😛
    我想你是不是 Virtual host 沒設好?
    你可以試試看, 一個跑 Virtual host, 另一個跑 tracd --port 8000 的看看, 先確定是 trac 設定問題, 還是 Virtual host 設定問題?

  3. imsto 說道:

    您好:
    我用您的方法架设了一个svn+一个trac,采用直接存取的方式,ok;采用virtual host时,报404错误。但是在tracd --port 8000的时候又是可以访问的。不知这是为何?谢谢:)

  4. Tsung 說道:

    您要不要參考一下 http://plog.longwin.com.tw/my_note-unix/2007/07/03/debian_trac_svn_virtualhost_2007 這篇.
    有不用 Virtual 的設法, 先設設看, 是不是 module 沒有 load 進來.
    不過我猜想應該是 Virtual host 沒設對(您可以參考最下面我回答別人問題的留言, 有 Virtual Host 該注意的一些事項 🙂

  5. imsto 說道:

    您好!
    多trac的问题我已经解决,谢谢你的指点。
    现将我遇到的问题写出来跟大家分享。我的问题跟water类似,当有两个.conf时,只能认到后创建的那个。后来参考了Water的方法,将多个Proj写在了一个.conf中。
    当我设virtual host时,则报错:files doesn't exists:/var/www/trac, 实际我的trac是安装在 /var/lib/ 目录下。我也确信我的mod_python已经加载。这个一直不知道如何解决。
    另:想请教两个问题:
    1. 设置virtual host 的目的是什么?
    2. 如果我想从网页中查看Development Statistics for Proj(SVN report)。应该如何设置,需要安装什么包?
    谢谢!

  6. Tsung 說道:

    1. 設 Virtual host 的目的主要在於, 你如果要在同一台 trac 上管多個專案(或者說弄多個 trac), 那就需要設定 Virtual host.(不然目錄結構會一團亂).
    2. 我不太懂您這個的意思, 如果要看 Proj 的狀態, 主要就是用 trac 去訂進度, 然後就可以看到專案目前的狀態.(只要裝好 trac 就可以了)

  7. 訪客 說道:

    谢谢您的解答。
    第二个问题我指的是StatSVN,(http://svn.statsvn.org/statsvnwiki/index.php/Main_Page)。一个开发统计工具,可以从Subversion版本库中取得信息,然后生成描述项目开发的各种表格和图表。如代码行数的时间线;针对每个开发者的代码行数;开发者的活跃程度;开发者最近所提交的;文件数量等等。

  8. Tsung 說道:

    StatSVN 我沒用過耶, 這個或許以後有機會研究看看.
    最近在研究其它東西說 XD

  9. camel 說道:

    我最近在debian6上搭建:svn apache trac环境。
    我基本是参照你面的办法做的;基本配置如下:
    [Demo:/]
    * =
    test = rw

    DAV svn
    SVNParentPath /var/lib/svn/repository
    AuthType Basic
    AuthName "Subversion Repository"
    AuthUserFile /etc/apache2/dav_svn.passwd
    AuthzSVNAccessFile /etc/apache2/dav_svn.authz
    Require valid-user

    目录权限我也改了:chmod 775 /var/lib/svn/repository/

    结果是这样:
    认证领域: Subversion Repository
    用户名: test
    “test”的密码:
    svn: 服务器发送了意外的返回值(403 Forbidden),在响应 “OPTIONS” 的请求 “http://192.168.0.144/svn/repository/Demo” 中
    可以提示一下可能是为什么吗?谢谢

  10. camel 說道:

    谢谢,现在我自己解决了。你这篇blog我受益颇多,谢谢

發表迴響