【CentOS8に最新バージョンのRedmineとGitLabを構築する】事前調査

# はじめに

RHEL8の仮想サーバを入手したため、RedmineとGitを構築し業務で活用したい。そこで、まずはCentOS8上で検証してみることにした。ここでは、事前に調査した内容をまとめておく。

## 関連記事

[【CentOS8に最新バージョンのRedmineとGitLabを構築する】Redmine構築][Redmine構築]
[【CentOS8に最新バージョンのRedmineとGitLabを構築する】GitLab構築][GitLab構築]

[Redmine構築]: https://qiita.com/Doshi/items/293442ef0ea3999010fb
[GitLab構築]: https://qiita.com/Doshi/items/1ea1515e614ef8287096

# １．コンテナで構築する場合を調べた
勉強がてらコンテナで構築したいと思ったが、結論、早々に諦めた。ざっと調べたところ、RHEL8（正確にはRHEL 7.6以降）のコンテナエンジンにはPodmanが採用され、Dockerはサポート対象外となっている。Dockerを管理する`docker-compose`に対応したサードパーティ製の`podman-compose`が提供されているようだが、まだナレッジも少なく実用的ではない模様。

# ２．Redmineについて調べた
Redmineとは、OSSでWeb型のプロジェクト管理ツールである。
[Redmine公式サイトのInstalling Redmine][RedmineInstall] から現時点（2021/3）の情報を抜粋する。

## Redmineの最新リリース
4.1.2 (2021-03-21)
4.0.8 (2021-03-21)

Redmineの代表的なプラグインは、4.1, 4.0のバージョンに対応している模様。

## RedmineがサポートするRubyのバージョン
| Redmineバージョン　 | Rubyバージョン | Railsバージョン　 |
|:--|:--|:--|
| 4.1 | Ruby 2.3, 2.4, 2.5, 2.6 | Rails 5.2 |は
| 4.0 | Ruby 2.2.2, 2.3, 2.4, 2.5, 2.6　 | Rails 5.2 |

## Redmineがサポートするデータベースとそのバージョン
* MySQL 5.5 または 5.7（5.6 と MariaDB は問題あり）
* PostgreSQL 9.2 以降

# ３．Redmineの動作環境を、CentOS8上に構築できるのか調べた
## CentOS8
CentOS8のバージョンは現時点（2021/3）の最新版バージョンを利用する。なお、CentOS8は2021年でサポート終了のため、CentOS Streamへの移行が推奨されている。

```
[doshi@centos8 ~]$ cat /etc/redhat-release
CentOS Linux release 8.3.2011
[doshi@centos8 ~]$ uname -r
4.18.0-240.el8.x86_64
```

CentOS8ではパッケージ管理ソフトyumが後継のdnfに変更された。有効なリポジトリを確認してみる。新たなAppStream含め、3つのリポジトリが有効化されていた。

```
[doshi@centos8 ~]$ dnf repolist
repo id                                                 repo の名前
appstream                                               CentOS Linux 8 - AppStream
baseos                                                  CentOS Linux 8 - BaseOS
extras                                                  CentOS Linux 8 - Extras
```

## Ruby
[Rubyの公式サイト][www.ruby-lang.org] に、サポートする動作環境の明確な記載はない。最近のRubyは最近のLinux上で問題なく動く模様。なお、CentOS8のリポジトリにあるRubyバージョンは2.5。

```
[doshi@centos8 ~]$ dnf list --available ruby.x86_64
ruby.x86_64            2.5.5-106.module_el8.3.0+571+bab7c6bc            appstream
```

RedmineがサポートするRubyバージョンをCentOS8上に問題なく準備できそう。

## データベース
### MySQL 動作環境
[MySQL公式サイト][www.mysql.com]  から現時点（2021/3）の情報を抜粋する。

| Operating System | Architecture | MySQL |
|:--|:--|:--|
| Red Hat Enterprise Linux 8 / CentOS 8　 | x86_64, ARM 64　 | 8.0 |
| Red Hat Enterprise Linux 7 / CentOS 7　 | ARM 64 |  8.0 |
| Red Hat Enterprise Linux 7 / CentOS 7　 | x86_64 |  8.0, 5.7　  |

RHEL8、CentOS8上ではMySQL 8.0がサポートされている。なお、CentOS8のリポジトリにあるMySQLバージョンも8.0。

```
[doshi@centos8 ~]$ sudo dnf list --available mysql.x86_64
mysql.x86_64            8.0.21-1.module_el8.2.0+493+63b41e36            appstream
```
RedmineがMySQL8.0をサポートしていないので、データベースにMySQLは採用できない。

### PostgreSQL 動作環境
[PostgreSQL公式サイト][www.postgresql.org] に、サポートする動作環境の明確な記載はない。最近のPostgreSQLは最近のLinux上で問題なく動く模様。なお、CentOS8のリポジトリにあるPostgreSQLバージョンは10.15。

