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!