AWS + CentOS + Redmine構築

# AWS + Redmine構築まとめ

## Introduction
こんにちは！！ChaaaBoooです！！
今回はタスク管理ツールのRedmineをAWS環境で使用する手順についての記録です＾＾
是非！御覧ください！

### 記事対象者
- AWSにあまりふれたことのない初心者の方
- RedmineをAWS環境で使用したい方
- Railsのアプリケーションどう動いているのか気になる方

### そもそもRedmineとは？
Redmineはプロジェクト管理を行うことができるオープンソースのソフトウェアです.
Webでタスクの管理,情報の共有など行うことができます.
またRedmineはRuby on Railsで作られているのが特徴です.

### Bitnamiを使用しない理由
AWSではBitnami + Redmine で簡単にRedmineができるサービスが提供されております.
非常に簡単で10分ぐらいでRedmineが使用できてしまいます.
しかし簡単すぎるが故に内部構造が分かりづらく,プラグインの追加時などに無駄な労力が発生してしまいます.
そのため今回はサーバーを一から立てて構築する手順を選択しました.

## インストール手順

### 必要なもの
- AWSアカウント

#### １．インスタンス情報
 AWSへログインへログインを行いEC2でサーバーを立てる.
 性能は下記の通りである.

```
 OS : CentOS7
 インスタンスタイプ : t2.micro
```

#### 2．CentOS7の設定

 自身のターミナル上から先程作ったインスタンスへSSHで接続
 ※ 接続方法はAWSのコンソールから対象のインスタンスを選択し”接続”を押下すると接続方法が表示される．（キーペアの設定が完了していればコマンドを下記の用に変更しenterで良い）

```
 $ ssh -i "キーペア名" centos@ec2-xxx-xxx-xxx-xxx.ap-northeast-1.compute.amazonaws.com
```

 接続完了後にrootユーザーに変更する.

```
 $ sudo su -
```

  rootユーザーへの権限変更後，下記コマンド実施し対象のファイルを開く編集．
  SELinuxを無効にする．

```
  # vi  /etc/sysconfig/selinux

 ※↓開いた後，SELNINUX=の部分を"disabled"に編集
  # This file controls the state of SELinux on the system.
  # SELINUX= can take one of these three values:
  #     enforcing - SELinux security policy is enforced.
  #     permissive - SELinux prints warnings instead of enforcing.
  #     disabled - No SELinux policy is loaded.
  SELINUX=disabled
  # SELINUXTYPE= can take one of three two values:
  #     targeted - Targeted processes are protected,
  #     minimum - Modification of targeted policy. Only selected processes are protected.
  #     mls - Multi Level Security protection.
  SELINUXTYPE=targeted
```

 編集完了後に変更を適用させるために再起動を実施．

```
  # reboot
```

 再起動すると自身のローカル環境へ戻るため，ssh接続を再度行いrootへログインする．
 接続完了後に下記コマンドを実施しSELinuxが無効にされているか確認を行う． Disabled と表示されればSELinuxは無効になっている．

```
 $ sudo su -
 # getenforce
   Disabled
```

#### 3．必要なパッケージをインストール

 開発ツール（Cコンパイラ等）のインストール

```
 # yum -y groupinstall "Development Tools"

```

 RubyとPassengerのビルドに必要なヘッダファイルなどのインストール

```
 # yum -y install openssl-devel readline-devel zlib-devel curl-devel libyaml-devel libffi-devel
```

 PostgreSQLとヘッダファイルのインストール

```
 # yum -y install postgresql-server postgresql-devel
```

 Apacheとヘッダファイルのインストール

```
 # yum -y install httpd httpd-devel

```

 ImageMagickとヘッダファイル・日本語フォントのインストール

```
 # yum -y install ImageMagick ImageMagick-devel ipa-pgothic-fonts
```

#### 4．Rubyのインストール

 下記サイトを参照しRubyのソースコードのダウンロードを行う．
 今回はRuby 2.4.1を使用して行う．

```
 # curl -O https://cache.ruby-lang.org/pub/ruby/2.4/ruby-2.4.1.tar.gz
```

 ダウンロードしたRubyのファイルを展開し，Rubyのビルドとインストールを行う．

```
 # tar xvf ruby-2.4.1.tar.gz
 # cd ruby-2.4.1
 # ./configure --disable-install-doc
 # make
 # make install
 # cd ..
```

 下記コマンドを実施しRubyがインストールできた事を確認する．

```
 # ruby -v
 ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-linux]
```

 続いてRuby用のパッケージ管理ツールであるbundlerをインストールする．

```
 # bundlerはRedmineが使用するgemパッケージをインストールするのに使用する．
 # gem install bundler --no-rdoc --no-ri
```

#### 5．PostgreSQLの設定

 最初に下記コマンド実施し新規でデータベースクラスタを作成する．

```
 # postgresql-setup initdb
Initializing database ... OK
```

 続いてRedmineからPostgreSQLに接続するための設定を追加する．
 下記コマンドを実施し対象のファイルを開く．

```
 # vi /var/lib/pgsql/data/pg_hba.conf
```

 開いたら"Put your actual configuration here" と書かれている箇所を探して以下のように設定を2行追加する．

```
# Put your actual configuration here
# ----------------------------------
#
# If you want to allow non-local connections, you need to add more
# "host" records.  In that case you will also need to make PostgreSQL
# listen on a non-local interface via the listen_addresses
# configuration parameter, or via the -i or -h command line switches.
host    redmine         redmine         127.0.0.1/32            md5
host    redmine         redmine         ::1/128                 md5
```

 編集が完了したらPostgreSQLの起動と自動起動の設定を行う．

```
 # systemctl start postgresql.service
 # systemctl enable postgresql.service
```

 PostgreSQLのディレクトリへ移動し，Remine用のユーザを作成する．

```
 # cd /var/lib/pgsql
 # sudo -u postgres createuser -P redmine
※パスワード設定が求められるため確認を含め2回入力する
※尚，後述の手順で必要になるため忘れないようメモするなど忘れないようにする
```

 ユーザーを作成したら下記コマンドを実行しRemine用のデータベースを作成する．
 作成したらPostgreSQLディレクトリから元のディレクトリへ戻る．

```
 # sudo -u postgres createdb -E UTF-8 -l ja_JP.UTF-8 -O redmine -T template0 redmine
 # cd -
```


#### 6．Redmineインストール

 下記コマンドを実行しRedmienのデプロイ先（今回は/var/lib/redmien）へソースコードをダウンロードする．
 ※今回のRedmineはver3.4となっている．

```
 # svn co https://svn.redmine.org/redmine/branches/3.4-stable /var/lib/redmine
```

 続いてRedmineからデータベースへ接続するための設定を行う．
 下記コマンドを実行し，Redmineのconfig配下にdatabase.ymlを作成する．

```
 # cd /var/lib/redmine
 # pwd
  redmineディレクトリにいることを確認
 # vi config/database.yml
 ```

 入力画面に遷移したら下記内容でファイルを設定を記載し保存する．

```
production:
  adapter: postgresql
  database: redmine
  host: localhost
  username: redmine
  password: "********"
  encoding: utf8
※****の部分は前の手順でPostgreSQL上に作成したredmine用ユーザーのパスワードを記載
````

 Redmineからメールサーバへ接続するための設定や日本語フォントファイルのパスを記述した設定ファイルを作成します．
 前手順と同様に下記コマンドでconfig配下にファイルを作成し，設定を記述する．

```
 # vi 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-pgothic/ipagp.ttf
※example.comの部分は各自作成したサーバーのドメイン名を入力する．
※ドメイン名はaws上で対象インスタンスを選択すると”説明”に表示される．
 その中のパブリックDNS(IPv4)の部分を記載する．
```

bundlerを使用しRedmineが依存するgemパッケージをインストールする．
下記コマンドを実行しRedmineのインストールディレクトリへ移動，インストールを行う．

```
 # cd /var/lib/redmine
 # bundle install --without development test --path vendor/bundle
```

#### 7．Redmineの初期設定および初期データの登録

 下記コマンドを実行しセッション改竄防止用の秘密鍵を作成．

```
 # bundle exec rake generate_secret_token
