2009年07月09日
概要
プロジェクトおよび顧客の数だけ増えて行きそうだったので、
今後の為に、量産しやすい仕組みを作ってみた。
- 「http://$(案件名).redmine.example.jp/」でアクセスする事を想定
- 案件名指定でredmineを追加可能にする
作業環境
- Debian GNU/Linux 5.0.2
- apache2-mpm-prefork 2.2.9-10+lenny3
- mysql-server 5.0.51a-24+lenny1
- redmine 0.8-stable
- passenger 2.2.4
作業内容
■インスタンス作成
▼domU作成
$ sudo xen-create-image --ip=192.0.2.41 --gateway=192.0.2.1 --netmask=255.255.255.0 --hostname=redmine $ sudo xm create -c /etc/xen/domains/redmine.cfg
▼rootパスワード変更
# passwd
▼作業アカウント作成
# groupadd redmine # useradd -d /home/redmine -s /bin/bash -m -g redmine redmine # passwd redmine # exit
一旦ログアウトし、PuTTY等を使い、redmineアカウントでSSH接続
■MySQL設定
▼文字コードをutf8にする
$ cd /etc/mysql/ $ sudo cp -pi my.cnf my.cnf.0 $ diff my.cnf.0 my.cnf 21a22 > default-character-set = utf8 42c43,45 < language = /usr/share/mysql/english --- > #language = /usr/share/mysql/english > language = /usr/share/mysql/japanese > default-character-set = utf8 $ sudo /etc/init.d/mysql restart
■passenger環境構築
▼環境構築時に必要とされるパッケージをインストール
$ sudo apt-get install apache2-mpm-prefork mysql-server mysql-client dnsmasq ruby rdoc irb ri $ sudo apt-get install apache2-prefork-dev ruby-dev make g++ libopenssl-ruby subversion $ cd /tmp $ wget http://ftp.us.debian.org/debian/pool/main/libg/libgems-ruby/rubygems1.8_1.3.4-1_all.deb $ wget http://ftp.us.debian.org/debian/pool/main/libg/libgems-ruby/rubygems_1.3.4-1_all.deb $ suod dpkg -i *.deb
2009/07/07時点では、rubygems関連パッケージのバージョンは1.3.4-1。必要に応じて変更。
▼ユーザー共通環境変数設定
$ sudo vi /etc/environment $ diff /tmp/environment /etc/environment 0a1,2 > PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games" > LANG="en_US.UTF-8"
▼railsをインストール(RedMine-0.8はrails-2.1.2に依存)
$ sudo GEM_HOME=/usr/local/gems gem install rails --no-ri --no-rdoc --version=2.1.2
▼passengerをインストール
$ sudo GEM_HOME=/usr/local/gems gem install passenger --no-ri --no-rdoc
▼passengerをビルド
$ cd /usr/local/gems/gems/passenger-2.2.4/; pwd /usr/local/gems/gems/passenger-2.2.4 $ sudo GEM_HOME=/usr/local/gems ./bin/passenger-install-apache2-module
▼apache2用設定
$ sudo vi /etc/apache2/mods-available/passenger.load
LoadModule passenger_module /usr/local/gems/gems/passenger-2.2.4/ext/apache2/mod_passenger.so PassengerRoot /usr/local/gems/gems/passenger-2.2.4 PassengerRuby /usr/local/bin/passenger_ruby.sh
▼passenger用ラッパースクリプト作成
$ sudo vi /usr/local/bin/passenger_ruby.sh
#!/bin/sh . /etc/environment export RUBYLIB GEM_HOME exec /usr/bin/ruby $@
$ sudo chmod 755 /usr/local/bin/passenger_ruby.sh
▼passengerモジュールを読み込み対象に追加
$ sudo /usr/sbin/a2enmod passenger
▼mod_rewriteを使うのでロード対象モジュールに追加
$ sudo /usr/sbin/a2enmod rewrite
▼apache2を再起動
$ sudo /etc/init.d/apache2 force-reload
■Redmineの設定
▼redmine用ディレクトリ準備
$ cd /home/redmine $ mkdir etc $ mkdir etc/apache2 $ mkdir etc/redmine $ mkdir lib
▼redmineのスケルトンを用意
$ cd /home/redmine/etc/redmine $ svn checkout http://redmine.rubyforge.org/svn/branches/0.8-stable skel
▼make-redmine.shを作成
$ cd /home/redmine $ vi make-redmine.sh
#!/bin/sh
#
# http://blog.hanosde.org/
#
GEM_HOME=/usr/local/gems
name=$1
prefix=/home/redmine
libdir=${prefix}/lib
etcdir=${prefix}/etc
domain=redmine.example.jp
fqdn=${name}.${domain}
echo fqdn:${fqdn}
# check
[ -z "${name}" ] && { exit 1; }
[ -d "${libdir}/${name}" ] && { exit 1; }
# rsync
rsync -au ${etcdir}/redmine/skel/ ${libdir}/${name}
# database.yml
cat <<EOS | tee ${libdir}/${name}/config/database.yml
production:
adapter: mysql
database: redmine_${name}
host: localhost
socket: /var/run/mysqld/mysqld.sock
username: root
password:
encoding: utf8
EOS
# create database
mysqladmin -uroot create redmine_${name}
# initialize redmine
cd ${libdir}/${name}
/usr/local/gems/bin/rake db:migrate RAILS_ENV=production
echo en | /usr/local/gems/bin/rake redmine:load_default_data RAILS_ENV=production
# apache virtualhost config
cat <<EOS | tee ${etcdir}/apache2/${fqdn}
<VirtualHost *:80>
ServerName ${fqdn}
DocumentRoot ${libdir}/${name}/public
ErrorLog /var/log/apache2/${fqdn}-error.log
CustomLog /var/log/apache2/${fqdn}-access.log combined
RailsEnv production
</VirtualHost>
EOS
# ensite virtualhost
sudo ln -s ${etcdir}/apache2/${fqdn} /etc/apache2/sites-available/
sudo /usr/sbin/a2ensite ${fqdn}
exit 0
▼実行権限付与
$ chmod +x make-redmine.sh
▼apache2リロード
$ sudo /etc/init.d/apache2 reload
■Redmine VirtuaHostを新規追加
▼例として、foo.redmine.example.jpを追加
$ cd /home/redmine $ ./make-redmine.sh foo $ sudo /etc/init.d/apache2 reload
その後は http://foo.redmine.example.jp/ へアクセスして表示を確認
あとがき
ひとまずredmineを使えるようにするまでの作業が面倒だった。
もしこの先に何かをやるならば、
Webインターフェースから追加する仕組み、アカウント発行などの仕組みを取り入れればいいだろう。
個人的には追加スクリプトを作る所までで要件を満たせるので終わりにしておく。