Debian Linux 架設 Trac + Virtual Host

Trac + SVN + Virtual host 設定一起搞定, 先寫比較清楚的版本, 之後再來改寫簡易版.

首先 Subversion + HTTP(apache2) 存取, 請見: Debian Linux 架設 Subversion(SVN)

假設現在已經可以由 http://DOMAIN_NAME/svn/PROJECT_NAME/ 做 ci/co 等動作, 且 svn 目錄建在 /home/svn/repository.

  1. 安裝 trac: apt-get install trac libapache2-mod-python(有一堆相關的會自動幫你裝上), 預設會裝: trac python python-central python-clearsilver python-minimal python-pysqlite2 python-subversion python-support python2.4  python2.4-minimal 等 package.
  2. mkdir -p /home/trac/PROJECT_NAME
  3. trac 初始化設定, 安裝於 /home/trac: trac-admin /home/trac/PROJECT_NAME initenv, 會問
    • Project Name => PROJECT_NAME
    • Path to repository => /home/svn/repository/PROJECT_NAME
    • 其它都 enter 按過即可.

於是就會產生:

  • /home/trac/PROJECT_NAME/conf/trac.ini # trac 設定檔, 如果剛剛沒設好的, 可以直接設此檔即可. 

設定 /home/trac/PROJECT_NAME/conf/trac.ini 語系:

  1. vim /home/trac/PROJECT_NAME/conf/trac.ini
  2. default_charset = iso-8859-15 => default_charset = utf-8

修改權限並測試看看之前設定是否都正確:

  1. chown www-data:www-data -R /home/trac/PROJECT_NAME
  2. sudo -u www-data tracd --port 8000 /home/trac/PROJECT_NAME # 執行啟動應該就可以用 http://DOMAIN_NAME:8000/ 存取(如果這個不能存取, 有可能是設定設錯了(注意 repository path 設定), 此處一定要先可以存取, 再做整合 apache 的動作)

設定 apache, 讓 http://DOMAIN_NAME/trac/PROJECT_NAME 可以直接存取.

  • 直接存取, 不設 Virtual Host: vim /etc/apache2/conf.d/PROJECT_NAME.conf

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

  • 這樣子 /etc/init.d/apache2 restart 應該就可以 http://DOMAIN_NAME/trac 連到了.
  • 於 VirtualHost 情況下設定檔如下: vim /etc/apache2/sites-enbaled/PROJECT_NAME.conf

    <VirtualHost *>
        ServerAdmin webmaster@localhost
        DocumentRoot /home/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 "/home/trac/PROJECT_NAME"
        PythonOption TracUriRoot "/trac/PROJECT_NAME" # 注意: 此處是 URI
        <LocationMatch "/trac/[^/]+/login">
          AuthType Basic
          AuthName "Trac"
          # 跟 svn account 同一個檔即可. 
          AuthUserFile /etc/apache2/dav_svn.passwd
          Require valid-user
        </LocationMatch>
    </VirtualHost>

  • 正規方法應該是先寫在 /etc/apache2/sites-available/PROJECT_NAME.conf
  • 再 ln -s /etc/apache2/sites-available/PROJECT_NAME.conf /etc/apache2/sites-enabled/PROJECT_NAME.conf 會比較好.
  • (如果 Virtual host 設在 conf.d 裡面, 就直接寫這個檔案即可 /etc/apache2/conf.d/PROJECT_NAME.conf)
  • 這樣子 /etc/init.d/apache2 restart 應該就可以 http://VIRTUAL_HOST_NAME/trac/PROJECT_NAME 連到了.(主要是要一台機器控管多個 Trac)

往後如果 trac 有升級(apt 升級), 都執行 trac-admin /home/trac/PROJECT_NAME upgrade 來升級即可.

附註: (其它功能設定)

Trac 有任何修改都寄信出來: 

  1. vim /home/trac/PROJECT_NAME/conf/trac.ini
  2. 修改 smtp_always_bcc = EMAIL, 填上 Email, 並把 smtp 該設的也設一設即可.

Trac 安全權限設定:

  1. trac-admin /home/trac/PROJECT_NAME permission
  2. trac-admin /home/trac/PROJECT_NAME permission list # 看有哪些權限能開
  3. trac-admin /home/trac/PROJECT_NAME permission remove anonymous '*'  # 這樣子預設沒登入就不能進入 Trac
  4. trac-admin /home/trac/PROJECT_NAME permission add USERNAME TRAC_ADMIN
  5. trac-admin /home/trac/PROJECT_NAME permission list # 可以看到 USERNAME 設為 TRAC_ADMIN 的訊息
  6. chown -R www-data:www-data /home/trac/PROJECT_NAME

