CentOS 7.5 へ Redmine 3.4 を構築→リプレース

社内で使用しているRedmineをリプレースしたため、備忘録としても。

今後のために結構細かく確認している部分があるので、不要と判断した確認コマンドは飛ばしてください。
（文頭に<font color=red>*</font>を記載しています。）

#参考サイト
Redmine公式が発表している手順を~~ほぼそのまま~~参考にしています。

- Redmine 3.4をCentOS 7.3にインストールする手順  
http://blog.redmine.jp/articles/3_4/install/centos/

#SELinuxの無効化
/etc/sysconfig/selinuxファイルを編集する<br> SELINUX=enforced を SELINUX＝disableに変更

```comment:SELinux無効化
[root@hogehoge ~]#vi /etc/sysconfig/selinux

# 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=disable

# 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
```
OSリブート後、SELinuxが無効になっているか確認します。

```
[root@hogehoge ~]# reboot
----
[root@hogehoge ~]# getenforce
Disabled
```

#FirewallにHTTPを追加
CentOS7系からコマンド変わりましたね。<br>こちらのURLにまとめられていました。素敵

- CentOS 7 firewalld よく使うコマンド  
https://qiita.com/kenjjiijjii/items/1057af2dddc34022b09e

```comment:httpの追加
[root@hogehoge ~]# firewall-cmd --zone=public --add-service=http --permanent
success

[root@hogehoge ~]# firewall-cmd --reload
success
```

<font color=red>*</font> firewallで許可されているサービスを確認します。

```
[root@hogehoge ~]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens192
  sources:
  services: ssh dhcpv6-client http
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:
```
httpが追加されました。

#パッケージのインストール
Redmineを使用するにあたり、必要なパッケージをインストールします。

```comment:開発ツールのインストール（Cとか、perlコンパイラとか…）
[root@hogehoge ~]# yum -y groupinstall "Development Tools"
```

```comment:RubyとPassengerのビルドに必要なヘッダファイルなどのインストール
[root@hogehoge ~]# yum -y install openssl-devel readline-devel zlib-devel curl-devel libyaml-devel libffi-devel
```

```comment:PostgreSQLのインストール
[root@hogehoge ~]# yum -y install postgresql-server postgresql-devel
```

```comment:apacheのインストール
[root@hogehoge ~]# yum -y install httpd httpd-devel
```

```comment:ImageMagickとヘッダファイル・日本語フォントのインストール
[root@hogehoge ~]# yum -y install ImageMagick ImageMagick-devel ipa-pgothic-fonts
```

#Ruby最新版のインストール
Ruby公式サイトから最新版のソースコードをダウンロードします。

Rubyダウンロードサイト
https://www.ruby-lang.org/ja/downloads/

Redmineが対応するRubyのバージョンは
http://www.redmine.org/projects/redmine/wiki/redmineinstall
を参照してください。

```comment:パッケージダウンロード
[root@hogehoge ~]# curl -O https://cache.ruby-lang.org/pub/ruby/2.6/ruby-2.6.2.tar.gz
```

```command:Rubyのビルド
[root@hogehoge ~]# tar xvf ruby-2.4.1.tar.gz   *オプション"f" は最後にしないとエラーが出ます*
[root@hogehoge ~]# cd ruby-2.6.2
[root@hogehoge ruby-2.6.2]# ./configure --disable-install-doc
[root@hogehoge ruby-2.6.2]# make
[root@hogehoge ruby-2.6.2]# make install
[root@hogehoge ruby-2.6.2]# cd ~
[root@hogehoge ~]# *現在のディレクトリをルートに戻しました。*
```

```comment:Rubyのバージョン確認
[root@hogehoge ~]# ruby -v
ruby 2.6.2p47 (2019-03-13 revision 67232) [x86_64-linux]
```

#bundlerのインストール
Ruby用のパッケージ管理ツールであるbundlerをインストールします。

```
[root@hogehoge ~]# gem install bundler --no-rdoc --no-ri
ERROR:  While executing gem ... (OptionParser::InvalidOption)
invalid option: --no-rdoc
```

###**！？**

オプションが見当たらないといったエラーが返ってきたため`-N`を使用、、
※`-N`は`--no-rdoc`と`--no-ri`をまとめたオプションらしいです。

```comment:オプションを変更してインストール
[root@hogehoge ~]# gem install bundler -N
Successfully installed bundler-2.0.1
```
無事インストールできました。

#PostgreSQLの設定
SQLサーバのPostgreSQLを設定します。

```comment:データベースクラスタの新規作成
[root@hogehoge ~]# postgresql-setup initdb
Initializing database ... OK
```

