CentOS8にプロジェクト管理ツール『Redmine』をインストール（データベースはPostgreね）

#バージョン
CentOS Linux release 8.2.2004 (Core)


#Redmineって何ぞ？
オープンソースのプロジェクト管理ツール。
プログラム言語『Ruby』の『Ruby on Rails』というフレームワークで動いてるWebアプリケーション。

Redmineの日本版ページに色々書いてあります。
 https://redmine.jp/overview/

* プロジェクト管理ツールを導入するとこんなメリットがあるよ。
* Redmineの特徴ってこんな感じだよ。

などなど。


#本家インストールマニュアル
~~ここ http://blog.redmine.jp/articles/3_4/install/centos/
この記事では、ただマニュアル通りに進めてくだけなんだけど、マニュアルはCentOS7.3を前提にしています。~~

~~もしかしたらバージョン8だけの特殊な設定が必要かもしれない…。
そういう検証もしつつって感じです。~~

CentOS8に対してCentOS7.3の方法でインストールしようとしたら見事に失敗…(´・ω・`)
最初からやり直すハメに…。
8には8の、7には7のやり方がある。


#参考サイトさん
こちらの手順をなぞらせてもらいました。
https://serverbuild.net/2020/03/12/centos8-redmine-howtoinstall/


#必要なソフトのインストール
yumからdnfへ移行してるのがCentOS7との違いかなあ…。

```
dnf -y update
dnf -y groupinstall "Development Tools"
dnf -y install openssl-devel readline-devel zlib-devel curl-devel libffi-devel subversion
dnf -y install postgresql-server postgresql-devel
dnf -y install httpd httpd-devel
```

#Rubyインストール
ダウンロード、解凍、ソースコードからインストール。

```
cd /opt/
wget https://cache.ruby-lang.org/pub/ruby/2.6/ruby-2.6.5.tar.gz
tar zxvf ruby-2.6.5.tar.gz
cd ruby-2.6.5/
./configure --disable-install-doc
make
make install
```

```ruby -v``` でRubyのバージョン確認したら2.6.5になっていなかった…。
Redmineインストール失敗した時の名残かな？うーん…よく分からん…(´・ω・`)

ということでちょっと寄り道。
**rbenv ≒ バージョンを指定してRubyをインストールできるやつ** を用意します。

参考サイトさん
https://qiita.com/lenore/items/259556172e62a0ae8e50

まずは、rbenvをインストールするのに必要なツールを用意するんす。

```
yum -y install git bzip2 gcc gcc-c++ openssl-devel readline-devel zlib-devel
yum -y install epel-release
yum -y install nodejs
```

Gitでrbenvのコードをclone。

```
git clone https://github.com/rbenv/rbenv.git /usr/local/rbenv
git clone https://github.com/rbenv/ruby-build.git /usr/local/rbenv/plugins/ruby-build
```

/etc/profile.d/rbenv.sh というファイルを新規作成。
中身は下記のように。

```
export RBENV_ROOT=/usr/local/rbenv
export PATH=${RBENV_ROOT}/bin:$PATH
eval "$(rbenv init --no-rehash -)"
```

作成したshを実行。

```
source /etc/profile.d/rbenv.sh
```

それが終わったら、 ```visudo``` コマンドでsudo権限の設定変更をします。

下記行を追記。

```
Defaults env_keep += "RBENV_ROOT"
```

下記（Defaults secure_path）を変更。

```
Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/rbenv/bin:/usr/local/rbenv/shims
```


さて、rbenvがインストールできたか ```rbenv --version``` で確認。


rbenvがインストールできたら…バージョン指定してRubyインスコするぞい。下記コマンド。

```
rbenv install 2.6.5
```

2.6.5を適用するまでがインストール。下記コマンド。

```
rbenv global 2.6.5
rbenv rehash
```

改めて ```ruby -v``` でRubyのバージョンが2.6.5になっているか確認！


#bundlerインストール
下記コマンドでインストール。

```
gem install bundler
```


#Postgre初期化

まずは初期化コマンド。

```
postgresql-setup initdb
```

そして、 /var/lib/pgsql/data/pg_hba.conf を編集。
confファイル内の ```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
```

Postgre起動、そして再起動時に自動で立ち上がるように設定。

```
systemctl start postgresql
systemctl enable postgresql
```

PostgreにRedmine用のユーザー作成。

```
-u postgres createuser -P redmine
```
『ユーザー名=redmineのパスワードは何にする？』って聞かれるから、任意のパスワードを設定。
当たり前だけどパスワード控えておきましょい。（Redmineの設定ファイルに書くから）


PostgreにRedmine用のデータベース作成。

```
-u postgres createdb -E UTF-8 -O redmine -T template0 redmine
```


#Remineインストール
まずはRedmineのソースコードダウンロード。

```
cd /opt/
wget https://www.redmine.org/releases/redmine-4.0.6.tar.gz
```

