CentOS7でRedmine構築

## はじめに

みなさんは何でタスク管理をしていますか？
私は下記の条件をもとに**Redmine**を選びました。
1. 無料で使える
1. 自分好みにカスタマイズができる
1. プラグインが充実している

そこでまずは、自分のローカル環境にRedmineを構築し、
使い続けて良さそうであれば外部サーバ上に構築しようと考えました。

今回の記事ではローカル環境での使用を想定しているため、
httpsで接続できるようにするところまでは記載していません。
どこかのタイミングでhttpsで接続する場合の構築手順も書くと思います。。

## 対象読者

- Linuxを直で触りたい人
- Redmineを触りたい人

## Redmineとは

Redmineについては、この記事が参考になりました！
[入門 — Redmine Slides](http://slides.redmine.jp/slides/beginner/)

## 環境

| 項目   | バージョン |
| ----           | ---- |
| Redmine  | Redmine4.2    |
| OS       | CentOS 7.8    |
| データベース   | MySQL 8.0.25  |
| webサーバ   | Apache/2.4.6  |
| Ruby     | ruby 2.4.6    |

## 手順

できるだけパッケージ管理ツール(yum等)を使ってソフトを管理したいため、
ソースコードをダウンロードしてビルドする手順は避けています。
そのため最新バージョンを使っていないソフトもあります。

### 1. SELinux 無効化

下記の設定ファイルを開き、`SELINUX=disabled`に変更します。

```
$ sudo vi /etc/sysconfig/selinux　
```

※セキュリティ的にはSELinuxの無効化は避けたいですが、ローカル環境のため一旦は簡単なやり方で構築します。調べたところSELinuxを有効化した状態でも構築できるので時間のある人はぜひ構築してみてください！

### 2. Ruby, Passengerのビルドに必要なパッケージのインストール

```
$ sudo yum install openssl-devel readline-devel zlib-devel curl-devel libyaml-devel libffi-devel
```

### 3. MySQLのインストール

```
 $ sudo yum install mysql mysql-devel
```
　　※　MySQL の構築手順は省きます。

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

```
$ sudo yum install httpd httpd-devel
```

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

```
$ sudo yum install ImageMagick ImageMagick-devel ipa-pgothic-fonts
```

### 6. Rubyのインストール
```
$ sudo yum  install centos-release-scl-rh centos-release-scl
$ sudo yum --enablerepo=centos-sclo-rh  install rh-ruby24 rh-ruby24-ruby-devel
```
### 7. インストールしたRubyの環境変数の設定

以下の設定はコンソールからの実行時に既存のRubyではなく、今回インストールしたRubyを使用するようにしています。

```
# cat << 'EOF' | sudo tee /etc/profile.d/rh-ruby.sh
#!/bin/bash
source scl_source enable rh-ruby24
EOF
```

### 8. 共有ライブラリにパス設定
以下のファイルにライブラリパスを設定します。

```
$ sudo vi /etc/ld.so.conf
====
/opt/rh/rh-ruby24/root/usr/lib64
```

### 9. bundlerのインストール

```
$ sudo gem install bundler
```

※IPv6を利用してのインストールは失敗するため、使用するネットワークを確認してください。

参考サイト：
[【Rails】gem updateやgem installコマンドでtimed outやCould not find a valid gemが出たときの対処法](https://prograshi.com/framework/rails/rails-gem-timeout-error/)

### 10. Redmine用のデータベース作成
以下のコマンドでmysqlにアクセス後、テーブル作成のSQLを発行します。
※アクセスするユーザはテーブル作成の権限があること
```
$ mysql -u [ユーザ名] -h [ホスト名(localhost)] -p

> create database redminedb
```

### 11. Redmineのインストール
```
$ svn co https://svn.redmine.org/redmine/branches/4.2-stable /var/lib/redmine
```
### 12. Redmine使用時のデータベースへの接続設定

下記の内容でRedmineのインストールディレクトリ`/var/lib/redmine/`直下に`/config/database.yml/`を作成します。

```
production:
  adapter: mysql2
  database: redminedb
  host: localhost
  username: <ユーザ名>
  password: "<パスワード>"
  encoding: utf8
```


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

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


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

```
$ bundle exec rake generate_secret_token
```

### 16. データベースのテーブル作成

`database.yml`で指定したデータベースにテーブルを作成します。

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

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

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

### 18. Passengerのインストール

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

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

opensslとの共存はできないため、インストール済みの場合は削除してからモジュールのインストールを行います。
```
($ yum remove openssl openssl-devel)
$ passenger-install-apache2-module --auto --languages ruby
```

### 20. Apache用設定内容確認

次の21.Apacheの設定で使用するための設定を出力します。

```
$ passenger-install-apache2-module --snippet
```

### 21. Apacheの設定

以下の内容で、`/etc/httpd/conf.d/redmine.conf`を作成します。
`#`で記載のコメントの部分は省略可。

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

# 下記の５行は
# passenger-install-apache2-module --snippet で表示されたものを使用してください。
#
# LoadModule passenger_module /opt/rh/rh-ruby24/root/usr/local/share/gems/gems/passenger-5.1.12/buildout/apache2/mod_passenger.so
# <IfModule mod_passenger.c>
# PassengerRoot /opt/rh/rh-ruby24/root/usr/local/share/gems/gems/passenger-5.1.12
#  PassengerDefaultRuby /opt/rh/rh-ruby24/root/usr/bin/ruby
# </IfModule>

PassengerMaxPoolSize 20
PassengerMaxInstancesPerApp 4
PassengerPoolIdleTime 864000
PassengerStatThrottleRate 10

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

Alias /redmine /var/lib/redmine/public
<Location /redmine>
  PassengerBaseURI /redmine
  PassengerAppRoot /var/lib/redmine
</Location>
```

その後、下記のコマンドでApacheを再起動します。

```
$ sudo systemctl restart httpd
```

### 22. Apache上でPassengerを動作させるための設定
Redmineのディレクトリに権限を付与します。

```
$ sudo chown -R apache:apache /var/lib/redmine
```

また、RedmineのURL設定を行い、設定を反映させます。
```
$ vi /etc/httpd/conf.d/redmine.conf
==========
Alias /redmine /var/lib/redmine/public
<Location /redmine>
  PassengerBaseURI /redmine
  PassengerAppRoot /var/lib/redmine
</Location>
==========

$ sudo service httpd configtest
$ sudo systemctl restart httpd
```

### 23. Redmineログイン
ブラウザのURLに「(RedmineをインストールしたIPアドレスまたはホスト名)/redmine」を入力し、アクセスします。
Redmineのログイン画面が表示されたら、環境構築完了!! お疲れさまでした!!

## さいごに

ここまで長い道のりだったと思います。私は下記の記事を参考に構築しましたが、
RedmineやRubyのバージョンの違いに苦しみました。。。エラーが山盛りでましたね。
この記事もいつかは古くなりコピペでは構築できないことも出てくるのでしょう。

最後に記載すべきではないかもしれませんが、Dockerを使った方が楽です。
私は現在Dockerを利用してRedmineを使っています。。。(ここまで付き合ってくれた方は申し訳ないです。)
もしかしたら何かしらの制約でDockerは使えないけどRedmineは使いたいよーっという人には需要があるかもしれないですね。
Dockerを利用した構築方法もどこかで記事にしたいと思います。

## 参考サイト

- [Redmine 3.4をCentOS 7.3にインストールする手順 | Redmine.JP Blog](https://blog.redmine.jp/articles/3_4/install/centos/)
- [CentOS 7でRuby 2.4を最速インストール](https://oku.edu.mie-u.ac.jp/~okumura/misc/170925.html)
- [CentOSへのRubyインストールはSoftware Collections(SCL)からのyum installがベスト - grep Tips *](https://www.greptips.com/posts/1288/)
- [共有ライブラリへパスを通す | hajichan.net technical version](http://www.8wave.net/ldconfig.html)