「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の公式手順を参考に、筆者が個人の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などのインストール
・実行権限 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
複数のRubyのバージョンを管理し、プロジェクトごとにRubyのバージョンを指定して使うことができるようになるツールです。コマンド一発でRubyをインストール出来て便利なので、今回使用します。
ruby-buildのインストール
・実行権限 ec2-user
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 RBENV_ROOT=/var/lib/rbenv' >> ~/.bash_profile
echo 'export PATH="$RBENV_ROOT/bin:$PATH"' >> ~/.bash_profile
/var/lib/rbenv/bin/rbenv init
echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
source ~/.bash_profile
rbenv --version
rbenv rehash
※パスを通すとは?
>> 【LPI-JAPAN公式】パスを通す
Step02 Rubyのインストール
今回はバージョン2.6.6をインストールします。
・実行権限 ec2-user
rbenv install 2.6.6
rbenv global 2.6.6
ruby -v
Step03 Railsのインストール
・実行権限 ec2-user
gemのドキュメントはインストール不要なので、オプション「–no-document」を付与して実行します。
cd /home/ec2-user/.rbenv
gem install rails --no-document
本手順では利用していませんが、Rubyの環境をキレイに保つため、Node.jsをインストールした後にRailsを立ち上げる方法を推奨する意見もあるようです。以下をご参考にしてください。
>> Ruby 歴 10 年の私が【絶対に】 gem install rails コマンドを実行しない理由
Step04 MySQLのインストール
まず、はじめにMariaDBを削除し、MySQL8系をインストールした後に、MySQL8系を非活性化し、MySQL5系をインストールするという手順を実施します。
・実行権限 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本体のインストール
・実行権限 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 |
・実行権限 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 を編集します。
・実行権限 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
依存するソフトウェアのインストール
・実行権限 ec2-user
gem update
gem install bundler
gem -v
bundler -v
bundleをインストール
・実行権限 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-セッションストア秘密鍵の生成
・実行権限 ec2-user
bundle exec rake generate_secret_token
6-データベースのテーブル等の作成
・実行権限 ec2-user
RAILS_ENV=production bundle exec rake db:migrate
7-デフォルトデータの読み出し
・実行権限 ec2-user
RAILS_ENV=production bundle exec rake redmine:load_default_data
mysql -u root -p
mysql> show tables from redmine;
mysql> exit;
8-ファイルシステムのパーミッション
・実行権限 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-インストールの確認
・実行権限 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の起動および自動起動の設定
・実行権限 ec2-user
sudo systemctl start httpd.service
sudo systemctl enable httpd.service
—
Apacheの再起動
・実行権限 ec2-user
service httpd configtest
sudo systemctl restart httpd.service
WEBrickによるWebサーバを起動して、インストールができたかテスト
・実行権限 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を明示的に指定する
・実行権限 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の起動
・実行権限 root
passenger start
参考コマンド
passengerの停止
passenger stop
作業は以上となります。
筆者がつまづいた箇所
一言では書ききれないですが、多くは以下の点でつまづきました。
- 実行権限(Permission deniedなど)のエラー
- パスが切られていないためのエラー(コマンドやモジュールが見つかりません系)
- ディレクトリやファイルがありませんエラー
- アプリの依存関係のエラー
対処方法
- その1 chmod chownなどで権限を付与し対応
- その2 「~/.baxh_profile」にパスを記載して対応
- その3 ディレクトリやファイルを作成して対応
- その4 対象のアプリをバージョンアップして対応
本記事がお役に立てば幸いです。
【関連記事】
>> AWSに関する記事一覧