FreeBSD8.1+Redmine(BTS)+Rails+thin+lighttpdをインストール
はじめに
FreeBSD8.1を使いバグトラッキングシステムの1つであるRedmineをインストールします。 Redmineはソフトウェア開発などITプロジェクトでの利用に最も適したwebアプリケーションで、それ以外の業務においてもタスクとその進捗の管理、情報共有に活用することができます。
今回の構成はフロントにlighttpdでリクエストを受け付け、バックエンドで動いているthinサーバ(rubyで書かれたwebサーバ)でrails(webアプリフレームワーク)を使って動くRedmine(localhost:9000)にリクエストをリバースproxyさる構成をとります。この辺りがややこしいのですがthinサーバの上にrailsが載りその上にredmineが載ってるようなイメージです?またデータベースにはsqlite3を利用します。
install
ports を利用してinstall
※依存関係によりその他のportsもろもろインストールされます。
# portinstall lighttpd # portinstall redmine # portinstall sqlite3
ruby関係のアプリはgemを使いインストールします
# gem install rails # gem install rack # gem install thin
sqlite3のruby用ドライバを入れます
# gem install sqlite3-ruby
redmineのdb等のconfig
/usr/local/www/redmine/config/database.yml
production: adapter: sqlite3 database: db/redmine.db
redmine初期化を行う
# cd /usr/local/www/redmine # RAILS_ENV=production rake config/initializers/session_store.rb # RAILS_ENV=production rake db:migrate # RAILS_ENV=production rake redmine:load_default_data
組み込みのウェブサーバーwebrickを使ってredmineの動作を確認
ruby script/server webrick -e production
ブラウザからhttp://127.0.0.1:3000/でアクセスできればテスト成功です
thinで利用するディレクトリ作成
# mkdir /usr/local/www/redmine/thin/ # chown -R www:www /usr/local/www/redmine/ # chmod a+rwx /usr/local/www/redmine/tmp/pids/
redmineをthinサーバ上で動かすためのconfig
- 主な設定内容
- 動作ユーザ:www
- ポート番号:9000
- 起動サーバ数:4
/usr/local/www/redmine/thin/redmine.yml
--- group: www pid: tmp/pids/thin.pid wait: 30 timeout: 30 log: log/thin.log max_conns: 1024 require: [] environment: production max_persistent_conns: 512 servers: 4 user: www daemonize: true port: 9000 chdir: /usr/local/www/redmine
thinサーバ起動
# thin -C thin/redmine.yml start
thinで動くアプリケーションサーバ(redmineが載っている)は
- localhost:9000
- localhost:9001
- localhost:9002
- localhost:9003
の4つのサーバでリクエストを待ちます。
フロントで動くlighttpdサーバの設定
lightyの設定でのキモはredmine.example.orgでアクセスを一手にうけつけ、 redmineへのリクエストをロードバランスしlocalhost上で動いている各4つのthinサーバにリクエストを振り分ける設定をします。
/usr/local/etc/lighttpd.conf
# mod_proxyを有効にする server.modules = ( 色々なモジュール~省略 "mod_proxy", ) # バーチャルホストの設定redmine.example.orgのドメインにアクセスすると # バックエンドで動くredmineアプリlocalhost:9000-9003に # リバースプロクシしてredmineにアクセスできるようにします $HTTP["host"] == "redmine.example.org" { $HTTP["url"] !~ "^/(stylesheets|javascripts|[^.]+\.html|[^.]+\.htm|[^.]+\.css|[^.]+\.xml|robots\.txt)" { server.max-keep-alive-requests = 0 setenv.add-request-header = ("X-Forwarded-Host" => "redmine.example.org" ) proxy.server = ("" => ( ("host" => "127.0.0.1", "port" => "9000" ), ("host" => "127.0.0.1", "port" => "9001" ), ("host" => "127.0.0.1", "port" => "9002" ), ("host" => "127.0.0.1", "port" => "9003" ), ) ) } server.document-root = "/usr/local/www/redmine/public/" alias.url += ( "/javascripts/" => "/usr/local/www/redmine/public/javascripts", "/stylesheets/" => "/usr/local/www/redmine/public/stylesheets", ) }
参考)thinサーバを起動するスクリプト
#!/bin/sh # $FreeBSD: ports/www/redmine/files/redmine.in,v 1.3 2010/03/16 02:02:52 dougb Exp $ # PROVIDE: redmine # REQUIRE: LOGIN # KEYWORD: shutdown # Add the following line to /etc/rc.conf[.local] to enable redmine # # redmine_enable (bool): Set to "NO" by default. # Set it to "YES" to enable redmine. # redmine_flags (str): Custom additional arguments to be passed # to redmine. . /etc/rc.subr name="redmine" rcvar=`set_rcvar` command=ruby18 pidfile="/usr/local/www/redmine/tmp/pids/thin.pid" load_rc_config $name # set defaults : ${redmine_enable="NO"} : ${redmine_flags=""} command_args="-C /usr/local/www/redmine/thin/redmine.yml" start_cmd="/usr/local/bin/thin ${command_args} ${redmine_flags} start" run_rc_command "$1"
created: