Redmine4.2をCentOS8に構築する

# ちょっとだけ自分語り（という名の保険）

- 4年目にして自分がエンジニアと自信満々に言えなくなってきた人間。エンジニアとして知ってて当然な知識も知らないことがざらにある。
- それゆえ、「常識」と言われることも記載している可能性あり。まあ、大目に見てください。

# 概要
- 今までRedmineという名前だけは聞いたことがあった。まともに触ったことはほぼない。
- そんな人間がとあるチャンスが巡ってきたことにより、1から構築することになった。その奮闘記録。

# 環境
タイトル通りのことしかかけない
- OS:CentOS8
- Redmine:Redmine4.2.2
- DB:Postgres10

# 手順
- 以下のサイトにお世話になりました。本当に先人ほど偉大なものはない。<br>
https://vertys.net/centos-install-newly-and-create-redmine-environment/ <br>
ただ、この手順通りやってもエラーが発生し、都度都度泣く羽目になったのでその時の奮闘をメモ。

## redmineインストール
- 最新版をインストールしたくて、Ansibleプレイブック（自動的にインストールできる便利なやつ）を使わずに、ひとつずつ手動で行った。~~（この選択が誤っていたかもしれない）~~

### 必要なパッケージのインストール
- 正直なにかよくわかってない開発ツール

```
# dnf -y groupinstall "Development Tools"
# dnf -y install openssl-devel readline-devel zlib-devel curl-devel libffi-devel
```

- サイトではMySQLを使用しているが、私はPostgresに飼いならされた人間なので、Postgresを使用する。
- この記事を書いている時点で、最新はpostgres14だったのだが、後述するタイミングで見事に苦労したので、postgres10をインストール。
 
```
# dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm
# dnf -qy module disable postgresql
# sudo dnf install -y postgresql10-server
# systemctl enable postgresql-10
# sudo systemctl start postgresql-10
```

- Apache

```
# dnf -y install httpd httpd-devel
```

### Rubyインストール
- ちなみに私はRubyを触ったことがない

```
# curl -O https://cache.ruby-lang.org/pub/ruby/2.7/ruby-2.7.0.tar.gz
# tar xvf ruby-2.7.0.tar.gz
# cd ruby-2.7.0
# ./configure --disable-install-doc
# make
# make install
```

- Ruby用のパッケージ管理ツール「bundler」

```
# gem install bundler
```

### Postgresの設定
- Redmineのデータを保存するためにロール・テーブルを作成（DB名やパスワードなどは任意で変えてください）

```
postgres=> CREATE ROLE redmine LOGIN ENCRYPTED PASSWORD 'password';
postgres=> CREATE DATABASE redmine_production WITH ENCODING='UTF8' OWNER=redmine;
```

### Redmineのインストール
- ここは簡単(バージョンは新しいものに任意で置き換えてください）

```
# cd /var/lib
# curl -O https://www.redmine.org/releases/redmine-4.2.2.tar.gz
# tar xvf redmine-4.2.2.tar.gz
# mv redmine-4.2.2 redmine
```

- 展開後、DBに接続するための設定ファイルを作成。（database.yml.exampleをコピーして作ると良い）
- Postgresの設定で作成したDB,ロールの設定を反映する。また、Postgres以外の設定（MySQLなど）はコメントアウトする。
 
```
# vi /var/lib/redmine/config/database.yml

# PostgreSQL configuration example
production:
  adapter: postgresql
  database: redmine_production
  host: localhost
  username: redmine
  password: "password"
  encoding: utf8
```

- Redmineの依存パッケージのインストール。まじでここで死んだ。許すまじbundle。

```
# cd /var/lib/redmine
# bundle install --without development test --path vendor/bundle
```
2個めのコマンドを実行すると、エラーが発生することがある。
そんなときは、以下を実行してみる。調べると、「これを実行すれば解決するよ^^」みたいな記事ばっかり出たし、大丈夫だろう・・・

```
# yum install postgresql-devel
```

**大丈夫じゃなかった。**泣いた。
どうやら、build.pgのパス指定がうまく行ってないっぽい。なんやそれは。もっと説明してくれ。

```
bundle config build.pg --with-pg-config=/usr/pgsql-10/bin/pg_config
```

これでエラーが出なくなった。
（postgres14でなくしたのは、ここでインストールしたpostgresql-develが10だったから。14もあるのかもしれないが、調べる気力がなかった・・・）


### Redmineの初期設定
- セッションの改ざんを防止するための秘密鍵を作成（よくわかってない）

```
# bundle exec rake generate_secret_token
```

- database.ymlで指定したデータベースに、Redmineのテーブルを作成

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

ここでエラーが発生したら、pg_hba.confで以下の設定をしてから、postgresを再起動してみる。

```
local   all             all                                     md5←peerの可能性あり
```


### Passengerのインストール
- RailsアプリをApacheで実行するのに必要らしい。

```
# gem install passenger -v 5.1.12
```

- PassengerをApacheで使用するためにモジュールをインストール。

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

### Apacheの設定
- Apache設定を確認

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

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

- コマンドを実行して表示された設定情報を、Apacheの設定ファイルに記述。表示された内容を含め、以下の設定ファイルを作成すればOK。

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

Alias /redmine /var/lib/redmine/public

<Location /redmine>
  PassengerBaseURI /redmine
  PassengerAppRoot /var/lib/redmine
</Location>

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

LoadModule passenger_module /usr/local/lib/ruby/gems/2.7.0/gems/passenger-5.1.12/buildout/apache2/mod_passenger.so

<IfModule mod_passenger.c>
  PassengerRoot /usr/local/lib/ruby/gems/2.7.0/gems/passenger-5.1.12
  PassengerDefaultRuby /usr/local/bin/ruby
</IfModule>
```

- Apache起動

```
# systemctl enable httpd
# systemctl start httpd
```
ここでエラーが発生した場合、`/usr/local/lib/ruby/gems/2.7.0/gems/passenger-5.1.12/buildout/apache2/mod_passenger.so`が存在するか確認してみる。
存在しない場合、以下のコマンドを実行して再度Apache起動してみる。

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

- CentOS8系は、そのままではhttpの通信ができないらしいので、80番ポートを開放してあげる必要がある。ファイアウォールに例外登録し、設定を反映。

```
# firewall-cmd --permanent --zone=public --add-service=http
# firewall-cmd --reload
```

- Redmineディレクトリのオーナーをapacheに変更

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

## ブラウザからアクセス
- ここまで来たら、あとはアクセスしてみるだけ。`http://サーバのIPアドレス/redmine`に無事アクセスできたら完了！！！！

# まとめ
- いい経験になったが、本当に苦労した。Redmineは便利らしいし、もっと導入をやりやすくしてほしい。
- 知らないことが多々あったので、落ち着いたら調べて自分のものにする。多分。
- ずっと投稿してみたかったので、今回始めて記事にできてとても満足。また何か記事にできたらいいなと思う。