subtitle

RaiseTechの各種コースをはじめとしたイロイロな学習の記録

EC2にRailsの環境を構築する

AWSでEC2とRDSが使える状態になったので、今度はEC2にRails環境を構築する。

本当は先日作成したネコを称えるアプリをデプロイしたいのだが、ちょっとイキナリは敷居が高いので、とりあえずEC2にRails環境を整えて、テストアプリを新規作成して、ブラウザで表示するところまでをやってみる。


まずは、自分のローカルPC(Windows)でRails環境を構築した時のことをもう一度思い出してみよう。

EC2上で同じように環境を作っていけばいいはず。


かつてRails構築用にローカルPCにインストールしたもの

  • Node.jsはもともとインストール済だった
  • Ruby(RubyInstallerを使用)
  • Rails(gem install rails -v "6.1.0")
  • SQLite3
  • PRY(gem install pry pry-doc)
  • Yarn(npm install --global yarn)
  • Webpacker(rails webpacker:install)
  • Git(git for windowsを使用)
  • Bundler(gem install bundler)



色々手を付ける前に、ちょっと用語など

この後出てくる、よくわからない単語たちをひとまず先に確認しておく。

  • yum:ソフトウェアのパッケージ管理マネージャー(MacやLinuxなどのUNIX系で使用)
  • RPM(Redhat Package Manager)パッケージ:プログラムの配布形式で、バイナリファイルやドキュメントがまとめられたもの(LinuxなどのRedHat系で使用)
  • rbenv:複数のRubyのバージョンを管理し、プロジェクト毎にRubyのバージョンを指定できる(つまり、Rubyのバージョン管理ツール)
  • ruby-build:Rubyをバージョン毎に異なるフォルダにビルドするためのツール(rbenv installコマンドを提供するrbenvのプラグイン)

補足

rpmは個々のパッケージそのものを指し、yumはrpmを管理(依存関係など)するマネージャーという位置づけ。



実際にEC2にインストールしてみる

SSHでEC2に接続し、標準ライブラリ等、とりあえず必要なものをインストールする

RailsにはRailsの、そのほかの環境にはそれに合った必要なライブラリ等はあらかた決まっているらしく、自分の環境に合ったものをまるっとインストールしておけばいいらしい。

sudo yum install gcc-c++ glibc-headers openssl-devel readline libyaml-devel readline-devel zlib zlib-devel


次にGitをインストール

sudo yum install git


rbenvをインストール

rbenvはGitHubに最新版がアップされているので、そこから持ってくる(cloneする)

git clone https://github.com/sstephenson/rbenv.git ~/.rbenv

補足

rbenvのGitHubには色んなパスがあるが、最終的には https://github.com/rbenv/rbenv にリダイレクトされるようだ。上記のパスだと、コントリビューターのうちの1人stephensonさんのところからリンクされてるのかな。


「~/.rbenv/bin」を$PATHに追加(rbenvのコマンドライン・ユーティリティにアクセスするため)

echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile

「.bash_profile」は、bashシェル実行時に自動で読み込まれるスクリプトが書かれている環境設定ファイル。(ユーザーのホームディレクトリ「~」の直下にある。)


もう一発。shimsとautocompletionを有効化するために、下記も書込んでおく。

echo 'eval "$(rbenv init -)"' >> ~/.bash_profile

shims(rbenv rehash)とは、irb・gem・rails等のコマンドをRubyのバージョン毎に参照先を切り替えてくれるフォルダのことらしい。(あまりよくわからない・・・。フォルダのことなのか?機能のことなのか・・・?)

まあ、これも後で時間があったら調べよう。


catコマンドを使って、正しく書き込まれているか確認しておく。

cat ~/.bash_profile

正しく書き込まれている。


ここまでの設定を反映させるために、シェルを再起動する。

exec $SHELL -l


rbenvのバージョンを確認する。

rbenv --version

1.1.2がインストールされているようだ。

https://github.com/rbenv/rbenv を見ると、現時点での最新版は1.1.2のようなので、問題なさそう。



ruby-buildをインストールする

ruby-buildをrbenvのプラグインとしてインストールすると、rbenv installコマンドが使えるようになる。

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


Rubyをインストールする

ようやく、Rubyをインストールできる状態になった。今回はローカルPCの環境と合わせて2.7.2をインストールする。

rbenv install -v 2.7.2

結構時間がかかるので、ちょっとドキドキするw


システム全体で使用するRubyのバージョンを指定する。

rbenv global 2.7.2

補足

