2009年07月09日

10分でredemineのホスティングサービスを作る

livedoorClipに登録 | このエントリーをはてなブックマークに追加 | del.icio.usに登録 | MM/Memoに登録

概要

プロジェクトおよび顧客の数だけ増えて行きそうだったので、 今後の為に、量産しやすい仕組みを作ってみた。

  • 「http://$(案件名).redmine.example.jp/」でアクセスする事を想定
  • 案件名指定でredmineを追加可能にする

作業環境

作業内容

■インスタンス作成

▼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インターフェースから追加する仕組み、アカウント発行などの仕組みを取り入れればいいだろう。

個人的には追加スクリプトを作る所までで要件を満たせるので終わりにしておく。



半袖 at 12:20│Comments(0)TrackBack(0)サーバ管理 

トラックバックURL

この記事にコメントする

名前:
URL:
  情報を記憶: 評価: 顔