CentOS7.4にRedmine3.4.5をSubversionのリポジトリから取得して環境構築する

﻿# CentOS7.4にRedmine3.4.5をSubversionのリポジトリから取得して環境構築する

`Redmine3.4.5`のインストールで、せっかく最新バージョンなら、PostgreSQLサーバーや、Rubyも最新バージョンでインストールしたいなと。
いろいろ調べたところ、全部最新バージョンで最初からインストールする手順がまとまったサイトなど見つからなかったので、この記事にまとめました。

## 事前準備

以下の記事手順に従って、事前にCentOS7.4の環境が構築済みであること。
[Vagrant2.0.3を使ったCentOS7.4の環境構築](https://qiita.com/You_name_is_YU/items/1bdf36270e9f594d1c7e)

## Redmine3.4.5の環境構築

### Redmine3.4.5の環境構築をする各環境情報

|＃|ソフトウェア|バージョン|
|:--|:--|:--|
|1|Redmine|3.4.5|
|2|OS|CentOS 7.4|
|3|データベース|PostgreSQL 10.3|
|4|Webサーバ|Apache/2.4.33|
|5|Ruby|2.5.1|

後続の手順は、全て`su -`して`root`にスイッチして実行します。

### CentOSのSELinuxを無効にする

`SELinux`は、WindowsでいうところのUACのような機能ですが、予期せぬ制約がかかることが多いので、無効化します。

```shell
vim /etc/sysconfig/selinux

# SELINUX=enforcing
SELINUX=disabled
```

この編集をしたら、一度OSを再起動

再起動後、以下のコマンドでdisabledになっていることを確認

```shell
getenforce

Disabled
```

### firewalldの設定でHTTPを許可

firewalldが自動起動でstart状態していることを前提に、HTTPのポートを許可するように設定します。
そのため、一応状態を確認して、自動起動設定とfirewalldをstartする手順も含めます。

```shell
systemctl is-enabled firewalld.service
systemctl enable firewalld.service
systemctl start firewalld.service
firewall-cmd --zone=public --add-service=http --permanent
firewall-cmd --zone=public --add-port=3000/tcp --permanent
firewall-cmd --reload
firewall-cmd --zone=public --list-services

ssh dhcpv6-client http
```

### 事前準備として依存packageなどをインストール

```shell
yum -y install zlib-devel curl-devel openssl-devel httpd-devel apr-devel apr-util-devel mysql-devel postgresql-devel libffi-devel readline-devel
```

### Rubyのインストール

rbenvを利用してRubyをインストールする手順とします。

#### gitをインストール

```shell
yum -y install git
```

#### rbenv／ruby-buildをgitからclone

```shell
cd /opt
git clone https://github.com/rbenv/rbenv.git
mkdir /opt/rbenv/plugins
cd /opt/rbenv/plugins
git clone https://github.com/rbenv/ruby-build.git
```

#### ログイン時にrbenv初期化スクリプト

```shell
cat << 'EOS' > /etc/profile.d/rbenv.sh
export RBENV_ROOT="/opt/rbenv"
export PATH="${RBENV_ROOT}/bin:${PATH}"
eval "$(rbenv init -)"
EOS
```

#### ログアウトしてrbenvのインストールを確認

一旦ログアウトしてから再度`root`でログインして以下のコマンドを実行してください。

```shell
rbenv --version

# 以下のような結果がでればOK
rbenv 1.1.1-30-gc8ba27f
```

#### ruby-buildのインストール

```shell
/opt/rbenv/plugins/ruby-build/install.sh
rbenv install -l

### インストール可能なRubyのバージョンが一覧表示されればOK
```

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

```shell
rbenv install 2.5.1
```

#### RubyへのPATHを通してrbenvでRuby2.5.1を利用することを宣言

```shell
rbenv global 2.5.1
ruby -v

### 以下のバージョン表示のようになればOK
ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-linux]
```

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

#### PostgreSQL10用のyumリポジトリを追加

CentOS7の標準yumリポジトリには、PostgreSQL9.2のバージョンが存在し、最新版の10.xは別途リポジトリを追加してインストールする必要がある。 まずは最新版のリポジトリを追加する。
※2018年5月1日時点では、PostgreSQL11のバージョンが出ているようですが、製品版では利用しないで！というような記述があるので、10.3にします。

```shell
yum -y localinstall https://download.postgresql.org/pub/repos/yum/10/redhat/rhel-7-x86_64/pgdg-centos10-10-2.noarch.rpm
```

#### リポジトリの追加を確認

```shell
yum list postgresql10*

#このコマンド実行で以下のpostgresqlパッケージが核にできればOK
postgresql10-server.x86_64                           10.3-1PGDG.rhel7
```

#### PostgreSQLのインストール

```shell
yum -y install libpqxx libpqxx-devel postgresql10.x86_64 postgresql10-server postgresql10-contrib postgresql10-libs postgresql10-tcl
echo 'export PATH="/usr/pgsql-10/bin/:$PATH"' >> ~/.bash_profile
source ~/.bash_profile
psql --version

#以下のバージョンが表示されていればOK
psql (PostgreSQL) 10.3
```

#### PostgreSQLの初期設定

```shell
postgresql-10-setup initdb
vim /var/lib/pgsql/10/data/pg_hba.conf

# 以下の設定になるように修正

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     peer
# IPv4 local connections:
host    all             all             127.0.0.1/32            trust
# IPv6 local connections:
host    all             all             ::1/128                 trust
# Allow replication connections from localhost, by a user with the
# replication privilege.
local   replication     all                                     peer
host    replication     all             127.0.0.1/32            ident
host    replication     all             ::1/128                 ident
```

#### PostgreSQLの自動起動と起動

```shell
systemctl enable postgresql-10
systemctl start postgresql-10
```

#### PostgreSQLにRedmine用のユーザとデータベースを作成

```shell
su - postgres
export PATH=/usr/pgsql-10/bin/:$PATH
psql
postgres=# alter role postgres with encrypted password 'PostgresPass1234';
postgres=# create user redmine with encrypted password 'RedminePass4321';
postgres=# create database redmine with encoding 'UTF-8' owner redmine;
```

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

CentOS7の標準yumリポジトリには、httpd2.4.6のバージョンが存在し、結構古いです。
そのため、新しいhttpdをyumからインストールする手順で進めます。

```shell
yum -y install "https://centos7.iuscommunity.org/ius-release.rpm"
```

古いバージョンのhttpdを削除

```shell
systemctl stop httpd
yum -y remove httpd httpd-tools
```

最新版のhttpdをインストール
`libdb-devel` `expat-devel` `openldap-devel`の3つは、yumで`httpd`と`httpd-devel`をインストールする際、必須の依存関係としてエラーが発生したので、手順に追加してみました。

```shell
yum -y install libdb-devel expat-devel openldap-devel
yum --disablerepo=base,extras,updates --enablerepo=ius -y install httpd httpd-devel
```

httpdのバージョンを確認してみる

```shell
httpd -v

# 以下のバージョン表記が出力されていればOK
Server version: Apache/2.4.33 (IUS)
Server built:   Apr 18 2018 10:39:17
```

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

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

### bundlerのインストール

Ruby用のパッケージ管理ツールであるbundlerをインストールします。Redmineが使用するgemパッケージをインストールするのに使われます。

```shell
gem install bundler
```

ここで設定しているパスワードは、後述の手順で使用します。

### Redmineのインストール

### RedmineをSVNコマンドを使ってSubversionリポジトリから取得

RedmineをSubversionのリポジトリから取得します。
取得先を`/var/lib/redmine-3.4.5`に設定して、シンボリックリンクとして`/var/lib/redmine`を作成します。
こうすることで、Redmineのバージョンアップを容易に行うことができるようになります。

Redmineのバージョンアップに関する記事もあるので参考までに
[Redmine3.3.4をRedmine3.4.5へアップグレード](https://qiita.com/You_name_is_YU/items/9b5a2f84a7f89be308d3)

```shell
yum -y install svn
svn co https://svn.redmine.org/redmine/branches/3.4-stable /var/lib/redmine-3.4.5
ln -s /var/lib/redmine-3.4.5 /var/lib/redmine
chown -R apache:apache /var/lib/redmine-3.4.5
```

svnを実行すると以下のように証明書を常に承認するかどうか聞いてくる。
`p`を入力してEnterし、Subversionリポジトリから正常にダウンロードできない場合は再度svnコマンドを実行する。

```shell
証明書情報:
 - ホスト名: 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)? p
```

#### Redmineからデータベースへ接続するための接続情報設定

パスワードは上記で設定しているパスワードです。

```shell
vim /var/lib/redmine/config/database.yml

production:
  adapter: postgresql
  database: redmine
  host: localhost
  username: redmine
  password: RedminePass4321
  encoding: utf8
```

### 設定ファイル config/configuration.yml の作成

```shell
vim /var/lib/redmine/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
```

### Redmineのgemパッケージインストール

```shell
cd /var/lib/redmine
bundle install
```

### Redmineの初期設定と初期データ登録

上記までで、Redmineのインストール作業が完了したので、後続の手順で初期設定などを行っていきます

### セッション改ざん防止用秘密鍵の作成

```shell
vim /var/lib/redmine/config/environment.rb

# 以下の行を追加する
ENV['RAILS_ENV'] ||= 'production'

# 保存したら以下のコマンドを実行する
RAILS_ENV=production bundle exec rake generate_secret_token
```

### データベース(PostgreSQL)にテーブルを作成

```shell
cd /var/lib/redmine
RAILS_ENV=production bundle exec rake db:migrate
```

### デフォルトデータの登録

```shell
RAILS_ENV=production REDMINE_LANG=ja bundle exec rake db:migrate
```

### Passengerのインストール

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

```shell
gem install passenger
```

### PassengerのApache用モジュールのインストール

```shell
yum -y install gcc-c++
passenger-install-apache2-module --auto --languages ruby
```

### Apache用設定内容の確認

```shell
passenger-install-apache2-module --snippet

LoadModule passenger_module /opt/rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/passenger-5.2.3/buildout/apache2/mod_passenger.so
<IfModule mod_passenger.c>
  PassengerRoot /opt/rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/passenger-5.2.3
  PassengerDefaultRuby /opt/rbenv/versions/2.5.1/bin/ruby
</IfModule>
```

### Apacheの設定

```shell
vim /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 /opt/rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/passenger-5.2.3/buildout/apache2/mod_passenger.so
<IfModule mod_passenger.c>
  PassengerRoot /opt/rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/passenger-5.2.3
  PassengerDefaultRuby /opt/rbenv/versions/2.5.1/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"
```

```shell
vim /etc/httpd/conf/httpd.conf

DocumentRoot "/var/lib/redmine/public"  # ← こうなるように修正
```

### Apacheの起動および自動起動の設定

```shell
systemctl enable httpd.service
systemctl start httpd.service
```

## Redmineへの接続

これまでの手順でようやくRedmineの環境構築が完了です。
以下のURLへアクセスして、正常に接続できるか確認してみましょう。

http://192.168.33.10/

Redmineのページが表示されればOKです。
あとは、ログイン機能を使って`admin/admin`で初回ログインし、パスワード変更してからRedmineの機能を堪能するのみです！