これをやらないと、どのRubyのバージョンを使うかわからないので、この後のruby -vコマンドで下記のようなエラーが出るので、忘れずに実施すること。

rbenv: ruby: command not found
The `ruby' command exists in these Ruby versions:
2.7.2


Rubyのバージョン確認

ruby -v

2.7.2がインストールできている。OK。



Railsの6.1.0をインストールする

gem install rails -v "6.1.0"


Railsのバージョンを確認する

rails --version

6.1.0がインストールできている。OK。



Node.jsをインストールする。

現時点での最新バージョン(推奨版)は、14.16.0


curl -sL https://rpm.nodesource.com/setup_14.x | sudo bash -
sudo yum install -y nodejs

補足

curlコマンドは、様々なプロトコルを用いて、データを転送するツール。

curlで得たシェルスクリプトをパイプ(|)でbashに渡してそのスクリプトを実行している。


Node.jsのバージョンを確認する。

node -v

14.16.0になっている。OK。



Yarnをインストールする

安定版は1.22.5


curl -sL https://dl.yarnpkg.com/rpm/yarn.repo | sudo tee /etc/yum.repos.d/yarn.repo
sudo yum install -y yarn


Yarnのバージョンを確認する。

1.22.5になっている。OK。



SQLite3のバージョン確認

rpm -q sqlite

3.7.18になっている。Rails6は、SQLite3のバージョン3.8以上必要なので、最新版をインストールする。




最新版のSQLite3をダウンロードする。

最新版は、3.34.1



sqlite-autoconf-3340100.tar.gz



wget https://www.sqlite.org/2021/sqlite-autoconf-3340100.tar.gz

補足

wgetコマンドは、URLを指定してファイルをダウンロードするコマンド。


ダウンロードしたファイルを展開する。

tar xzvf sqlite-autoconf-3340100.tar.gz

補足

tarコマンドは、圧縮ファイルを作成/展開するコマンド。オプション「xzvf」は、gzipで圧縮されたアーカイブを展開(解凍)する。


フォルダの移動

cd sqlite-autoconf-3340100


/opt/sqlite/sqlite3にインストールする

インストール先を指定して、configureというスクリプトファイルを実行する。

./configure --prefix=/opt/sqlite/sqlite3


makeでアプリのコンパイル、make installでコンパイルされたアプリをインストールする。

make
sudo make install

補足

Linux環境でアプリをインストールする場合、yumやrpmコマンドを使用して、パッケージとしてインストールする方法と、ソースコードからインストールする方法がある。

今回は、ソースコードからインストールする方法をとっている。

configureというスクリプトファイルを実行すると、MakeFileが作成される。
そのMakeFileの内容に従って、makeすることでアプリのコンパイルが行われる。
最後に、make installというコマンドを叩くことによって、MakeFileに記載されたinstallというラベルから処理を実行して、インストールが実施されるという流れ。


SQLite3のバージョンを確認する。

/opt/sqlite/sqlite3/bin/sqlite3 --version

3.34.1。OK。



フォルダは元の位置に戻っておく

cd ..


Gemのインストール

最新バージョンのSQLite3は、/opt/sqlite/sqlite3にあるので、gemもそこを参照するように、includeとlibのパスを変更してインストールする。

gem install sqlite3 -- --with-sqlite3-include=/opt/sqlite/sqlite3/include --with-sqlite3-lib=/opt/sqlite/sqlite3/lib


SQLite3のバージョンを確認する。

irbモードで、3.34.1になっている。OK



ライブラリのパスを.bash_profileに追加して、更新。

echo 'export LD_LIBRARY_PATH="/opt/sqlite/sqlite3/lib"' >> .bash_profile
source .bash_profile


.bash_profileの内容確認

cat .bash_profile


追加されている。



Railsでサンプルアプリを作成する

Rails new sample_test


Webpackerをインストールする

cd sample_test
bundle instal
rails webpacker:install


Railsサーバーを起動する

rails s -b 0.0.0.0


上手くいきました!


今度は、RailsサーバーにアクセスしてRailsの画面を表示させてみよう。

ブラウザのURLのところに、http://[パブリックIP]:3000 でGo!


やや?!エラーになったぞ。


そういえば、Railsのデフォルト3000番ポートをセキュリティグループで許可していない。

セキュリティグループのインバウンドルールを編集して、「カスタム TCP」を3000番ポートで登録する。


タイプを固定(HTTPとか)にすると、ポートが固定になって編集できない。

カスタムを選ぶことによってポートを自由に編集することができる。


気を取り直してもう一度、http://パブリックIPアドレス:3000

出た!

Yay! I'm on Rails!