AWS上にRails6の開発環境を構築する(2020年10月版)

AWS上にRailsの開発環境を構築する

AWSインスタンス上で、この手順でやれば間違いなくRails6が動くまでの手順をまとめました。時期が変われば方法も変わると思いますので、2020年10月版とします。参考にしたのは、記事末尾にある教本とWebの記事数々です。※Rails6環境で分かりやすい本が無かった

EC2インスタンスを作成する

・東京リージョン(ap-northeast1)、OSはAmazon Linux2

・t2.microまたはt3.micro(無料枠が残っていればt2、それ以降はt3の方が安い)

・ストレージ (EBS)は8GB SSDを割り当て

インスタンスに割り当てるSecurity Groupの設定で、ポート80番(HTTP)を許可

・自動割当パブリックIPは有効

・インターネット側からアクセスできるようインターネットゲートウェイの設置、VPCの設定

詳細は省略します。過去の記事はこちら。

toshioshimo.hatenablog.com

f:id:TOSHIOSHIMO:20201003105225p:plain

SSHで接続する

こちらも先程の過去記事に掲載しています。

・キーペアのダウンロード

・キーの権限変更 (chmod 400 xxxxxx.pem)

ssh -i "(キーペア)" (ユーザー名)@パブリックDNS

標準ライブラリのインストール

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

MariaDB(データベース)のインストール

ひとまずRDSを使わずインスタンス内でMariaDBを使います

# sudo yum install mariadb mariadb-server

gitのインストール

後のgit cloneに必要なgitをインストールします。

# sudo yum install git 

rbenvのインストール

rbenvとはRubyの開発バージョンを切り替えられるようにするものです。

# 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

rbenvは5分〜10分時間がかかります。Installing ruby-2.7.1...のまま固まっているように見えますが、待ちましょう。

# mkdir -p "$(rbenv root)"/plugins
# git clone https://github.com/rbenv/ruby-build.git "$(rbenv root)"/plugins/ruby-build
# rbenv install 2.7.1

rbenvでRubyのバージョンを指定

 

# rbenv global 2.7.1
# ruby -v
ruby 2.7.1p83 (2020-03-31 revision a0c7c23c9c) [x86_64-linux]

Railsのインストール

# gem install rails
# rails --version
Rails 6.0.3.3

使用データベースの設定、開始

使用データベースでMySQLを指定します。

# bundle config --local build.mysql2 "--with-ldflags=-L/usr/local/opt/openssl/lib --with-cppflags=-I/usr/local/opt/openssl/include"
# bundle install

bundlerでMySQLのインストールエラーが出るので、対処します。

An error occurred while installing mysql2 (0.5.3), and Bundler cannot
continue.
# bundle config --local build.mysql2 "--with-ldflags=-L/usr/local/opt/openssl/lib --with-cppflags=-I/usr/local/opt/openssl/include"
# sudo vi Gemfile

Gemfileの記述を一部コメントアウト

# gem 'mysql2', '>= 0.4.4'

改めてbundle install

※Installing sassc 2.4.0 with native extensionsが長いです。

# bundle install

MySQL 0.5.3をgemでインストール。

# gem install mysql2 -v '0.5.3'

ssl関係のライブラリが見つからないとエラーが出ます。

ERROR: Error installing mysql2:
ERROR: Failed to build gem native extension.

mysql-develをインストール

# sudo yum install mysql-devel

リトライ

# gem install mysql2 -v '0.5.3'

MariaDBの開始

# sudo systemctl start mariadb

DBの作成

作成されたディレクトリで、下記コマンドを実行

# rails db:create

gemのLoadErrorが出るので対処

Gem::LoadError: mysql2 is not part of the bundle. Add it to your Gemfile.

Gemfileに以下の1行を追加

# sudo vi Gemfile
gem 'mysql2'

リトライ

# rails db:create
Created database 'appname_development'
Created database 'appname_test'

railsサーバーの開始

# rails s --port=80 -b 0.0.0.0

webpackerのエラーが出るので、対処

/home/ec2-user/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/webpacker-4.3.0/lib/webpacker/configuration.rb:95:in `rescue in load': Webpacker configuration file not found /home/ec2-user/appname/config/webpacker.yml.

webpackerのインストールにはNode.jsが必要

# rails webpacker:install
sh: node: コマンドが見つかりません
sh: nodejs: コマンドが見つかりません
Node.js not installed. Please download and install Node.js https://nodejs.org/en/download/

Node.jsのインストール

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

リトライするとYarnが入っていないと言われる

# rails webpacker:install
Yarn not installed. Please download and install Yarn from https://yarnpkg.com/lang/en/docs/install/

Yarnをインストール

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

改めてwebpackerのインストール

# rails webpacker:install

f:id:TOSHIOSHIMO:20201003131202p:plain


クラッカーとケーキの絵が出たら完了です!

改めてRailsサーバーの開始

# sudo rails s --port=80 -b 0.0.0.0

何故かsudo でrails sできません(PATHが通っていない)

sudo: rails: コマンドが見つかりません

sudo のPATHを通す

# sudo visudo
Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin

Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/rbenv/bin:/usr/local/rbenv/shims

改めてRailsサーバーの開始

# sudo rails s --port=80 -b 0.0.0.0

Railsのスタートページが開けることを確認する

インスタンスのパブリックIP(デフォルトでport 80番)にアクセスすると、Railsのスタートページが表示されるはずです。

http://(インスタンスのパブリックIP)

f:id:TOSHIOSHIMO:20201003133822p:plain

マシンイメージ(AMI)の取得

せっかく構築したので、今の状態を保存しておきます。AMI化しておけば、同じ環境のインスタンスを瞬時に起動できます(起動直後は各プロセスが上がっていないことに注意)

toshioshimo.hatenablog.com

toshioshimo.hatenablog.com

アプリ開発は楽しい!

障害、エラー対応のみで一日が終わるよりも、アプリを作りながらインフラを覚えた方がクリエイティブでモチベーションも上がりますね。成果物ベースで逆算して勉強する方が性に合っています。大変のびのびと業務ができる今の環境に感謝です。

作り逃げを許すな。

作成した履歴は残して他のエンジニアに展開、運用担当者に引き継ぎましょう。

何も引き継ぎ資料を作らず、サポートもせず、「作ったら終わり」「あとはよろしく」は後任の工数を奪っています。いくらスキルが高いエンジニアでもどうかと思います。

構築をAnsible/Terraform等で自動化する際も必須です。

xtech.nikkei.com

今後の展望

複業の方でフロントエンド側を触っているので、その辺りも役立ちました。イベント用のデジタルスタンプラリーのサービスを企画しようと思います。