ちょっと話題の記事

Amazon EC2上にRedmineをインストールしてみた

2014.06.25

渡辺です。

これでもかというくらいインストールが面倒なRedmineですが、AWS上でもやはり面倒でした。 というわけで、Redmine 2.5をCentOS 6.5にインストールする手順を参考に、Amazon Linux(Amazon Linux AMI 2014.03.1)にRedmineをインストールしてみたのでまとめておきます。 バージョンが変わるとそのままでは動かなくなると思いますが、参考にしてみてください。

概要

今回はスタンドアローンで運用できるように、MySQLも同じインスタンスにインストールします。

構成はこんな感じです。

Name Version Install
Apache 2.2.27 yum
Ruby 2.0 Pre Installed
Redmine 2.5.1 download
Passenger 4.0.45 gem
MySQL 5.5.1 yum

なるべく簡単にインストールしたいので、可能な限りyumやインストール済のソフトウェアを利用する方針です。

EC2のセットアップ

SSHとHTTP(s)を許可するセキュリティグループを設定し、EC2インスタンスを起動します。 インスタンスタイプはとりあえずm1.smallとしました。 必要に応じて後からスケールアップできるのはEC2の楽な所ですね。

起動したならば、SSHでログインし、ec2-userでセットアップします。

Apacheのセットアップ

Apacheをインストールします。

$ sudo yum install httpd

Apacheは後ほどPassengerと連携する設定を行うので、とりあえずこのまま進みましょう。

MySQLのセットアップ

今回はスタンドアローンで構成したいので、yumでインストールします。 デフォルトでインストールできるMySQL 5.5を利用しました。

$ sudo yum install mysql-server mysql-devel

インストールしたならば、/etc/my.cnfを編集し、文字コードを設定します。 [mysqld]character-set-server=utf8を、 [mysql]default-character-set=utf8を設定してください。

Railsのセットアップ時にMySQLが起動している必要があるので、ここで起動しておきます。

$ sudo service mysqld start
$ sudo chkconfig mysqld on

最後にRedmine用のデータベースと接続ユーザを作成しておきます。

$ mysql -uroot
mysql> create database db_redmine default character set utf8;
mysql> grant all on db_redmine.* to user_redmine@localhost identified by 'changeit';

必要に応じて、rootユーザのパスワード設定や匿名ユーザを無効にしてください。

Rubyのセットアップ

Amazon LinuxにはデフォルトでRuby2.0がインストールされているので、そのまま利用します。

$ ruby —v
ruby 2.0.0p451 (2014-02-24 revision 45167) [x86_64-linux]
$ gem -v
2.0.14

Redmineのセットアップ

Redmineをインストールしていきますが、はじめにgccなど必要なツール類をyumでインストールしておきましょう。

$ sudo yum groupinstall "Development Tools"
$ sudo yum --enablerepo=epel install ruby-devel mysql-devel ImageMagick ImageMagick-devel ipa-gothic-fonts

PDF化や画像化などの処理で利用するIPAフォントはepelリポジトリに含まれています。

bundlerのインストール

Redmineのセットアップに必要なbundlerをgemでインストールします。

$ gem install bundler --no-rdoc --no-ri
Fetching: bundler-1.6.3.gem (100%)
Successfully installed bundler-1.6.3
1 gem installed

Redmineの展開と設定

Redmineをダウンロードして/var/lib/redmineに展開します。

$ curl -O http://www.redmine.org/releases/redmine-2.5.1.tar.gz
$ tar xvf redmine-2.5.1.tar.gz 
$ sudo mv redmine-2.5.1 /var/lib/redmine

/var/lib/redmineに移動し、セットアップを行います。

$ cd /var/lib/redmine
$ bundle install --without development test

development/test環境を除外しておかなければ、他にも多くの依存ライブラリが必要とし、インストールが失敗する可能性があります。

インストールが出来たならば、データベース等の設定を行います。

/var/lib/redmine/config/database.yml

データベースの設定を行います。

production:
  adapter: mysql2
  database: db_redmine
  host: localhost
  username: user_redmine
  password: changeit
  encoding: utf8

/var/lib/redmine/config/configuration.yml

production:
  email_delivery:
    delivery_method: :smtp
    smtp_settings:
      address: "localhost"
      port: 25
      domain: 'example.com'

  rmagick_font_path: /usr/share/fonts/ipa-gothic/ipag.ttf

SMTPの設定は各自で行ってください。 また、SESをセットアップして、設定しても良いでしょう。

セッションのシークレットトークンの作成

$ bundle exec rake generate_secret_token

データベース初期化

$ bundle exec rake db:migrate RAILS_ENV=production

以上でRedmineのセットアップは完了です。

Passengerのセットアップ

最後にApacheとRedmineを連動する設定で、Passengerをセットアップします。

$ sudo yum install curl-devel httpd-devel apr-devel apr-util-devel
$ gem install passenger --no-rdoc --no-ri

続けて、apache2モジュールをセットアップします。

$ passenger-install-apache2-module

セットアップの最後にApacheに記述するモジュールの設定が表示されますので、これをコピーしておきましょう。 Amazon Linux環境では次のようになりました。

   LoadModule passenger_module /home/ec2-user/.gem/ruby/2.0/gems/passenger-4.0.45/buildout/apache2/mod_passenger.so
   <IfModule mod_passenger.c>
     PassengerRoot /home/ec2-user/.gem/ruby/2.0/gems/passenger-4.0.45
     PassengerDefaultRuby /usr/bin/ruby2.0
   </IfModule>

これを /etc/httpd/conf.d/passenger.confを作成して記述します。

今回はこのサーバで他のサービスは動かしません。 このため、次のように/etc/httpd/conf/httpd.confのDocumentRootをRedmineのpublicディレクトリに設定します。

DocumentRoot "/var/lib/redmine/public"

Virtual Hostやその他の設定で行う場合は、適宜confファイルを設定します。

最後にApacheを起動して完了です。

$ sudo service httpd start
$ sudo chkconfig httpd on

備考

調査中の一コマです。

それ、Cloud Formationでできるんじゃ?

デフォルトのテンプレートにRedmine / MySQLテンプレートがあります。 が、Stackの作成中にエラーとなり構築できませんでした。

それ、ALMiniumでできるんじゃ?

ALMiniumもAWSに対応しているとのことで試してみましたが、インストールできませんでした。

まとめ

流行としてはChefとかCloud Formationとかで一発構築できればいいのですが、Ruby系のプロダクトはバージョンによってエラーを読みながら追加ライブラリをインストールしたりと、簡単にインストールできるとはならない感じです。 ALMiniumなども特定のバージョンであればインストールできるんでしょうけど…。 何度もインストールする類のプロダクトでもないので、スクリプト化しても次に利用する時にはまたエラー潰しが始まるんだろうなぁと思います。

というわけで、フツーにインストールした備忘録でした。