CentOS8でWebサーバやMySQLを使ったデータベースサーバ、Ruby on Railsを作ってきましたので、この機能を使ったRedmineを立ち上げてみます。Redmineはプロジェクト管理に使えるオープンソースソフトウェアです。
CentOS8でRedmineを構築するのは想定より面倒でした。備忘録としてまとめておきたいため、ここにまとめます。

RedmineはRuby on RailsとLAMPの上で動作します。CentOS8でRedmineを動作させるには2つのポイントを押さえる必要があります。他は従来の手法で構築できました。
- Passengerはgem経由でインストールする
- Redmineの指定したrailsのバージョンを使う
Redmineが動作するCentOS8のインストールと設定
Redmineに適したOSの設定が必要になりますので、簡単にまとめておきます。
CentOS8のインストール
まずはCentOS8のインストールです。手順はCentOSのインストールを最短で!に詳しく説明していますので、参考にしてください。OSに関しては説明している手順そのままでOKです。
SELinuxの無効化
WordPressのインストールではSELinuxを有効にしたまま設定ができましたが、Redmineは設定する項目が多すぎましたので、SELinuxを無効にします。
/etc/selinux/configを編集します。

上の図は、viで/etc/selinux/configを開き、行数を表示させた状態です。
ちなみにviで行数を表示するにはコマンドモードで、「:set number」と入力します。行数の表示を解除するにはコマンドモードで「:set nonumber」と入力します。
上の図に戻って、①SELINUX=enforcingとなっている場所を、②にあるようにpermissiveに変更します。

上の図の赤線のように変更して保存します。viで保存して終了する場合は「:wq」と入力します。
SELinuxの設定ファイルを変更したら再起動します。再起動後getenforceコマンドでpermissiveになっていることを確認します。

上の図のようにPermissiveと表示されれば大丈夫です。
setenforceコマンドでも起動後の変更できるのですが、恒久的にSELinuxを無効にするためには/etc/selinux/configファイルを修正する必要があります。
ファイアウォールの許可設定
RedmineはWebアプリケーションです。そのためHTTPとHTTPSを使います。ファイアウォールでHTTPとHTTPSの通信を許可するように設定します。ポート番号で言うと、HTTPがTCPの80番ポートを、HTTPSがTCPの443番ポートを使います。
CentOS8のfirewalldが有効な場合には、サービスのhttpとhttpsを許可してください。具体的な設定方法はfirewall-cmdでCentOS8を安全に公開しよう!で説明しています。または、firewalldを無効にしてすべての通信が通るように設定します。
Redmineに必要な機能のインストール
Webサーバのインストール
RedmineはWebアプリケーションであるため、Webサーバは必要です。ここではApacheを使います。Webサーバの構築方法はApacheをインストールしてWebサーバを簡単構築!で説明していますので、参考にしてください。
httpで接続してきたら、httpsへ転送するように常時SSL対応まで実装します。常時SSLの必要性については常時SSL化ってなぜ必要なのか?を参考にしてください。
MySQLサーバのインストール
MySQLはRedmineのデータを保管するデータベースとして使います。RedmineはPogstreSQLにもインストールできますが、LAMP環境で統一します。
MySQLサーバの構築方法は、MySQLをCentOSに簡単インストールを参考にしてください。構築するデータベースの情報は以下になります。
項番 | 項目 | 設定値 |
---|---|---|
1 | データベース名 | redmine |
2 | ユーザー名 | redmine_user |
3 | パスワード | RedM1ne |
rootでCentOS8のサーバにログインして、MySQLのデータベースを作ります。調べたところ一つ気を付ける点があって、データベースの文字コードをutf8ではなく、utf8mb4にしないと4バイトのUTF8の文字コードが入らないようです。

上の図のように、rootでログインしてから①mysqlコマンドを実行します。②データベースredmineをutf8mb4の文字コードで作ります。③redmine_userユーザーをパスワードRedM1neで作成します。④redmine_userユーザーにredmineデータベースの全権限を付与します。⑤権限変更を即時反映します(古いバージョンだと必要な場合があると思います)。最後に⑥\qのMySQLコマンドの入力を終了します。
MySQLデータベースの作成の詳細については、MySQLをCentOSに簡単インストールをご覧ください。
Ruby on Railsのインストール
RedmineはRuby on Rails上で動作します。CentOS8にRuby on Railsをインストールするのは少し手間ですが、Ruby on Railsを最短でCentOS8に構築してみようにまとめていますので、参考にしてください。
Passengerのインストール
必要なRPMを追加インストール
Redmineで使うPassengerに必要とされるパッケージを追加します。以下のパッケージをインストールしないとPassengerのインストールでエラーが出て進みません。
項番 | パッケージ名 | 説明 |
---|---|---|
1 | openssl-devel | 開発用OpenSSLライブラリとヘッダ |
2 | httpd-devel | 開発用Apacheライブラリとヘッダ |
3 | libcurl-devel | 開発用libcurlライブラリとヘッダ |
3つのパッケージをインストールします。

