AWSにRedmineを構築


AWS(t2.micro)にRedmine3以降を構築する際に、Rubyのバージョン、インストール時のメモリ不足と嵌ったのでメモ。

## 前提
- Stable の最新を使う(2016.7.24時点の最新：Redmine3.3)
- Amazon Linuxでシンプルに構築する
- 構築済みのAMIは使用しない
- 同じインスタンスないにデータベースも構築する

|Application|Version|
|:----------|------:|
|Redmine|3.3|
|MySQL|5.6|
|Apache|2.4|
|Ruby|2.3|


## EC2インスタンスの作成

個人利用なので、無料枠で作成する。

- AMI : Amazon Linux AMI 2016.03.3 (HVM), SSD Volume Type - ami-374db956
- タイプ : t2.micro
- セキュリティグループ : HTTP,HTTPS,SSH

インスタンスが作成できたら、SSHでログインし、yum update を実行する。

一時的なSWAP領域を作成する(ここでは1G、デフォルトのSwap領域は0KB)。
passenger-install-apache2-moduleでメモリ不足になる

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


## DBとHTTPサーバのインストール

開発ツールのインストール

```sh
yum groupinstall "Development Tools"
```

Apache をインストール

```sh
yum install httpd24
```

MySQLのインストール
yumでインストール可能な最新は5.6

```sh
yum list available | grep mysql
yum install mysql56-server mysql56-devel
```

MySQLを起動して、rootパスワードを変更

```
service mysqld start
chkconfig mysqld on
```

```
# mysql -uroot
> update mysql.user set password=password('new-password') where user = 'root';
> flush privileges;
> exit;
# mysql -u root -p
```

## DBの準備

以下の内容でRedmine用のデータベースとユーザを作成する
- DB : redmine_db
- USER : redmineuser
- PASS : password

```
CREATE DATABASE redmine_db default charset="utf8";
GRANT ALL PRIVILEGES ON redmine_db.* TO redmineuser@localhost IDENTIFIED BY 'password';
```


## Rubyを2.3にする
Ruby2.3をインストールして、デフォルトの2.0は消す。

```sh
ruby -v
yum install ruby23 ruby23-devel
yum erase ruby20
ruby -v
```

rubyとgemのバージョンを確認

```
# ruby -v
ruby 2.3.0p0 (2015-12-25 revision 53290) [x86_64-linux-gnu]
# gem -v
2.5.1
```

bundlerをインストールする。

```sh
gem install bundler --no-rdoc --no-ri
```

## Redmineをインストール

ビルドに必要なパッケージをインストール。(一部はすでにインストール済）

```sh
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のパッケージを展開

```sh
cd /usr/local/src
curl -O https://www.redmine.org/releases/redmine-3.3.0.tar.gz
tar xzf redmine-3.3.0.tar.gz
mv redmine-3.3.0 /var/lib/redmine
```

データベース接続の設定

```sh
cd /var/lib/redmine
vi config/database.yml
```

データベースとユーザ名、パスワードは先程のを設定

```yml:database.yml
production:
  adapter: mysql2
  database: redminedb
  host: localhost
  username: redmineuser
  password: 'redminepass'
  encoding: utf8
```

アプリケーションの設定

```sh
vi config/configuration.yml
```

rmagick_font_path はyumでインストールしたフォントを設定

```yml: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
```

必要なgemをインストール

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

シークレットトークンを生成

```sh
bundle exec rake generate_secret_token
```

以下の警告がでるが、無視

```
expanded.rb:465: warning: key "inodot" is duplicated and overwritten on line 466
```

DBスキーマの作成

```sh
RAILS_ENV=production bundle exec rake db:migrate
```

/var/lib/redmineのオーナーをapacheに変更

```sh chown -R apache:apache /var/lib/redmine
```

Passengerモジュールをビルド

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

コンパイルが終わったら、Apacheのモジュール設定を行う。

```
vi /etc/httpd/conf.modules.d/01-passenger.conf
```

コンパイルの終盤に出力された内容を設定する。

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

Apacheの設定

```
vi /etc/httpd/conf.d/redmine.conf
```

```xml:redmine.conf
RailsBaseURI /redmine
<Directory /var/lib/redmine/public>
  AllowOverride none
  Require all granted
</Directory>
```

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

Apacheの起動

```sh
service httpd start
chkconfig httpd on
```


## 参考
- [Amazon EC2上にRedmineをインストールしてみた](http://dev.classmethod.jp/cloud/aws/install-redmine-to-amazon-ec2/)
- [Redmine 3.2をCentOS 7.1にインストールする手順](http://blog.redmine.jp/articles/3_2/install/centos/)
- [EC2 (Amazon Linux) で Redmine 3.3](http://qiita.com/nakanishi-m/items/73ecefb5706381bf3c32)
- [RedmineInstall](https://www.redmine.org/projects/redmine/wiki/redmineinstall) : 対応しているバージョンの確認
- [AWS Amazon Linux スワップファイル作成によりSwap領域のサイズを増やす](http://qiita.com/na0AaooQ/items/278a11ed905995bd16af)