參考文件:

作者: Tsung

對新奇的事物都很有興趣, 喜歡簡單的東西, 過簡單的生活.

在〈Debian Linux 架設 Trac + Virtual Host〉中有 15 則留言

  1. Dear Tsung,
    長久以來我一直想要安裝一個長久以來我一直想要安裝一個 issue tracking system. 你的文章對我很有幫助! 謝啦!! 並且在我的 blog 中有引用一些你的文章!!
    Black

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

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

  4. 謝謝給我的參考~
    我用tracd --port 8000 /home/trac/PROJECT_NAME 可以連上
    但在virtual host是不可以的我看trac-error.log的訊息
    發現 TracUriRoot 已經是上一個project 的Path
    for example:
    proj1
    proj2
    TracUriRoot ==> /trac/proj1
    但當我用IE連進去連不上去
    Check error log => PythonHandler trac.web.modpython_fronted: ValueError: TracUriRoot set to /trac/proj1 but request URL is /favicon.ico
    如果你有空幫我看ㄧ下這問題~謝謝

  5. 我猜是您的 mod_python 沒裝, 您能不能試試看, 不用 Virtual host, 直接於 Apache 上設定, 上面有寫怎麼設定, 試試看?
    (我猜, 不是沒裝就是 apache mod_python 的 module 沒載入?)

  6. 謝謝給我得建議~
    我試過不用Virtual host,直接在apache上設定
    狀況一樣,我已經裝了兩台了,用最新得debian distrubtion
    我確定 mod_python 有裝, 應該也有loading
    以下是出狀況的訊息:
    Internal Server Error
    More information about this error may be available in the server error log.
    --------------------------------------------------------------------------------
    Apache/2.2.3 (Debian) DAV/2 SVN/1.4.2 mod_python/3.2.10 Python/2.4.4 Server at 192.168.241.43 Port 80
    我查了很久,覺得好像是TracUriRoot這個問題~
    佔用你很多時間,謝謝你熱心的回應~

  7. 謝謝你多方面的提點~
    讓我在這方面有更多的認知
    最後我得解法是把兩個( proj1.conf & proj2.conf )合成一個檔案
    成為一個 project.conf
    我也找不出什麼問題,在/var/apache2/sites-enable/*.conf 好像除了default以外只能再跑一個*.conf
    所以我才把兩個合在一起,這樣才可以跑~不知道為什麼?
    我做了以下實驗:
    如果有兩個 m100.conf m300.conf 那只有m100.conf有效
    但如果我把 m300.conf 改成 m10.conf那就剩下兩個 (m10.conf, m100.conf)這時候只會跑前面那一個
    但是如果兩個檔案內容語法有錯再用 apache2 -k restart時都會有提醒
    我把我得實驗提供給大家參考,但我還很希望用你的方法~ 清楚明白!
    謝謝這幾天來得解惑~

  8. 謝謝你多方面的提點~
    讓我在這方面有更多的認知
    最後我得解法是把兩個合成一個檔案
    成為一個 project.conf
    我也找不出什麼問題,在*.conf 好像除了default以外只能再跑一個*.conf
    所以我才把兩個合在一起,這樣才可以跑~不知道為什麼?
    我做了以下實驗:
    如果有兩個 m100.conf m300.conf 那只有m100.conf有效
    但如果我把 m300.conf 改成 m10.conf那就剩下兩個 (m10.conf, m100.conf)這時候只會跑前面那一個
    我把我得實驗提供給大家參考,但我還很希望用你的方法~ 清楚明白!
    謝謝這幾天來得解惑~

  9. 應該不會這樣子耶, 有可能是兩個問題,
    1. 命名檔名的問題.
    /etc/apache2/sites-enabled/000-default, 預設會先讀這個檔案, 然後再去讀你的其它設定檔, 如果你的檔明是設 0000, 就會先讀到你的, 就會有問題.
    2. conf 檔的問題
    你自己寫的 conf 檔裡面, 一定不能有 "NameVirtualHost *" 這行(這行 default 會幫你 load 進去了).
    試試看吧, 很感謝您的分享 🙂

Tsung 發表迴響取消回覆

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料