🎃

EC2でRailsを立ち上げてみる

2024/09/11に公開

はじめに

やったことを忘れないように備忘録として残しておく

EC2インスタンスの作成

  • インスタンスを起動
  • 名前を設定: hoge
  • キーペアを作成
    • キーペア名を入力: hoge
    • キーペアのタイプ: ED25519
    • プライベートキーファイル形式: .pem

EC2インスタンスへの接続

  • ダウンロードした.pemファイルを~/.ssh/配下に移動
$ mv ~/Downloads/hoge.pem ~/.ssh
  • 所有者のみ読み書き可能に権限を変更(ダウンロード時の権限ではアクセスできない)
$ chmod 600 ~/.ssh/hoge.pem
  • EC2インスタンスにアクセス
$ ssh -i ~/.ssh/hoge.pem ec2-user@<パブリックIPv4アドレス>

環境構築

パッケージのインストール

$ sudo yum -y update
$ sudo yum -y install git make gcc-c++ patch libyaml-devel libffi-devel libicu-devel zlib-devel readline-devel libxml2-devel libxslt-devel openssl-devel

rbenvのインストール

$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
$ source .bash_profile

ruby-buildのインストール

$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
$ rbenv rehash

rubyのインストール

めっちゃ時間かかるけど気長に待つ。。。

$ TMPDIR="${PWD}/tmp" rbenv install -v 3.3.3
$ rbenv global 3.3.3
$ ruby -v
ruby 3.3.3 (2024-06-12 revision f1c7b6f435) [x86_64-linux]

mysqlのインストール

$ sudo yum localinstall -y https://dev.mysql.com/get/mysql80-community-release-el9-1.noarch.rpm
$ sudo yum install -y mysql-community-server
$ sudo service mysqld start

GPGチェックでエラーが出たら以下を実行

$ sudo rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2023

プロジェクトのclone

swap領域を作成

bundle installの時にディスク容量が足りなくて失敗するのを回避

$ sudo dd if=/dev/zero of=/swapfile1 bs=1M count=512
$ sudo chmod 600 /swapfile1
$ sudo mkswap /swapfile1
$ sudo swapon /swapfile1
$ sudo sh -c 'echo "/swapfile1  none        swap    sw              0   0" >> /etc/fstab'

プロジェクトを配置するディレクトリの作成

$ sudo mkdir /var/www
$ sudo mkdir /var/www/apps

作成したディレクトリのオーナーをec2-userに変更

$ sudo chown ec2-user /var/www/apps/

githubアクセス用のキーペアの作成

$ ssh-keygen -t ed25519
Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/ec2-user/.ssh/id_ed25519): (エンター)
Enter passphrase (empty for no passphrase): (エンター)
Enter same passphrase again: (エンター)

githubに公開鍵を登録

$ cat ~/.ssh/id_ed25519.pub
表示された内容をコピー

https://github.com/settings/ssh/new にアクセスして公開鍵を追加

接続を確認

ssh -T git@github.com
Hi hoge! You've successfully authenticated, but GitHub does not provide shell access.

プロジェクトのclone

$ git clone リポジトリ

bundle install

プロジェクトのディレクトリに移動

$ cd hoge

bunlde install

$ bundle

mysqlのインストールで失敗。
エラーメッセージに従う

$ sudo yum install -y mysql-devel

再度、bundle install

bundle

railsの起動

mysqlの初期パスワードを取得

$ sudo cat /var/log/mysqld.log | grep password
[Note] [MY-010454] [Server] A temporary password is generated for root@localhost: <初期パスワード>

mysqlのパスワードを変更

$ mysql -u root -p
Enter password: <初期パスワード>
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY <新しいパスワード>;
mysql> exit
database.yml
default: &default
  adapter: mysql2
  encoding: utf8mb4
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: <%= Rails.application.credentials.mysql.user %>
  password: <%= Rails.application.credentials.mysql.password %>

production:
  <<: *default
  database: hoge_production
  socket: <%= Rails.application.credentials.mysql.socket %>

credentialsの修正

$ EDITOR=vim rails credentials:edit -e production
mysql:
  user: root
  password: <新しいパスワード>
  socket: /var/lib/mysql/mysql.sock

dbの作成

RAILS_ENV=production rails db:create db:migrate

httpでの接続を許可する

config/environments/production.rb
config.force_ssl = false

railsの起動

rails s -b 0.0.0.0 -e production

http://<パブリックIPv4アドレス>:3000 にアクセスして完了!
と思ったらアクセスできない。。。
ec2側のインバウンドルールの追加が漏れていた。。。

インバウンドルールを編集(追加)

  • タイプ: カスタムTCP
  • ポート範囲: 3000
  • ソース: 0.0.0.0/0

再度、http://<パブリックIPv4アドレス>:3000 にアクセス。。。
繋がった!

おわりに

なんか色々と漏れてそう。。。
見直して修正しよう。
そして何よりhttpでの接続なんてあかん、絶対。

Discussion