```comment:RedmineからPostgreSQLに接続するための設定を追加
[root@hogehoge ~]# vi /var/lib/pgsql/data/pg_hba.conf
（中略）
# 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.


# TYPE  DATABASE        USER            ADDRESS                 METHOD
host    redmine         redmine         127.0.0.1/32            md5
host    redmine         redmine         ::1/128                 md5
```
```comment:PostgreSQLの起動および自動起動の設定
[root@hogehoge ~]# systemctl start postgresql.service  *サービスの起動*
[root@hogehoge ~]# systemctl enable postgresql.service  *サービスの自動起動設定*
```

<font color=red>*</font> 自動起動設定の確認をします。

```
[root@hogehoge ~]# systemctl list-unit-files -t service | grep postgresql
postgresql.service                            enabled 
```

```comment:PostgreSQLのディレクトリに移動
[root@hogehoge ~]# cd /var/lib/pgsql
[root@hogehoge pgsql]#
```

```comment:Redmine用ユーザーの作成
[root@hogehoge pgsql]# sudo -u postgres createuser -P redmine
新しいロールのためのパスワード: *PostgreSQLの redmine用ユーザーに設定するパスワードを入力してください*
もう一度入力してください: *パスワードを再入力してください*
```
※**使用するパスワードは強めのものを使用すること**(英大文字、小文字、数字、記号を全て含めました)

```comment:Redmine用データベースの作成
[root@hogehoge pgsql]# sudo -u postgres createdb -E UTF-8 -l ja_JP.UTF-8 -O redmine -T template0 redmine
```

```comment:作業ディレクトリからルートディレクトリへ戻る
[root@hogehoge pgsql]# cd ~
[root@hogehoge ~]# 
```

#Redmineのインストール
ソースコード一式を/var/lib/ 直下のディレクトリ redminen にダウンロードします。
サーバ証明書を承認するか聞かれますので、一時的に承認（t）か、常に承認（p）を選択します。

```comment:Redmineソースコードをダウンロード
[root@hogehoge ~]# svn co https://svn.redmine.org/redmine/branches/3.4-stable /var/lib/redmine
'https://svn.redmine.org:443' のサーバ証明書の認証中にエラーが発生しました:
 - 証明書は信頼のおける機関が発行したものではありません。証明書を手動で認証
   するためにフィンガープリントを用いてください!
証明書情報:
 - ホスト名: svn.redmine.org
 - 有効範囲: Sun, 08 Jan 2017 00:00:00 GMT から Wed, 08 Jan 2020 23:59:59 GMT まで
 - 発行者: Gandi, Paris, Paris, FR
 - フィンガープリント: ab:f1:c8:b7:69:a6:99:bd:20:c1:59:a4:5f:60:9e:27:2d:81:82:b7
拒否しますか (R)、一時的に承認しますか (t)、常に承認しますか (p)? t

***
リビジョン 17961 をチェックアウトしました。
```

```comment:データベースへ接続するための設定ファイルを作成
[root@hogehoge ~]# vi /var/lib/redmine/config/database.yml

production:
  adapter: postgresql
  database: redmine
  host: localhost
  username: redmine
  password: "********" *PostgreSQL上に設定したRedmine用ユーザのパスワードを記入*
  encoding: utf8
```

```comment:設定ファイルconfig/configuration.ymlの作成
[root@hogehoge ~]# vi /var/lib/redmine/config/database.yml
production:
  email_delivery:
    delivery_method: :smtp
    smtp_settings:
      address: "localhost"
      port: 25
      domain: "example.com" *Redmineを実行するサーバのFQDNを記載*

  rmagick_font_path: /usr/share/fonts/ipa-pgothic/ipagp.ttf
```

```comment:Redmineのインストールディレクトリへ移動
[root@hogehoge ~]# cd /var/lib/redmine
[root@hogehoge redmine]# 
```

```comment:gemパッケージのインストール
[root@hogehoge redmine]# bundle install --without development test --path vendor/bundle
```
bundleのバージョンが対応していない場合は、再インストールの必要があるので、こちらを参照

- プログラマのキャンパスノート  
http://campusnote.hatenablog.com/entry/2017/09/13/005618

#Redmineの初期設定と初期データ登録
Redmine動作に関する初期設定と初期データの登録を行います。
※コマンドはRedmineのインストールディレクトリで実行してください。

```comment:セッション改ざん防止用秘密鍵の作成
[root@hogehoge redmine]# bundle exec rake generate_secret_token
```

```comment:データベースのテーブル作成
[root@hogehoge redmine]# RAILS_ENV=production bundle exec rake db:migrate
```

```comment:デフォルトデータの登録
[root@hogehoge redmine]# RAILS_ENV=production REDMINE_LANG=ja bundle exec rake redmine:load_default_data
Default configuration data loaded.
```
上記コマンドで作成したテーブルにデフォルトデータのロードを行います。
この操作によりトラッカー、優先度、ステータス、ロール、ワークフローなどの初期値が登録されます。

