【AWS】EC2に最新のRedmine4.xを手動でインストールしてみた

AWS

「AWS上でEC2にRedmineの4.Xを構築する方法を知りたい」「自分の好きなように環境を構築したい」

このような疑問に対し、現役インフラエンジニアである筆者が自身で検証した方法と手順をご紹介します。

この記事で分かること

  • AWS上でEC2にRedmineの4.Xを構築する方法 3選
  • このハンズオンで目指す構成
  • このハンズオン作業のゴール
  • このハンズオン作業の経緯
  • 筆者の環境
  • AWS上でEC2にRedmineをインストールする手順
  • 筆者がつまづいた箇所

AWS上でEC2にRedmineの4.Xを構築する方法 3選

本記事はRedmineをAWSのEC2にインストールする手順と方法をご紹介するシリーズの第二回です。

まず、RedmineをEC2にインストールする方法としては第一回でご紹介した以下の3つの方法があります。

EC2にRedmineをインストールする方法3選

  • 方法その1 【NOコード】bitnamiのAMIを利用して構築する
  • 方法その2 【ローコード】bitnamiのインストーラーを使用する
  • 方法その3 【YESコード】個別で構築する

【第一回の記事】
>> 【AWS】EC2にRedmineの最新版(4.x)を構築する手順3選

第二回の本記事では方法その3 【YESコード】個別で構築する手順についてご紹介します。

このハンズオンで目指す構成

このハンズオン作業のゴール

ローカルPCからインターネットを経由し、EC2にインストールしたRedmineのサイトにアクセスできるところまでをゴールとします。

また、EC2を作成してログインするまでの手順は以下の記事にまとめましたのでよろしければご覧ください。
>> 【AWS】EC2インスタンスを作成する方法/EC2のたて方/ハンズオン手順

なお、今回は外部公開用のPublic SubnetにEC2を作成してRedmineをインストールする手順をご紹介しますが、別な構成として、WordPressをEC2にデプロイし、RDSをマルチAZに配置して、Webアプリサーバーとして外部公開する手順について以下の記事にまとめましたのでよろしければご参考にしてみてください。
>> 【AWS】シングル構成でWordPressのブログサービスを構築してみた


このハンズオン作業の経緯

個人学習のために、AWSにEC2を作成し、何かしらのアプリをインストールしてみたいと考え、以前業務で使用したことのあるRedmineを題材にすることにしたが、公式手順にはRubyとRailsの構築方法が記載されていなかったため、作業の備忘録として本記事にまとめました。

>> 【公式】Redmineのインストール

本記事は、Redmineの公式手順を参考に、筆者が個人のAWSアカウントを使用し、自宅の環境で個人的に検証した手順のみを載せておりますが、Rubyの環境構築は本作業が初めてでしたので、ひょっとしたら技術的な誤りがあるかもしれません。

何かお気づきの点がありましたら、すぐに修正いたしますのでお手数ですがお問い合せからお知らせいただけますと幸いです。

>> お問い合せ


筆者の環境

ローカル開発環境 Windows10からブラウザよりAWSマネジメントコンソールに接続して作業
EC2のOS Amazon Linux 2
Redmine 4.1.1
Ruby 2.6
Rails 6.x
SQLエンジン MySQL
SSH通信 TeraTermを利用
作図 dwarioのAWS19アイコンを利用

AWS上でEC2にRedmineをインストールする手順

  • Step01 必要なモジュールのインストール
  • Step02 Rubyのインストール
  • Step03 Railsのインストール
  • Step04 MySQLのインストール
  • Step05 Redmineのインストール
  • Step06 Redmineインストール後の動作確認

それでは詳しく見ていきましょう。

なお、コマンドについてはいったんすべて記載しますが、コマンドの意図などについては、別途詳しく追記していく予定です。

必要なモジュールのインストール

yum(やむ)アップデート、MySQL、Apacheなどのインストール

・作業ディレクトリ /home/ec2-user
・実行権限 ec2-user
sudo yum -y update
sudo yum -y groupinstall "Development Tools"
sudo yum -y install openssl-devel readline-devel zlib-devel curl-devel libyaml-devel libffi-devel
sudo yum -y install mysql mysql-devel
sudo yum -y install httpd httpd-devel
sudo yum -y install ImageMagick ImageMagick-devel ipa-pgothic-fonts

rbenvのインストール

