CentOS7 に Redmine を入れてみた

# 目的
CentOS7.2 + Redmine3.2.1 + MariaDBを用いた環境の構築・検証する。
※Redmine.JPの最新インストール手順から Postgresql を利用した手順となったのでやってみようと思いました。

# 環境
## サーバー環境
Windows10 Pro 64bit + Hyper-V 上(※)に 仮想マシンを立ててその中にCentOS7構築しています。
※ Windows10 Pro 64bit + Hyper-V の環境については事前に構築済かつ接続等に問題ない前提とします。

## クライアント環境
Windows7 Pro 64bit + teraterm

# 前提
CentOS7 インストール済（最小構成）およびクライアントからのSSH接続が問題ないこと

Redmineのインストールの基本的な手順は Redmine.JP の [Redmine 3.1をCentOS 7.1にインストールする手順](http://blog.redmine.jp/articles/3_1/installation_centos/) を参考しました。

また特に記載がなければインストールは root ユーザで作業を行っています。

# CentOSの設定
## firewalldでHTTPを許可
Redmine.JPの手順でも問題無いが、デフォルトゾーン（外部接続しているゾーン）が変更されている場合がある。事前にどのゾーンを利用しているか以下のコマンドで確認しておくと良い。
（ここではpublicがデフォルトゾーンとします。異なっている場合は読み替えてコマンドを実行）
なお余談ではあるが、Redmine.JP上での手順では --zone=xxx を設定しているが、このオプションを設定しなければデフォルトゾーンに対してコマンドが実行されるので、指定しない方がスマートと思われる。

``` shell-session:
[root@centos7 ~]# firewall-cmd --get-default-zone
public
[root@centos7 ~]# firewall-cmd --zone=public --add-service=http --permanent
[root@centos7 ~]# firewall-cmd --reload
[root@centos7 ~]# firewall-cmd  --list-services
dhcpv6-client http ssh
```

# 必要なパッケージのインストール
最小構成の場合、必要なパッケージがインストールされていませんので、指示通りインストールしましょう。
インストール漏れがあるとこの後の作業でエラーが出たりすることとなります。
もし、この後の作業でエラーが出た場合は、まず必要なモジュールがインストールされているかを確認しましょう。

# Redmineのインストール
## データベースへの接続設定／設定ファイル config/configuration.yml の作成
私はここで結構ハマったので、記述します。
ここでは指定されたファイルを作ることになりますが、YMLファイルの記述に**一定のルール**があるみたいなのでdatabase.yml ファイルを例にして私が調べた限りエラーについて記述します。
Redmine内のxxx.yml.exampleの英文にも書いてあるのですが、ほかにもエラーとなるケースがあるようでした。

まず、基本的に正しい書き方は【正しいファイルの例】の通りです。インデントは **半角空白の2文字ずつ** となります。
【間違った書き方の例】のように、全角スペースや、半角スペース1字、タブが混入した記述ではエラーとなります。また、usernameのようなコロンの後ろにスペースが無いのもエラーとなるので注意が必要です。
なお、インデントと言いましたが実際は encodingのようは記述は問題無く通るようです。

``` shell-session:正しいファイルの例
production:
  adapter: postgresql
  database: redmine
  host: localhost
  username: redmine
  password: "********"
  encoding: utf8
```
``` shell-session:間違った書き方の例
production:
　adapter: postgresql # ←インデントに全角スペースが設定されている
 database: redmine # ←インデントに半角1文字しか設定されていない
<tab>host: localhost # ←インデントにタブが設定されいる（<tab>なのは察してください…orz）
  username:redmine # ←コロンの後ろにスペースが無いのもNG
  password: "********"
- encoding: utf8
# ↑ Redmineでは使われていないようなので気にする必要無いですが、先頭のマイナスには何か意味があるみたいでこれはOKっぽい
```

## gemパッケージのインストール
手順にもしっかり書いていますが、Redmineをインストールしたディレクトリでコマンドを実行してください。
なので実際は以下のようになります。

``` shell-session:
[root@centos7 ~]# cd /var/lib/redmine #←cdで指定するパスはRedmineをダウンロードした先になります。
[root@centos7 ~]# bundle install --without development test --path vendor/bundle
```

# Redmineの初期設定と初期データ登録
gemパッケージのインストールと同じですが、ここの手順で先で説明したYMLファイルの定義を使用します。
正しく定義されていないと以下のようなエラーが出力されるので、設定ファイルを見直してください。

``` shell-session:
[root@centos7 ~]# RAILS_ENV=production bundle exec rake db:migrate
/var/lib/redmine/vender/bundle/ruby/2.2.0/gems/htmlentities-4.3.1/lib/htmlentities/mappings/expanded.rb:465: warning: duplicated key at line 466 ignored: "inodot"
rake aborted!
Psych::SyntaxError: (<unknown>): did not find expected key while parsing a block mapping at line 5 column 1
/var/lib/redmine/lib/redmine/configuration.rb:86:in `load_from_yaml'
～略～
```
コマンド実行した直後の1行目のwarning文は現状必ず出力されるようなので、実際のエラーと関係無いようです。
2行目のrake aborted で実際の処理が停止しており、
3行目に処理が停止した原因のエラーメッセージが表示されます。
以降も処理が進みますが、上記で失敗しているため、全てミスとなっています。
（エラーメッセージなどは出ませんでしたが、実際にDBを確認すると何も作成されていませんでした）

# おわりに
上記が問題無く出来ればあとは、手順通り進めれば問題ありませんでした。
初回起動が問題無く出来れば、作業時に使用したファイル等は不要なので、削除してしまいましょう。

初期設定が完了したら、プラグインを入れて使いやすくしてみようと思います。