EC2 (Amazon Linux) で Redmine 3.3


前提

  • Redmine 3.3 を使いたい
  • Amazon Linux でシンプルに & できるだけ yum を使って済ませたい

Redmine の入った AMI が配布されてますが、Redmine 3.3 で Amazon Linux のは無いようなので (2016-06-19 時点) 、自分で作ります。

ここでは

  • データベースに RDS の MySQL 5.6 を使います。
  • Apache 2.4 + Passenger を使います。
  • Ruby もできるだけ新しく 2.3 を使います。

以下コマンドはすべて root です。

EC2 インスタンス を準備する

Amazon Linux の GP2 な AMI からインスタンスを作ります。
(執筆時点で amzn-ami-hvm-2016.03.2.x86_64-gp2 )

お忘れなく

yum update

t2.nano とかでも Redmine は動きますが、メモリが少ないとコンパイル時にエラーになりますので、場合によっては一時的にスワップを作ります。
例えば

dd if=/dev/zero of=/tmp/swap.img bs=1M count=1024
chmod 600 /tmp/swap.img
mkswap /tmp/swap.img
swapon /tmp/swap.img
free

Apache HTTP Server と MySQL クライアント入れておきます。
DB 関係の作業を他のところから行うのであれば、MySQL クライアントは入れなくていいです。

yum install httpd24 mysql56

Ruby を 2.3 にする

Ruby 2.3 をインストールします。
デフォルトで入っている 2.0 は消しておきます。

yum install ruby23 ruby23-devel
yum erase ruby20

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

gem install bundler --no-rdoc --no-ri

RDS インスタンスを準備する

RDS のインスタンスを用意しておきます。

接続して、Redmine用のデータベースとユーザーを作ります。

mysql -u your_master_user -p -h your-instance-id.************.ap-northeast-1.rds.amazonaws.com
mysql> CREATE DATABASE redmine_db CHARACTER SET utf8;
mysql> CREATE USER redmine_user@'%' IDENTIFIED BY 'your password';
mysql> GRANT ALL PRIVILEGES ON redmine_db.* TO redmine_user@'%';

utf8mb4 にしようとすると色々改造が必要なので今回はパスします。

Redmine を組み立てる

ビルドに必要なパッケージをそろえます。

yum install make gcc gcc-c++ automake autoconf
yum install zlib-devel libcurl-devel openssl-devel httpd24-devel apr-devel apr-util-devel mysql56-devel
yum install ImageMagick ImageMagick-devel ipa-gothic-fonts

Redmine のパッケージを展開します。

cd /usr/local/src
wget https://www.redmine.org/releases/redmine-3.3.0.tar.gz
tar xzf redmine-3.3.0.tar.gz
chown -R root:root redmine-3.3.0
mv redmine-3.3.0 /var/lib/
cd /var/lib
ln -s redmine-3.3.0 redmine
cd redmine

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

cp config/database.yml.example config/database.yml
vim config/database.yml
production:
  adapter: mysql2
  database: redmine_db
  host: your-instance-id.************.ap-northeast-1.rds.amazonaws.com
  username: redmine_user
  password: 'your password'
  encoding: utf8

アプリケーションの設定を行います。

cp config/configuration.yml.example config/configuration.yml
vim config/configuration.yml
production:
  email_delivery:
    delivery_method: :smtp
    smtp_settings:
      address: 'your smtp server'
      port: 587
      authentication: :cram_md5
      domain: 'your helo domain'
      user_name: 'your account'
      password: 'your password'

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

必要な gem をインストールします。
今回は MySQL を使用するのでこのようになります。

bundle install --without development test postgresql sqlite --path vendor/bundle

シークレットトークンを生成します。

bundle exec rake generate_secret_token

執筆時点 (2016-06-19) では

.../gems/htmlentities-4.3.1/lib/htmlentities/mappings/expanded.rb:465: warning: duplicated key at line 466 ignored: "inodot"

rake を実行するとこのような警告が出ますが、動作に影響ないようなので無視します。以下同様。
参考: https://nazx.jp/x/CentOS_TIPS_010

データベース

DBスキーマの導入とデフォルトデータのロードを行います。
ここでは REDMINE_LANG=ja を指定して日本語用のデータを入れます。

RAILS_ENV=production bundle exec rake db:migrate
RAILS_ENV=production REDMINE_LANG=ja bundle exec rake redmine:load_default_data

ファイルシステム

ファイル書き込みが行われる部分についてオーナーの設定をします。

chown -R apache:apache files log tmp public/plugin_assets

パーミッションはすでに 775 などになっているかと思います。

ログローテーション

ここでは logrotate を使います。

vim /etc/logrotate.d/redmine

一例として

/var/lib/redmine/log/*.log {
    weekly
    rotate 53
    missingok
    dateext
    copytruncate
    compress
}

Passenger

Passenger モジュールをビルドします。

gem install passenger --no-ri --no-rdoc
passenger-install-apache2-module

選択肢で Ruby を選んだら環境チェックが始まります。 もう一度 Enter でコンパイルが始まります。
成功すると最後に httpd 用の設定 ( LoadModule 等) が出力されますので、それをコピーして設定ファイルを作ります。

vim /etc/httpd/conf.modules.d/01-passenger.conf

執筆時の例

LoadModule passenger_module /usr/local/share/ruby/gems/2.3/gems/passenger-5.0.28/buildout/apache2/mod_passenger.so
<IfModule mod_passenger.c>
  PassengerRoot /usr/local/share/ruby/gems/2.3/gems/passenger-5.0.28
  PassengerDefaultRuby /usr/bin/ruby2.3
  PassengerDefaultUser apache
</IfModule>

出力された内容に PassengerDefaultUser を足しました。

Apache 設定

Apache HTTP Server の設定を行います。

ここでは /redmine という URL パスで利用すると仮定します。

vim /etc/httpd/conf.d/redmine.conf
RailsBaseURI /redmine
<Directory /var/lib/redmine/public>
  AllowOverride none
  Require all granted
</Directory>
cd /var/www/html
ln -s /var/lib/redmine/public redmine

その他、ServerName 、Options 、LoadModule 、MPM チューニング等、httpd を適切に設定します。

httpd を自動起動させたければ

chkconfig httpd on

Redmine 設定

あとはこちら
https://redmine.jp/tech_note/first-step/admin/