sudo yum install git -y
git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
rbenvとは
複数のRubyのバージョンを管理し、プロジェクトごとにRubyのバージョンを指定して使うことができるようになるツールです。コマンド一発でRubyをインストール出来て便利なので、今回使用します。

ruby-buildのインストール

・作業ディレクトリ /home/ec2-user/.rbenv/plugins/ruby-build
・実行権限 ec2-user
ruby-build
rbenv install コマンドを提供するrbenvのプラグインです。
cd ~/.rbenv/plugins/ruby-build
sudo yum -y install gcc-c++ glibc-headers openssl-devel readline libyaml-devel readline-devel zlib zlib-devel libffi-devel libxml2 libxslt libxml2-devel libxslt-devel sqlite-devel

次に、「ruby-build」のディレクトリに移動し、rbenvのパスを通したのちに※、rbenvが問題なくインストールされたか確認します。

cd ~/.rbenv/plugins/ruby-build
echo 'export PATH="HOME/.rbenv/bin:PATH"' >> ~/.bash_profile
echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
source ~/.bash_profile
rbenv --version
rbenv rehash

※パスを通すとは?   
>> 【LPI-JAPAN公式】パスを通す

Step02 Rubyのインストール

今回はバージョン2.6.6をインストールします。

・作業ディレクトリ /home/ec2-user/.rbenv/
・実行権限 ec2-user
rbenv install 2.6.6
rbenv global 2.6.6
ruby -v

Step03 Railsのインストール

・作業ディレクトリ /home/ec2-user/.rbenv/
・実行権限 ec2-user

gemのドキュメントはインストール不要なので、オプション「–no-document」を付与して実行します。

cd /home/ec2-user/.rbenv
gem install rails --no-document
gem installについて
本手順では利用していませんが、Rubyの環境をキレイに保つため、Node.jsをインストールした後にRailsを立ち上げる方法を推奨する意見もあるようです。以下をご参考にしてください。
>> Ruby 歴 10 年の私が【絶対に】 gem install rails コマンドを実行しない理由

Step04 MySQLのインストール

まず、はじめにMariaDBを削除し、MySQL8系をインストールした後に、MySQL8系を非活性化し、MySQL5系をインストールするという手順を実施します。

・作業ディレクトリ /home/ec2-user
・実行権限 ec2-user
yum list installed | grep mariadb
yum list installed | grep mysql
sudo yum localinstall https://dev.mysql.com/get/mysql80-community-release-el7-1.noarch.rpm -y
sudo yum-config-manager --disable mysql80-community
sudo yum-config-manager --enable mysql57-community
yum info mysql-community-server
sudo yum install mysql-community-server -y
mysqld --version

続いて、MySQLを再起動します。

sudo systemctl start mysqld.service
sudo systemctl enable mysqld.service
systemctl status mysqld.service

MySQLの初期設定

はじめに「/var/log/mysqld.log」をcatし、格納されている初期パスワードをgrepで抽出して確認します。

次に「mysql_secure_installation」コマンドで初期設定を対話式で実施します。

sudo cat /var/log/mysqld.log | grep password
mysql_secure_installation

設定例

