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 ）

お忘れなく

```bash
yum update
```

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

```bash
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 クライアントは入れなくていいです。

```bash
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用のデータベースとユーザーを作ります。

```bash
mysql -u your_master_user -p -h your-instance-id.************.ap-northeast-1.rds.amazonaws.com
```

```mysql
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 を組み立てる
--------------------------

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

```bash
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 のパッケージを展開します。

```bash
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
```

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

```bash
cp config/database.yml.example config/database.yml
vim config/database.yml
```

```yaml
production:
  adapter: mysql2
  database: redmine_db
  host: your-instance-id.************.ap-northeast-1.rds.amazonaws.com
  username: redmine_user
  password: 'your password'
  encoding: utf8
```

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

```bash
cp config/configuration.yml.example config/configuration.yml
vim config/configuration.yml
```

```yaml
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 を使用するのでこのようになります。

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

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

```bash
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` を指定して日本語用のデータを入れます。

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

### ファイルシステム

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

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

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


ログローテーション
----------------------------------------------------

ここでは logrotate を使います。

```bash
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
```

```apache
RailsBaseURI /redmine
<Directory /var/lib/redmine/public>
  AllowOverride none
  Require all granted
</Directory>
```

```bash
cd /var/www/html
ln -s /var/lib/redmine/public redmine
```

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

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

```bash
chkconfig httpd on
```

Redmine 設定
------------

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