debian squeeze で redmine を動かしてみた

ニュースが気になってあんまり集中できませんでしたが。。

概要

一般ユーザ権限で動かしたかったので、ちょっと複雑なことをしています。また先述の通りあんまり集中していないので抜け漏れが多数あると思われます。さらに、私は rails アプリを初めて触ったので変なことをしてるところが多分にあると思われます。参照する方はご注意を。

そんなゴミ日記公開すんなって話ですが、公開します。

基本的に aptitude でインストール可能なパッケージだけで動かしています。ただし、自分でコンパイルしてるパッケージも既にいくつも入っているのですべてがそうである確証はありません。

環境

  • OS: Squeeze
  • Database: postgres-8.4 (port 15432)
  • redmine directory: ~/public_html/redmine
  • postgres data: ~/redmine/postgres/
  • Ruby の http server: port 8000
  • Rails 2.x 系

いろいろインストール

設定に先立って、必要なものや必要な気がしたものを適当に apt でインストール

aptitude install redmine-pgsql
aptitude install postgresql-8.4
aptitude install redmine
aptitude install libapache2-mod-passenger
aptitude install apache2-threaded-dev

新たにインストールしたのはこれぐらいです。しかし、元から入っていたパッケージもあるので、これで必要十分かはわかりません。

redmine

インストール先ディレクトリは ~/public_html/redmine

apache で動かそうとしていたのですけど、勝手が分からず苦戦しすぎて今回は断念。
この辺が原因かなぁ。
Passengerで運用時、リポジトリブラウザで拡張子が.cgi、.PHPのファイル閲覧がエラー(404)になる — Redmine.JP

/usr/share/redmine/public さえ公開すればいいらしいのですが、/usr/share の下なんて公開するのは気持ちが悪い。それに一般ユーザ権限だと log 書き込めないし。
で、色々試行錯誤した結果、以下のようなコマンドで home ディレクトリにコピーしてみました。*1

cp -prs /usr/share/redmine/ ~/public_html
database.yml
production:
  adapter: postgresql
  database: redmine
  host: localhost
  port: 15432
  username: redmine
  password: "*adminpass*"
  encoding: "utf-8"
  schema_search_path: "public"


*** session.yml

~/public_html/redmine/config/session.yml に配置するファイルをコピー。これは時間がなかったための過渡的対応。その内、作り直します。

2011/3/22 redmine-server スクリプトにより生成するようにした。

postgres-8.4

postgres は新たにプロセスを生成してこちらもユーザ権限で動かしてあります。data を置くディレクトリは

postgres 関連のファイルはここに作りました。

~/redmine/postgres/

data, etc, run ディレクトリを含んでいます。

起動

mypgsql

Postgres プロセスを起動するためのスクリプトを書きました。
data ディレクトリを初期化してユーザ、データベースを作成します。

g_datadir=~/redmine/postgres/data
g_confdir=~/redmine/postgres/etc
g_logfile=~/.log/redmine-postgres.log
g_password="*adminpass*"

if [ $(ls "${g_datadir}" | wc -l) -eq 0 ] ; then
	while [ -z "${g_passfile}" ] || [ -f "${g_passfile}" ] ; do
		g_passfile=/tmp/mypgsql-${RANDOM}
	done
	echo -n ${g_password} > "${g_passfile}"
	/usr/lib/postgresql/8.4/bin/initdb -U admin -A md5 --pwfile \
            "${g_passfile}" -E utf-8 -D "${g_datadir}"
	rm -f "${g_passfile}"

	cp -pr "${g_confdir%/}"/*.conf "${g_confdir%/}"/environment \
             "${g_datadir}"

	is_initialize=1
fi

/usr/lib/postgresql/8.4/bin/pg_ctl -w -D "${g_datadir}" -l "${g_logfile}" start

if [ -n "${is_initialize}" ] ; then
	export PGPASSWORD="${g_password}"
	/usr/lib/postgresql/8.4/bin/createuser redmine -U admin -h localhost \
                -p 15432 --no-inherit --no-superuser --no-createdb \
                --no-createrole --login -P
	/usr/lib/postgresql/8.4/bin/createdb redmine -U admin -E utf-8 \
                 -O redmine -h localhost -p 15432
fi
redmine-server

上述の通り、apache 配下で使うことに挫折したので ruby で書いてあるらしい http サーバで起動します。そのためのスクリプトredmine-server という名前でスクリプトにまとめました。

#!/bin/bash

export RAILS_ROOT=~/public_html/redmine
export RAILS_ETC=${RAILS_ROOT%/}/config
export RAILS_CACHE=${RAILS_ROOT%/}/cache
export RAILS_LOG=${RAILS_ROOT%/}/log
export RAILS_VAR=${RAILS_ROOT%/}/var 
export RAILS_ENV=production

export REDMINE_LANG="ja"

cd ${RAILS_ROOT}

rake -f Rakefile generate_session_store || exit 1
rake -f Rakefile db:migrate || exit 1
rake -f Rakefile redmine:load_default_data || exit 1

ruby script/server -e production -p 8000 -b "*" -d

http://**hostname**:8000/

でアクセスできます。

まとめ

redmine について調べてみると、いろいろな構築の仕方をしている人がいるので、情報が把握しづらかったです。多分 rails のことを知っている人ならそれほどの難易度でもないのでしょうが、私にとっては辛かったです。
というわけで、ユーザ権限で動かすための導入はそれなりに難易度が高そうです。安易な気持ちでは止めておきましょう。

*1:バージョンが上がったときに、インストールするファイルが増えたら困るな