**********:任意のパスワードに読み替えて対応してください
Enter password for user root: **********
New password: **********
Re-enter new password: **********
Change the password for root ? ((Press y|Y for Yes, any other key for No) : No
Remove anonymous users? (Press y|Y for Yes, any other key for No) : Yes
Disallow root login remotely? (Press y|Y for Yes, any other key for No) : No
Remove test database and access to it? (Press y|Y for Yes, any other key for No) : Yes
Reload privilege tables now? (Press y|Y for Yes, any other key for No) : Yes

MySQLの文字コード変更

次に文字コードをutf8mb4に変更します。

**********:任意のパスワードに読み替えて対応してください
mysql -u root -p**********

mysql> show global variables like 'character%';
mysql> exit

sudo vi /etc/my.cnf

文字コードの変更

設定ファイル「/etc/my.cnf」を編集します。

$ sudo vi /etc/my.cnf

以下のように編集(追記)します。


[mysqld]
character_set_server=utf8mb4

[client]
default-character-set=utf8mb4

つづいて、MySQLを再起動し、再度MySQLにログインします。

sudo systemctl restart mysqld.service
mysql -u root -p**********

最後に文字コードがutf8mb4となっていることを確認します。

mysql> show global variables like 'character%';
mysql> exit

Step05 Redmineのインストール

次にRedmineをインストールしていきます。手順は以下となります。

インストール手順概要

  • 1-Redmine本体のインストール
  • 2-空のデータベースとユーザーの作成
  • 3-データベースに接続するための設定
  • 4-依存するソフトウェアのインストール
  • 5-セッションストア秘密鍵の生成
  • 6-データベースのテーブル等の作成
  • 7-デフォルトデータ
  • 8-ファイルシステムのパーミッション
  • 9-インストールの確認
  • 10-ログイン確認

1-Redmine本体のインストール

・作業ディレクトリ /tmp
・実行権限 ec2-user

はじめに「/tmp」配下にRedmineの圧縮ファイルをダウンロードします。つぎに、解凍して、「/var/www/redmine」ディレクトリに移動します。

cd /tmp
wget http://www.redmine.org/releases/redmine-4.1.1.tar.gz
tar zxvf redmine-4.1.1.tar.gz
sudo mv redmine-4.1.1 /var/lib/redmine

2-空のデータベースとユーザーの作成

ここでは、Redmineで利用するためのデータベースとユーザーを整備します。

設定例

データベース名 redmine_db
ユーザー名 redmine
・作業ディレクトリ /var/lib/redmine
・実行権限 ec2-user
mysql -u root -p**********
mysql> show databases;
mysql> CREATE DATABASE redmine‗db DEFAULT CHARACTER SET utf8mb4;
mysql> CREATE USER 'redmine'@'localhost' IDENTIFIED BY '**********';
mysql> GRANT ALL PRIVILEGES ON redmine.* TO 'redmine'@'localhost';
mysql> SHOW DATABASES;

MySQLの再起動

sudo service mysqld stop
sudo service mysqld status
sudo service mysqld start

3-データベースに接続するための設定

database.yml を編集します。

・作業ディレクトリ /var/lib/redmine
・実行権限 ec2-user
sudo chown -R apache.apache /var/lib/redmine/

cd /var/lib/redmine/config/
sudo touch database.yml
sudoedit database.yml

database.ymlの記述内容

deveropment:
adapter: mysql2
database: red
host: localhost
username: redmine
password: "**********"
encoding: utf8mb4

production:
adapter: mysql2
database: red
host: localhost
username: redmine
password: "**********"
encoding: utf8mb4

依存するソフトウェアのインストール

・作業ディレクトリ /var/lib/redmine
・実行権限 ec2-user
gem update
gem install bundler
gem -v
bundler -v

bundleをインストール

・作業ディレクトリ /var/lib/redmine
・実行権限 ec2-user
sudo chown -R apache.apache /var/lib/redmine/
sudo mkdir -p app/assets/config
sudo touch app/assets/config/manifest.js
sudoedit app/assets/config/manifest.js

記載内容

//= link_tree ../images
//= link_directory ../javascripts .js
//= link_directory ../stylesheets .css
sudo chown -R ec2-user.ec2-user /var/lib/redmine
bundle install --without development test
sudo chown -R apache.apache /var/lib/redmine/

5-セッションストア秘密鍵の生成

・作業ディレクトリ /var/lib/redmine
・実行権限 ec2-user
bundle exec rake generate_secret_token

6-データベースのテーブル等の作成

・作業ディレクトリ /var/lib/redmine
・実行権限 ec2-user
RAILS_ENV=production bundle exec rake db:migrate

7-デフォルトデータの読み出し

・作業ディレクトリ /var/lib/redmine
・実行権限 ec2-user
RAILS_ENV=production bundle exec rake redmine:load_default_data
mysql -u root -p
mysql> show tables from redmine;
mysql> exit;

8-ファイルシステムのパーミッション

・作業ディレクトリ /var/lib/redmine
・実行権限 ec2-user
sudo chmod 777 files
sudo chmod 777 log
sudo chmod 777 tmp
sudo chmod 777 tmp/pdf
sudo chmod 777 public/plugin_assets

9-インストールの確認

・作業ディレクトリ /var/lib/redmine
・実行権限 ec2-user

Passengerのインストール

gem install passenger -N
passenger-install-apache2-module --auto --languages ruby
sudo chmod o+x "/root"
passenger-install-apache2-module --snippet

/etc/httpd/conf.d/redmine.conf を作成

sudo touch redmine.conf
sudoedit /etc/httpd/conf.d/redmine.conf

記載内容(「passenger-install-apache2-module –snippet」の結果を記載

LoadModule passenger_module /home/ec2-user/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/passenger-6.0.7/buildout/apache2/mod_passenger.so

PassengerRoot /home/ec2-user/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/passenger-6.0.7
PassengerDefaultRuby /home/ec2-user/.rbenv/versions/2.6.6/bin/ruby

さらに、以下も記載
Passenger tuning

PassengerMaxPoolSize 20
PassengerMaxInstancesPerApp 4
PassengerPoolIdleTime 864000
PassengerStatThrottleRate 10
Header always unset "X-Powered-By"
Header always unset "X-Runtime"
PassengerSpawnMethod smart
PassengerFriendlyErrorPages off

httpd.confの編集

sudoedit /etc/httpd/conf/httpd.conf
vim /etc/httpd/conf/httpd.conf

記載内容

DocumentRoot "/var/lib/redmine/public"

Apacheの起動および自動起動の設定

・作業ディレクトリ /var/lib/redmine
・実行権限 ec2-user
sudo systemctl start httpd.service
sudo systemctl enable httpd.service

Apacheの再起動

・作業ディレクトリ /var/lib/redmine
・実行権限 ec2-user
service httpd configtest
sudo systemctl restart httpd.service

WEBrickによるWebサーバを起動して、インストールができたかテスト

・作業ディレクトリ /var/lib/redmine
・実行権限 root

環境変数はそのままにrootにスイッチ

export ORIG_PATH=$PATH
sudo -s -E
export PATH=$ORIG_PATH

webrickコマンドでRedmineをテスト起動

cd /var/lib/redmine
bundle exec rails server webrick -e production

Step10-ログイン確認

手順

  • ブラウザにEC2のパブリックIPを打ち込む
  • ログイン画面が表示されたことを確認
  • テストが問題なければ、TeraTermに戻り、「Ctrl」+「C」でWebサービスをいったん終了する

Passengerの起動方法

※webricは開発コマンドで通常は利用しないため、Passengerを起動してApache上でRedmineを利用可能にする。

PassengerInstanceRegistryDirを明示的に指定する

・作業ディレクトリ /var/lib/redmine
・実行権限 ec2-user

passenger-instreg の作成

sudo mkdir /var/run/passenger-instreg
sudo chown ec2-user.ec2-user /var/run/passenger-instreg
sudo chmod 777 /var/run/passenger-instreg

/etc/httpd/conf/httpd.conf の編集

sudoedit /etc/httpd/conf/httpd.conf

以下を追記

PassengerInstanceRegistryDir /var/run/passenger-instreg

/var/run(=/run)に置くファイル、ディレクトリは、再起動すると削除されてしまうので、tmpfiles.dに設定が必要。

$ sudo chown apache.apache /etc/tmpfiles.d/
$ sudo touch /etc/tmpfiles.d/passenger.conf
$ sudo chmod 777 /etc/tmpfiles.d/passenger.conf
$ sudo chown apache.apache /etc/tmpfiles.d/passenger.conf
$ sudoedit /etc/tmpfiles.d/passenger.conf
# vim /etc/tmpfiles.d/passenger.conf

以下を記載

D /var/run/passenger-instreg 0755 apache apache

~/.bash_profileの編集

※passenger-status、passenger-configを実行するユーザにPASSENGER_INSTANCE_REGISTRY_DIRの設定が必要なため

cd /home/ec2-user
vim .bash_profile

以下を追記

export PASSENGER_INSTANCE_REGISTRY_DIR=/var/run/passenger-instreg

Apache再起動

service httpd configtest
sudo systemctl restart httpd.service

Apacheのステータス確認

service httpd status

Passengerの起動

・作業ディレクトリ /var/lib/redmine
・実行権限 root
passenger start

参考コマンド

passengerの停止

passenger stop

作業は以上となります。

筆者がつまづいた箇所

一言では書ききれないですが、多くは以下の点でつまづきました。

  1. 実行権限(Permission deniedなど)のエラー
  2. パスが切られていないためのエラー(コマンドやモジュールが見つかりません系)
  3. ディレクトリやファイルがありませんエラー
  4. アプリの依存関係のエラー

対処方法

  • その1 chmod chownなどで権限を付与し対応
  • その2 「~/.baxh_profile」にパスを記載して対応
  • その3 ディレクトリやファイルを作成して対応
  • その4 対象のアプリをバージョンアップして対応

本記事がお役に立てば幸いです。

【関連記事】
>> AWSに関する記事一覧