上の図のように、赤線の部分にdnf installコマンドでパッケージをまとめてインストールしています。

上の図の最後のように、「完了しました!」と表示されればパッケージのインストールは終了です。
Rubyのgemを使ってPassengerのインストール
PassengerはApache上でRuby on Railsのアプリケーションを動作させるためのモジュールです。PassengerはまだCentOS8のパッケージが公開されていませんのでRubyのパッケージ管理コマンドgemでインストールします。

上の図のように、rootでログインして①passengerをgemでインストールします。②1つのgemがインストールえきたことを確認します。
Apache用のPassengerモジュールをインストール
ApacheからPassengerを呼び出すmod_passenger.soモジュールを作成します。公式サイトにはCentOS8用のパッケージが公開されていないためgem経由でインストールしたpassengerを使ってインストールします。
passenger-install-apache2-moduleコマンドを実行します。

上の図のように、rootで①passenger-install-apache2-moduleコマンドを実行します。②続ける場合はEnterキーを入力し、中断して終了する場合はCtrl+Cを入植するように指示しています。
インストールを続けるので、Enterキーを入力します。

上の図のように、画面が進みます。ここではRPMでインストールを勧めますが、インストールを継続するなら赤下線のように、Enterキーを入力してくれと書いてあります。
インストールを続けるので、Enterキーを入力します。

上の図の左下赤枠のように、使いたい言語は何かと聞かれるので、RubyとNode.jsが入っている状態でEnterキーを入力して勧めます。
ここから、ソフトウェアのコンパイルが始まります。サーバの性能に依りますが、5分以内には終わると思います。

上の図のように表示されればインストールは成功です。Enterキーを入力して進みます。

上の図のように、エラーはないのですが、3つの警告がありました。エラーは無かったので、インストールは完了です。Enterキーを入力して進みます。

上の図のように、やっとPassengerのインストールが完了してコマンドプロンプトに戻ってきました。
mod_passengerをApacheに組み込む
passenger-install-apache2-moduleに引数を付けると、Apache用にmod_passengerを組み込む瀬鄭が表示されます。これを設定ファイルに流し込みます。