```

 作成が完了したら，データベースのテーブルを作成します．
 下記コマンドを実施しconfig/database.yml で指定したデータベースにテーブルを作成する．

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

 続いて作成したテーブルにデフォルトデータのロードを行う．
 これによりトラッカー,優先度,テータス,ロール,ワークフローなどの初期値が登録される．

```
 # RAILS_ENV=production REDMINE_LANG=ja bundle exec rake redmine:load_default_data
```

#### 8．Passengerのインストール

 下記コマンドを入力しApache上でRedmineなどのRailsアプリケーションの実行するために使われるPhusion Passengerをインストールする．

```
 # gem install passenger -v 5.1.12 --no-rdoc --no-ri
```

 続いて下記コマンドを実行してApache用のモジュールのビルドとインストールを行う．

```
 # passenger-install-apache2-module --auto --languages ruby
```

 最後に下記コマンドを実行しApache用設定内容の確認する．
 表示される情報は後述のApacheの設定時に必要となる．

```
 # passenger-install-apache2-module --snippet
```

#### 9．Apacheの設定

 下記コマンド実施しApache設定用のファイルを作成し設定する．

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

 入力画面が開いたら下記の用に記載する．

```
<Directory "/var/lib/redmine/public">
  Require all granted
</Directory>

# Redmineの画像ファイル・CSSファイル等へのアクセスを許可する設定.
# Apache 2.2のデフォルトではサーバ上の全ファイルへのアクセスが禁止されている.

LoadModule passenger_module /usr/local/lib/ruby/gems/2.4.0/gems/passenger-5.1.12/buildout/apache2/mod_passenger.so
<IfModule mod_passenger.c>
  PassengerRoot /usr/local/lib/ruby/gems/2.4.0/gems/passenger-5.1.12
  PassengerDefaultRuby /usr/local/bin/ruby
</IfModule>

# Passengerの基本設定.
# passenger-install-apache2-module --snippet で表示された設定を記述.
# 環境によって設定値が異なるため以下の3行はそのまま転記せず,必ずpassenger-install-apache2-module --snippet で表示されたものを使用すること.
```

 上記設定を記述したら下記コマンドを実施して，Apacheの起動とシステム起動時に自動的に起動するよう設定．

```
 # service httpd start
 # systemctl enable httpd
```


#### 10．Apache上のPassengerでRedmineを実行するための設定

 Redmineを配置したディレクトリ以下のファイルをApacheを実行するユーザー・グループ(CentOSの場合はいずれも"apache")で読み書きできるよう，下記コマンドでオーナーを変更する．

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

 続いてwebサーバーをRedmine専用として動かすための設定を行い「http://サーバIPアドレスまたはホスト名/」でアクセスできるよう設定を編集する．
 下記コマンドで設定ファイルを開き編集を行う．

```
 # vi /etc/httpd/conf/httpd.conf
```

 開いたら"DocumentRoot"の部分を下記のように編集する．

```
DocumentRoot "/var/www/html"
↓
DocumentRoot "/var/lib/redmine/public"
```

 編集が完了し設定を変更したら下記コマンドを実行しApacheの再起動を行う．

```
 # service httpd configtest
 # service httpd restart
```

 全ての設定が完了したらAWSのコンソール，対象インスタンスの”説明”タブからパブリックDNS（IPv4）を確認しそのURLでRedmineが表示されるか確認する．

※注意
 これでタイムアウトで開かなかった場合，AWSのインスタンスがHTTPの通信用のポートが開いていない場合が考えられるため，”説明”タブのセキュリティグループのOS名が記載されているリンクを押下．
 画面遷移したら”インバウンド”タブを押下し”編集”押下．
 ”インバウンドメニューのルールの編集”画面が開いたら”ルールの追加”を押下．
 新しい行が挿入されるためタイプから”HTTP”を選択，そしてソースのIPアドレスを入力欄を”0.0.0.0/0”とし保存する．

## Conclusion

以上になります！！＾＾
長々とご覧いただきありがとうございます！！
Redmineは様々なプラグインやテーマがあるので是非そちらも試して楽しんでみてください.

それでは！！また！！