Hatena::ブログ(Diary)

taiyoh独言

技術ネタや音楽ネタなんかを書き散らしていくところ。
(技術ネタは"taiyoh's memorandum"で書くことにしました)

2007-10-14

Apache2 + Subversion by mod_proxy(lighttpd) & trac on lighttpd

02:54 | Apache2 + Subversion by mod_proxy(lighttpd) & trac on lighttpdを含むブックマーク

 バンド用システムをリニューアルすることにしたので、デザインのできるメンバーと組むことに。

 実はリポジトリ周りは殆どやったことがなかったので、いい機会だと思い、lightyのmod_proxy経由でSubversionにアクセスできるようにして、ついでにtracもlightyで立ち上げた。あらかじめ言っておくと、目新しいことは何も言ってないですし、このサーバは公開してないです。

 サーバはUbuntuなので、どれもaptでインストール。

# aptitude install lighttpd apache2 trac
# lighty-enable-mod auth cgi fastcgi proxy

 Subversionのレポジトリ作成とtracのプロジェクトフォルダの作成は略。ここでは便宜上、svnは「/path/to/repo」、tracは「/path/to/proj」に作成したことに。URLの構成は、個人的な好みにより「http://(ホスト)/svn」「http://(ホスト)/trac」でいく。

 Apacheは、単純にSubversionを動かすためだけにあるので、VirtualHostを使って、ポートは適当に8080を指定して立ち上げる。このときのapache2.confには以下を追加。

NameVirtualHost *:8080
<VirtualHost *:8080>
        # 実際にはServerNameとかDocumentRootは使わないけど
        ServerName (ホスト名)
        DocumentRoot /path/to/svn_htdocs

        <Location /svn>
                DAV svn
                SVNPath /path/to/repo
                AuthType Basic
                AuthName "**** repository"
                AuthUserFile /path/to/repo/conf/users
                Require valid-user
                Order allow,deny
                Allow from all
        </Location>
</VirtualHost>

 また、メインのhttpサーバはlighttpdで、proxy処理もここで行う。lighttpd.confには

$HTTP["host"] == "(ホスト)" {
        server.document-root = "/path/to/htdocs"
        server.errorlog      = "/var/log/lighttpd/sample_error.log"
        ## "/svn"でのアクセスがあったら、裏のApacheプロセスに投げる
        proxy.server = (
                "/svn" => (("host" => "127.0.0.1", "port" => 8080))
        )
        ## "/trac" の処理は全てここ
        $HTTP["url"] =~ "^/trac" {
                # 認証関係
                auth.backend.htpasswd.userfile = "/path/to/proj/trac.htpasswd"
                auth.require = ("/" => (
                        "method" => "basic",
                        "realm" => "**** project",
                        "require" => "valid-user"
                ))
                #tracの共通ファイルを指定
                alias.url            = (
                        "/trac/chrome/common/" => "/usr/share/trac/htdocs/",
                )
                # tracを動かすためのfcgiの設定
                fastcgi.server = (
                        "/trac" => ( "trac" => (
                                "socket"          => "/tmp/trac-fastcgi.socket",
                                "bin-path"        => "/usr/share/trac/cgi-bin/trac.fcgi",
                                "check-local"     => "disable",
                                "bin-environment" => ( "TRAC_ENV" => "/path/to/proj" ),
                                "min-procs"       => 1,
                                "max_procs"       => 3,
                        ))
                )
        }
}

 を記述した。

 あと、/etc/lighttpd/conf-enable/10-fcgi.confに以下を追加して、.fcgiファイルを有効にする。

static-file.exclude-extensions = ( ".fcgi" )

 tracとsvnのBasic認証ファイル(/path/to/repo/conf/users、/path/to/proj/trac.htpasswd)は基本共通なので、どっちかを作成したらもう一方のファイルはln -sで。

 lightyにしてもapacheにしても、起動ユーザ名を変更するとあちこちで支障が出る確率が高いので、

# chown www-data -R /path/to/repo
# chown www-data -R /path/to/proj

 これで、サーバの起動ユーザでリポジトリやtrac wikiの読み書きができる。

 ということで、話題的には二番煎じも甚だしいですが、半日もかからずに一気に立ち上げることができた感動のあまり、ついエントリを立ててしまった次第です。 

 ・参考にしたサイト(ありがとうございます)

 →HowToSetupTrac - Lighttpd - lighty labs

 →403 error - Forbidden

 →Trac をインストールしてみたよ

 →Service Unavailable

トラックバック - http://d.hatena.ne.jp/sun-basix/20071014/1192384449
Connection: close