【AWS】EC2＋RDSを使用したRedmine構築（清書版）

# はじめに
前回の構築手順を再度やり直して、アウトプットとして投稿させていただきます。
【前回の構築URL】

https://qiita.com/Hiro_tech/items/383040cd18429393eaaa

# 構成概要
| リソース       | 内容                                  |
| ---------- | ----------------------------------- |
| EC2        | Redmine アプリケーションサーバ（Amazon Linux 2） |
| RDS        | MySQL 8.0（Redmine用データベース）           |


# 前提条件

・EC2：Amazon Linux 2 または Ubuntu 20.04（ここでは Amazon Linux 2 で進行）

・RDS：MySQL 8.0

・Redmineバージョン：5.1系推奨

# 構築手順
ステップ1：EC2の作成と接続
ステップ2：RDSの作成（MySQL）
ステップ3：Ruby・rbenvのインストール
ステップ4：Redmineインストール
ステップ5：Nokogiriのバージョン指定 & Bundle Install
ステップ6：データベース設定
ステップ7：Passenger + Apacheで起動
✅ 動作確認

## ステップ1：EC2の作成と接続
１．Amazon Linux 2 を使用してEC2インスタンスを作成

２．セキュリティグループで以下を許可
　・22（SSH）
　・80（HTTP）
　・3306（RDS接続用）

３．SSHでログインし、以下を実行：
```
sudo yum update -y
sudo yum install -y git gcc gcc-c++ make zlib-devel curl-devel openssl-devel \
    readline-devel libyaml-devel libffi-devel mariadb-devel ImageMagick-devel
```
![redmine1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3898218/60c9ba14-3d31-485b-ae43-c48eca62fa8f.png)


## ステップ2：RDSの作成（MySQL）
・RDS画面にて、「データベース作成」

・エンジンの選択 → MySQL（8.0系）

・DBインスタンス識別子、マスターユーザー名/パスワードを設定

・パブリックアクセス：いいえ

・セキュリティグループ：EC2と同じSGまたは3306許可SG

![redmine2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3898218/6d35adec-01d9-4b25-98be-2a182342c5b7.png)


## ステップ3：Ruby・rbenvのインストール
```
# rbenvとruby-build
git clone https://github.com/rbenv/rbenv.git ~/.rbenv
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
source ~/.bash_profile

git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build
# 追加で必要なパッケージ
sudo yum install -y gcc gcc-c++ make \
  openssl-devel readline-devel zlib-devel \
  libffi-devel libyaml-devel \
  bzip2 tar git

# Rubyインストール（Redmine推奨：3.2〜3.3系）
rbenv install 3.2.2
rbenv global 3.2.2

# Bundler
gem install bundler
```

## ステップ4：Redmineインストール
```
sudo mkdir /var/www

# 最新のRedmineをダウンロード（例：5.1）
cd /var/www
sudo git clone https://github.com/redmine/redmine.git -b 5.1-stable redmine
sudo chown ec2-user redmine
cd redmine
```

ステップ5：Nokogiriのバージョン指定 & Bundle Install
Gemfile内に以下を追記：
```
gem 'nokogiri', '~> 1.15.7'
```
その後、以下を実行：
```
bundle config set --local build.nokogiri --use-system-libraries
bundle install --without development test
```

ステップ6：データベース設定
MariaDBインストール・DB起動及び初期設定
```
sudo yum install -y mariadb mariadb-server mariadb-devel
sudo systemctl start mariadb
sudo mysql_secure_installation
```
```
cp config/database.yml.example config/database.yml
vi config/database.yml
```
編集内容
```
production:
  adapter: mysql2
  database: redmine
  host: [RDSのエンドポイント]
  username: [RDSのユーザー名]
  password: [RDSのパスワード]
  encoding: utf8mb4
```
ログの出力先設定
```
# logディレクトリがなければ作成
mkdir -p /var/www/redmine/log

# production.log を作成
touch /var/www/redmine/log/production.log

# アクセス権を設定（Redmineが書き込みできるように）
chmod 664 /var/www/redmine/log/production.log

# 所有権を正しく設定（ec2-user で操作している場合）
chown ec2-user:ec2-user /var/www/redmine/log/production.log

```

データベース作成
```
mysql -h <RDSのエンドポイント> -u admin -p
CREATE DATABASE redmine CHARACTER SET utf8mb4;
EXIT;

RAILS_ENV=production bundle exec rake generate_secret_token
RAILS_ENV=production bundle exec rake db:migrate
RAILS_ENV=production bundle exec rake redmine:load_default_data
```

ステップ7：Passenger + Apacheで起動
スワップ領域の追加（2GB）
```
# スワップファイルを作成
sudo dd if=/dev/zero of=/swapfile bs=1M count=2048

# スワップファイルを有効化
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

# 反映確認
swapon -s
free -m
```
Passenger + Apacheインストール
```
sudo yum install -y httpd
sudo yum groupinstall -y "Development Tools"
sudo yum install -y curl-devel httpd-devel apr-devel apr-util-devel

gem install passenger
passenger-install-apache2-module
```
Apache設定1（/etc/httpd/conf.d/passenger.conf)に以下を追記：
```
LoadModule passenger_module /home/ec2-user/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/passenger-6.0.27/buildout/apache2/mod_passenger.so

<IfModule mod_passenger.c>
  PassengerRoot /home/ec2-user/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/passenger-6.0.27
  PassengerDefaultRuby /home/ec2-user/.rbenv/versions/3.2.2/bin/ruby
</IfModule>


```
Apache設定2（/etc/httpd/conf.d/redmine.conf)に以下を追記：
```
<VirtualHost *:80>
  ServerName redmine.local
  DocumentRoot /var/www/redmine/public
  <Directory /var/www/redmine/public>
    Require all granted
    Options -MultiViews
  </Directory>
</VirtualHost>
```
Apache設定3（/etc/hosts)に以下を追記：
```
[EC2のIPアドレス]   redmine.local
```


Apache再起動：
```
sudo systemctl restart httpd
```

✅ 動作確認
ブラウザで http://[EC2のパブリックIP] にアクセス

ログインID：admin

パスワード：admin

![redmine3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3898218/2f27c337-c8f4-4905-9c1d-d8bcda96d1db.png)


# おわりに
もう一度、同じ手順でやり直してみても、上手くいかない部分が発生して、時間はかかりましたが、各コマンドの意味や設定ファイルの内容についての理解が深まりました。
今後もハンズオンを通して、成長していきたいと思います