```
[doshi@centos8 ~]$ dnf list --available postgresql
postgresql.x86_64            10.15-1.module_el8.3.0+619+dbc95fbc            appstream
```
RedmineがサポートするPostgreSQL 9.2以降をCentOS8上に問題なく準備できそう。

# ４．Redmineの調査まとめ
CentOS8上にRedmineを構築する場合、データベースにはPostgreSQLを採用する必要がある。なお、Redmineには、Bitnami Redmineというオールインパッケージが準備されているが、データベースにMySQLがバンドルされているため、今回は利用しない。そのため、各種ソフトウェアを個別にインストールし構築する必要がある。

# ５．GitLabについて調べた
GitとはOSSの分散型バージョン管理システムである。Gitには標準のGUIが存在しないので、Gitを便利に使えるようにしたWebサービスが複数存在し、今回は評判のよいGitLabを選定した。
[GitLab Docs の Requirements][requirements] から現時点（2021/3）の情報を抜粋する。

## Omnibus GitLabがサポートするOSバージョン
GitLabには、Omnibus GitLabというオールインパッケージが準備されている。

* Linuxディストリビューション
 * CentOS (7/8)
 * Red Hat Enterprise Linux (please use the CentOS packages and instructions)

## Omnibus GitLabのバージョンの見方
現時点（2021/3）で、[gitlab’s repos][packages.gitlab.com]での最新バージョンは`gitlab-ee-13.9.4-ee.0`の模様。
[packages.gitlab.com]: https://packages.gitlab.com/gitlab

Omnibus GitLab のバージョンの表記
 `MAJOR.MINOR.PATCH-EDITION.OMNIBUS_RELEASE`

| Component | Meaning | Example |
|:--|:--|:--|
| MAJOR.MINOR.PATCH | 13.9.3 | GitLabのバージョン |
| EDITION | ee | GitLabのエディション |
| OMNIBUS_RELEASE | 0 | 同じGitLabでのビルドバージョン（基本 ０） |

## Omnibus GitLabにバンドルされたソフトウェア
Omnibus GitLabにバンドルされた各種ソフトウェアのバージョンは、インストールした後の　`/opt/gitlab/version-manifest.txt`で確認できる。

未インストールの状態で、バンドルされたソフトウェアのバージョンを知りたい場合、[omnibus-gitlab][gitlab.com] のリポジトリを確認する必要がある。例として、Rubyバージョンを確認してみる。
[gitlab.com]: https://gitlab.com/gitlab-org/omnibus-gitlab/-/tree/13-5-stable

13-5-stable のブランチを選択する。
> ![13-5-stable.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/242519/3e0350ec-229e-1465-1193-17582b87d2fe.png)

`config/software/ruby.rb`の中を確認してみる。
![Ruby.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/242519/f23bcc48-2763-6103-28e9-d573f6872d58.png)

以下の記載を発見。Ruby 2.6.6 がバンドルされていることが分かった。
`version('2.6.6') { source sha256: '364b143def360bac1b74eb56ed60b1a0dca6439b00157ae11ff77d5cd2e92291' }`

## Omnibus GitLabの仕組み
Omnibus GitLabの仕組みとして、以下の図でTCPの記載がない箇所は、Unix Domain Socketというプロセス間での通信を行う。例として、PostgresqlがTCP通信ではないため、デフォルトポート番号5432で起動している他のPostgreSQLと同一ホスト内で同居出来る。WebサーバのNginxはTCP通信であるため、他のWebサーバを同居させる場合はポート番号が競合しないように気をつける必要がある。
![architecture_simplified.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/242519/405a47a7-d152-28e1-0227-b65254bb5720.png)

# ６．GitLabの調査まとめ
Omnibus GitLabというオールインワンパッケージでのインストールを行う。WebサーバのNginxとのポート番号競合には注意する必要があるが、その他は気にしないで大丈夫そう。Rubyも個別にインストールしたバージョンとは別管理となり、Omnibus GitLabは独立したものとして考えることができる。

# おわりに
ご指摘・アドバイス等あればご遠慮なくお願いいたします。

## 参考文献
この記事は以下の情報を参考にした。

* Redmine
 * [Redmine公式サイト][www.redmine.org]
 * [Rubyの公式サイト][www.ruby-lang.org]
 * [MySQL公式サイト][www.mysql.com]
 * [PostgreSQL公式サイト][www.postgresql.org]

* GitLab
 * [GitLab公式サイト][about.gitlab.com]


[RedmineInstall]: https://www.redmine.org/projects/redmine/wiki/RedmineInstall
[www.redmine.org]: https://www.redmine.org/
[www.ruby-lang.org]: https://www.ruby-lang.org/en/
[www.mysql.com]: https://www.mysql.com/jp/
[www.postgresql.org]: https://www.postgresql.org/

[requirements]: https://docs.gitlab.com/ee/install/requirements.html
[about.gitlab.com]: https://about.gitlab.com/