上の図のように進めます。①インストールで実行したコマンドpassenger-install-apache2-moduleにsnippet引数を付けて実行するとインストールしたpassengerをApacheに組み込む設定が表示されます。
②次にPassengerの設定をApacheの設定に流し込むために①の出力をリダイレクトして画面から/etc/httpd/conf.d/passenger.confに流し込みます。/etc/httpd/conf.d/*.confはApacheが自動で読み込みますので、これで準備はできました。
③念のため設定でエラーがないことをapachectlコマンドで確認します。④Syntax OKを表示されて設定上エラーがなければ、⑤Apacheを再起動します。apachectl gracefulは設定の再読み込みだけでモジュールを読み込まないので、Apacheの再起動が必要です。
Redmineの設定
Resmineの動作に環境が整いましたので、いよいよRedmineの設定に入ります。まずはRedmineをダウンロードします。公式ダウンロードサイトを開いて最新安定板をダウンロードします。

上の図のStable releasesと記載のある赤枠部分が最新安定板です。tar.gzかzip形式をダウンロードします。
ダウンロードしたら、/var/www/html/以下に展開します。

上の図では、tar.gzのファイルを展開していますが、zipの場合はunzipを使って展開してください。展開後はファイルの所有権をWebサーバを実行するapacheユーザーとapacheグループにすべて変更します。chownの-Rはディレクトリ以下のすべてのファイルとディレクトリに適用するオプションです。
次はWebサーバのディレクトリ構成を変更します。先ほど展開したディレクトリの中にredmine-4.1.1/というディレクトリができています。RedmineがWebサーバとして表示するディレクトリはredmine-4.1.1/public/になります。展開したディレクトリと合わせて/var/www/html/redmine-4.1.1/public/をDocumentRootに設定変更する必要があります。今回は一つのサーバをRedmineが占有する想定で構築しますが、VirtualHostの場合も考え方でDocumentRootをどこにするかの違いだけです。
WebサーバのDocumentRootを変更するには/etc/httpd/conf/httpd.confを修正します。標準のApacheの設定では以下のようになっています。

上の図の赤線のように、DocumentRootは標準では/var/www/htmlに指定してあります。これをRedmineの設定に置き換えます。

上の図のように、DocumentRootを置き換えたら保存して終了します。/var/www/html以下以外にするとディレクトリの許可設定も変更する必要があるので、変更箇所はさらに増えます。
今回はRedmineをCentOS8の上に構築する流れを説明する目的ですので、他のディレクトリへ変更する場合は想定しません。
設定変更が完了したら、apachectl gracefulで変更を反映してWebサーバへの設定は完了です。
Redmineのデータベース接続設定
Redmineがデータベースと接続する設定をします。redmine-4.1.1/config/ディレクトリの下にdatabase.yml.sampleというファイルがあります。このファイルを同じディレクトリのdatabase.ymlにコピーします。コマンドで書くと下のようになります。viでの編集までコマンドを記載しました。

次にdatabase.ymlを編集します。展開した朝護の標準設定は以下の内容です。

上の図のように、productionの項目を設定します。データベース名を指定するdatabase行、ユーザー名を指定するusername、パスワードを指定するpassword行をMySQLで作った情報に置き換えます。

Redmineに必要なgemパッケージをインストールします。
Redmine用のRailsに入れ替え
redmine 4.1.1に必要なrailsは5.2.4.2のため、railsを入れなおします。

上の図のように、最新版ではRailsの6.0.3が入ります。RedmineのGemfileを見るとわかりますが、4.1.1ではRailsの5.2.4.2が必要です。そこでRailsをインストールしなおします。
①gemコマンドで、railsとrailtiesを削除します。②で確認メッセージが出るのでyキーを入力して削除を進めてください。③バージョン指定でrailsをインストールします。④railsの5.2.4.2がインストールされればOKです。
Redmine用のパッケージをインストール
OS用mysql2-develパッケージをインストール
最初にMySQL用のライブラリとヘッダを含むmysql-develをdnfコマンドでインストールします。

Ruby用mysql2パッケージをgemでインストール
次にgemコマンドでsqlite2のバージョン0.5.3をインストールします。

上の図のようにgem install sqlite2と入力して指定のパッケージをインストールします。
Redmineに必要なrubyパッケージをbundleでインストール
Redmineのディレクトリへ移動し、bundle installと実行します。

上の図のように、①redmineのディレクトリへ移動して、②bundle installを実行します。警告のように一般ユーザーで実行するよう警告されますが、Redmineの構築方法をまとめるためですので、簡略化して今回はrootでインストールします。
少し時間が必要ですが、bundleコマンドが必要なパッケージを追加してインストールします。

上の図のようにコマンドに戻ればインストールは完了です。
Redmineの初期データ作成
セッション改ざん防止用秘密鍵の作成
Redmineがセッションで使う改ざん防止用の秘密鍵を生成します。redmineのディレクトリで、bundle exec rake generate_secret_tokenと実行します。

上の図のようにコマンドを実行するとエラー無く終了します。
Redmine用のデータベーステーブルを作成
データベースにReadmineが使うテーブルを作成していきます。Redmineのディレクトリで、RAILS_ENV=production bundle exec rake db:migrateとコマンドを入力して実行します。

上の図のように、コマンドを実行するとデータベーステーブルの作成が始まります。マシンの性能にも依りますが、1分ほどで完了します。
Redmine用のデータベースに初期データを登録
前項で作成したデータベーステーブルに初期データを登録します。Redmineのディレクトリで、RAILS_ENV=production bundle exec rake redmine:load_default_dataとコマンドを入力します。

上の図のように、コマンドを実行すると言語の指定が必要です。日本語を使うのでjaと入力して進めます。
デフォルトのデータを設定する作業はすぐに終わります。
Redmineの動作確認
やっと構築作業が完了しました。いよいよRedmineへ接続します。http://サーバのIPで接続すると、最初は少し待たされますがRedmineのページが表示されます。

上の図のようにRedmineのページが表示されれば、インストールは成功です。右上の「ログイン」をクリックします。

上の図のように、ログインページが表示されたら、管理者のIDはadminで初期パスワードはadminです。

初期パスワードを変更してログインを進めてください。初期パスワードを変更できると下の図のようになります。

ここまでくればRedmineは構築完了です。あとはRedmineを使うだけです。
まとめ
Redmineの構築はやはり面倒でした。そのため私自身もこの備忘録を活用しています。長文をご覧になっていただき、ありがとうございました。この記事が約二立てることを願ってます。