#Passengerのインストール
Apache上でRedmineなどのRailsアプリケーションを実行するために使われるPhusion Passengerをインストールします。

```comment:Passengerのインストール
[root@hogehoge redmine]# gem install passenger -v 5.1.12 --no-rdoc --no-ri
```

```comment:PassengerのApache用モジュールのインストール
[root@hogehoge redmine]# passenger-install-apache2-module --auto --languages ruby
*警告がかなり出ます。無視しました。*
```

```comment:Apache用設定内容の確認
[root@hogehoge redmine]# passenger-install-apache2-module --snippet

*当時出力されたもの*
LoadModule passenger_module /usr/local/lib/ruby/gems/2.6.0/gems/passenger-5.1.12/buildout/apache2/mod_passenger.so
<IfModule mod_passenger.c>
  PassengerRoot /usr/local/lib/ruby/gems/2.6.0/gems/passenger-5.1.12
  PassengerDefaultRuby /usr/local/bin/ruby
</IfModule>
```

#Apacheの設定
以下の内容で /etc/httpd/conf.d/redmine.conf を作成してください。

```
[root@hogehoge redmine]# vi /etc/httpd/conf.d/redmine.conf

# Redmineの画像ファイル・CSSファイル等へのアクセスを許可する設定。
# Apache 2.4のデフォルトではサーバ上の全ファイルへのアクセスが禁止されている。
<Directory "/var/lib/redmine/public">
  Require all granted
</Directory>

# Passengerの基本設定。
# passenger-install-apache2-module --snippet で表示された設定を記述。
# 環境によって設定値が異なるため以下の5行はそのまま転記せず、必ず
# passenger-install-apache2-module --snippet で表示されたものを使用すること。
#
LoadModule passenger_module /usr/local/lib/ruby/gems/2.6.0/gems/passenger-5.1.12/buildout/apache2/mod_passenger.so
<IfModule mod_passenger.c>
  PassengerRoot /usr/local/lib/ruby/gems/2.6.0/gems/passenger-5.1.12
  PassengerDefaultRuby /usr/local/bin/ruby
</IfModule>

# 必要に応じてPassengerのチューニングのための設定を追加（任意）。
# 詳しくはPhusion Passenger users guide(https://www.phusionpassenger.com/library/config/apache/reference/)参照。
PassengerMaxPoolSize 20
PassengerMaxInstancesPerApp 4
PassengerPoolIdleTime 864000
PassengerStatThrottleRate 10

Header always unset "X-Powered-By"
Header always unset "X-Runtime"
```

コンフィグファイルが作成出来たら、Apacheを起動します。

```comment:Apacheの起動および自動起動の設定
[root@hogehoge redmine]# systemctl start httpd.service
[root@hogehoge redmine]# systemctl enable httpd.service
```

<font color=red>*</font> 自動起動設定の確認をします。

```comment:httpdサービスが自動起動かの確認
[root@hogehoge redmine]# systemctl list-unit-files -t service | grep httpd
```

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

```comment:Redmineを配置したディレクトリ以下のファイルを、Apacheを実行するユーザー・グループ(CentOSの場合はいずれも"apache")で読み書きできるよう、オーナーを変更します。
[root@hogehoge redmine]# chown -R apache:apache /var/lib/redmine
```

```comment:webサーバをRedmine専用として使用
*/etc/httpd/conf/httpd.conf を開き DocumentRoot をRedmineのpublicディレクトリ(例: /var/lib/redmine/public)に変更*
[root@hogehoge redmine]# vi /etc/httpd/conf/httpd.conf

# DocumentRoot: The directory out of which you will serve your
# documents. By default, all requests are taken from this directory, but
# symbolic links and aliases may be used to point to other locations.
#
DocumentRoot "/var/lib/redmine/public"

```
※webサーバのルートディレクトリでRedmineを実行するための設定です。「http://サーバIPアドレスまたはホスト名/」でRedmineにアクセスできます。

```comment:
[root@hogehoge redmine]# service httpd configtest
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain. Set the 'ServerName' directive globally to suppress this message
Syntax OK

[root@hogehoge redmine]# systemctl restart httpd.service
```

<font color=red>*</font> 自動起動設定の確認をします。

```comment:httpdサービスが自動起動かの確認
[root@hogehoge redmine]# systemctl list-unit-files -t service | grep httpd
```

#ブラウザでRedmineにアクセス
http://（サーバのIP or ホスト名）/redmine　にアクセス
![001.png](https://qiita-image-store.s3.amazonaws.com/0/377989/59450dec-bc01-d7de-b242-2ce578404470.png)

上のような画面になれば構築は完了です。
お疲れ様でした。