しかし、証明書が失効していますのエラーになる。
--no-check-certificate のオプション付けて証明書を検証しないってこともできるけど…。
念のために別の方法で圧縮ファイルをダウンロードして/opt/に置いた。

解凍。そして移動。

```
tar zxvf redmine-4.0.6.tar.gz
mv /opt/redmine-4.0.6 /var/lib/redmine
```
/var/lib/redmine フォルダーが存在している場合は /var/lib/redmine/redmine-4.0.6 に移動されてしまうから注意ね！後述のデプロイで失敗するよ。
（Redmineインスコ失敗してやり直する時とかそういうことあるよ）


/var/lib/redmine/config/database.yml を新規作成します。
中身は下記のように。

```
production:
  adapter: postgresql
  database: redmine
  host: localhost
  username: redmine
  password: "Postgreのユーザー名=redmineのパスワード"
  encode: utf8
```

下記コマンドでデプロイ。

```
cd /var/lib/redmine
bundle install --without development test rmagick --path vendor/bundle
bundle exec rake generate_secret_token
RAILS_ENV=production bundle exec rake db:migrate
RAILS_ENV=production REDMINE_LANG=ja bundle exec rake redmine:load_default_data
gem install passenger -v 5.1.12 --no-doc
passenger-install-apache2-module --auto --languages ruby
```

#httpd設定
/etc/httpd/conf/httpd.conf の DocumentRootを変更。

```
DocumentRoot "/var/lib/redmine/public"
```
…となるように。

そして、下記コマンド。

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

んでんでんで、/etc/httpd/conf.d/redmine.conf を新規作成。
内容は下記のように。

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

LoadModule passenger_module /usr/local/rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/passenger-5.1.12/buildout/apache2/mod_passenger.so
<IfModule mod_passenger.c>
  PassengerRoot /usr/local/rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/passenger-5.1.12
  PassengerDefaultRuby /usr/local/rbenv/versions/2.6.5/bin/ruby
</IfModule>
```
ただし、LoadModule passenger_module… 以下は ```passenger-install-apache2-module --snippet``` を実行した時の戻り値にします。


Apacheを再起動。そしてOS再起動時にApacheが自動起動するように設定。

```
systemctl restart httpd
systemctl enable httpd
```

ブラウザでCentOSのIPを打って、下図が表示されればOKなり。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/52f89593-0188-90d8-d961-2ac378c2811f.png)
ひとまず **ホーム画面が表示される** ってことができたので、一旦お疲れ様。
記事が長くなってしまったので、『アカウント作成』とかのRedmine内の初期設定は別記事にしますん。



#もし、http通信ができなかったら…その1
ファイアウォールでブロックされている可能性ありんす。
なので、ファイアウォールの許可設定方法を残しておきます。

下記コマンドで有効化。

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

```success``` のレスポンスで安心してはらめぇ！
ファイアウォールを設定をリロードして反映するまでが設定。下記コマンド。

```
firewall-cmd --reload
```

```success``` が返ってくれば設定OK。

本当かぁ～？本当にそうかぁ～？
というわけで確認コマンド。

```
firewall-cmd --zone=public --list-services
```

レスポンスに ```http``` が含まれていればOK。


#もし、http通信ができなかったら…その2
SELinuxにブロックされている可能性あり。
なので、SELinux無効化方法を残しておきます。


本当はSELinux有効化の方がいいと思うけど、この記事では **とにかく使えるようにする** が目的なので無効化。

んでんでんで、まずはSELinuxがいま **有効になってるの？** **無効になってるの？** を知らないといけない。
下記コマンドを打つのじゃ。

```
getenforce
```

```Disabled``` なら無効化されているので、この工程はスルーなのじゃ。

有効化されてたら無効化するのじゃ。下記SELinux設定ファイルをエディタで編集。

```
/etc/sysconfig/selinux
```
下図のように ```SELinux=disabled``` として保存。そしてCentOSを再起動して設定を反映さす！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/f7803484-f1ef-4b74-346b-a86c93630fc5.png)


#蛇足
RedmineのデータベースはMySQLよりPostgreがいいかなーって思います。
公式のドキュメントを読むと、PostgreがRedmineのデファクトスタンダードっぽい印象を受けます。
デファクトスタンダードということはつまり…Postgreなら『最適化されていてサクサク動く』『トラブル解決のノウハウが多い』可能性が高い！

トライアル＆エラーを繰り返したから、いろんなファイルがごちゃごちゃできちゃった…(´・ω・`)
Dockerを扱えるようにしたいね。


残課題。

* viの最低限の使い方も記事にしとこう。
* SELinuxとは何をしてくれる奴なのかのもうっちょとちゃんと理解。（有効化 or 無効化 の違い）
* SELinux有効化した上でRedmine使えるようにしよう。
* ただコマンドをコピペするんじゃなくて、一体何の為のものなのかを理解しときましょい。


#次の記事
[インストール直後のRedmineに最低限の初期設定とテストプロジェクト作成をしようジャマイカ](https://qiita.com/waokitsune/items/f214ad783c7dd073aaaf)