【EC2】Rails5 環境構築(Ruby + MySQL5.7 + Node.js + Nginx)
最近、全く更新できていなかった。。。
今年やったことは今年のうちに。自分の棚卸しも兼ねて、一気にアウトプットしていきたいと思う。
今回は、AWSのEC2に、Railsアプリケーションをデプロイするにあたり、毎回調べていたので、備忘録として環境構築方法を残しておく。
環境構築
- EC2 (t2.micro)
- Amazon Linux release 2 (Karoo)
- Ruby Ver 2.6.3
- MySQL Ver 5.7.32
- Node.js Ver 14.15.2
- Nginx Ver 1.18.0
EC2が起動した後に、SSH接続する
まず全ての更新処理を実行する
$ sudo yum update
git インストール
$ sudo yum install git $ git --version git version 2.23.3
rbenv インストール
デフォルトでは、/usr/local/rbenv にセットアップされるが、どのユーザーも使えるように、/opt/rbenv にセットアップする。
1. ディレクトリを作成して、そのパスを環境変数 RBENV_ROOT に設定する。
$ sudo mkdir /opt/rbenv $ export RBENV_ROOT=/opt/rbenv
2. git を用いて、rbenv を /opt/rbenv に clone する。
$ sudo git clone https://github.com/sstephenson/rbenv.git /opt/rbenv $ sudo mkdir /opt/rbenv/versions $ sudo mkdir /opt/rbenv/shims
3. すべてのユーザが rbenv を利用できるように、PATHを追加する。(/etc/profile.d に設定ファイルを作成する。)
$ sudo vi /etc/profile.d/rbenv.sh
export RBENV_ROOT="/opt/rbenv" export PATH="$RBENV_ROOT/bin:$PATH" eval "$(rbenv init -)"
4. リロードさせて、バージョンが確認できれば、インストール完了である。
$ source /etc/profile $ rbenv -v rbenv 1.1.2-40-g62d7798
5. さらに、Ruby を rbenv 経由でインストールする時に必要なプラグイン ruby-build も clone する。
$ sudo git clone https://github.com/sstephenson/ruby-build.git /opt/rbenv/plugins/ruby-build
6. インストールを実行する。(PREFIX
でインストール先を指定しておく。)
$ PREFIX=/opt/rbenv sudo /opt/rbenv/plugins/ruby-build/install.sh
7. インストール可能な Ruby のバージョン一覧が表示されれば、ruby-buildのインストールは完了である。
$ rbenv install -l 2.5.8 2.6.6 2.7.2 Only latest stable releases for each Ruby implementation are shown. Use 'rbenv install --list-all / -L' to show all local versions.
Ruby インストール
Rubyをインストールする際に、必要なパッケージを事前にインストールしておく。(必要なパッケージに関しては、ruby-build_suggested-build-environment参照。ただし、gcc-6
は利用できないため、gcc-c++
に変更。)
$ sudo yum install -y gcc-c++ bzip2 openssl-devel libyaml-devel libffi-devel readline-devel zlib-devel gdbm-devel ncurses-devel
1. 今回インストールしたいのは、ver2.6.3 なので、バージョンを指定してインストールする。(root ユーザーでインストールを行った。root権限がないと、2.6.3のフォルダを作成する際にエラーが発生する。)
$ sudo -s [root@]$ rbenv install 2.6.3
2. rbenv で使用する Ruby のバージョンを指定する
[root@]$ rbenv global 2.6.3 [root@]$ rbenv rehash
3. Ruby のバージョンを確認する
[root@]$ ruby -v ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-linux]
4. Gem は個別に bundler で管理するので、システムにインストールする Gem は bundler だけなので、bundler のみをインストールしておく。
[root@]$ gem install bundler Fetching bundler-2.2.1.gem Successfully installed bundler-2.2.1 Parsing documentation for bundler-2.2.1 Installing ri documentation for bundler-2.2.1 Done installing documentation for bundler after 3 seconds 1 gem installed
5. rootユーザーから、一般ユーザに戻る。
[root@]$ exit
MySQL5.7 インストール
1. 既存のパッケージがインストールされているか、事前に確認する
$ yum list installed | grep mariadb $ yum list installed | grep mysql
2. 初期からインストールされている MariaDB 用パッケージを削除する。
$ sudo yum remove mariadb-libs
$ sudo yum localinstall https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
4. 今回は、MySQL5.7を使いたいので、MySQL8.0の無効化をして、MySQL5.7を有効化する。最後に、インストール可能なパッケージを確認する。
$ sudo yum-config-manager --disable mysql80-community $ sudo yum-config-manager --enable mysql57-community $ yum info mysql-community-server mysql-community-devel
5. MySQL5.7が利用可能であることが確認できたので、インストールする。
$ sudo yum install mysql-community-server mysql-community-devel
6. MySQLのバージョンが確認できたら、インストールは完了。(追加で、ログファイルを作成しておく。)
$ mysqld --version mysqld Ver 5.7.32 for Linux on x86_64 (MySQL Community Server (GPL)) $ sudo touch /var/log/mysqld.log
7. mysqld を起動する。
$ sudo service mysqld start
8. 起動状況の確認をする。
$ systemctl status mysqld.service
9. インスタンスの起動と同時に起動するように設定する。
$ sudo chkconfig mysqld on
10. 初期パスワードを確認する。
$ sudo less /var/log/mysqld.log | grep root@localhost 2020-12-17T03:16:27.232843Z 1 [Note] A temporary password is generated for root@localhost: (2<hB;Mwa(+X
末尾の部分がrootユーザの初期パスワードとなる。
11. mysqlにrootユーザでログインする。(パスワードを求められるので、上記のパスワードでログインする。)
$ mysql -u root -p Enter password:
12. パスワードの再設定を行う。(ただし、パスワードには、大文字、小文字、特殊文字(アスタリスク等)を含む必要がある。)
mysql> ALTER USER 'root'@'localhost' identified BY '<-新パスワード->'; mysql> exit
これでMySQLの設定は完了である。
Node.js(nvm) インストール
Node.jsの開発環境を構築するにあたって、バージョン管理できるライブラリとして nvm を使うこととする。 基本的には、rbenv と同じような流れでインストールを行う。
1. ディレクトリを作成して、そのパスを環境変数 NVM_ROOT に設定する。
$ sudo mkdir /opt/nvm $ export NVM_ROOT=/opt/nvm
2. git を用いて、nvm を /opt/nvm に clone する。
$ sudo git clone https://github.com/nvm-sh/nvm.git /opt/nvm
$ sudo mkdir /opt/nvm/versions
3. すべてのユーザが nvm を利用できるように、PATHを追加する。(/etc/profile.d に設定ファイルを作成する。)
$ sudo vi /etc/profile.d/nvm.sh
export NVM_ROOT="/opt/nvm" export PATH="$NVM_ROOT/bin:$PATH" [ -s "$NVM_ROOT/nvm.sh" ] && \. "$NVM_ROOT/nvm.sh" # This loads nvm [ -s "$NVM_ROOT/bash_completion" ] && \. "$NVM_ROOT/bash_completion" # This loads nvm bash_completion
4. リロードさせて、バージョンが確認できれば、インストール完了である。
$ source /etc/profile $ nvm -v 0.37.2
5. rootユーザーになり、インストール可能な Node.js のバージョン一覧を表示する。
$ sudo -s [root@]$ nvm ls-remote
6. Node.js のインストールする。(/opt/nvm/versions/node/[version No.]
にインストールされる)
[root@]$ nvm install 14.15.2
7. 使用するバージョンを指定する。
[root@]$ nvm use v14.15.2
8. Node.js のバージョンが確認できれば、完了である。
[root@]$ node -v v14.15.2 [root@]$ npm -v 6.14.9
9. また、yarn を使いたいので、yarn をインストールしておく。(yum でのインストールも可能であるが、nvm の node のバージョンと紐付けて管理したいので、npm でのインストールを行う。)
[root@]$ npm install -g yarn
10. yarn のバージョンを確認する。
[root@]$ which yarn /opt/nvm/versions/node/v14.15.2/bin/yarn [root@]$ yarn -v 1.22.10
11. rootユーザーから、一般ユーザに戻る。
[root@]$ exit
Nginx インストール
今回は、amazon-linux-extras リポジトリからインストールする。
1. インストール可能なパッケージ一覧を確認する。
$ amazon-linux-extras 37 mono available [ =5.x =stable ] 38 nginx1 available [ =stable ] 39 ruby2.6 available [ =2.6 =stable ]
2. Nginx が存在するので、インストールする。
$ sudo amazon-linux-extras install nginx1
3. 設定ファイルのバックアップをしておく。
$ sudo cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.back
4. Nginx を起動し、自動起動有効化を設定し、最後にステータスを確認する。
$ sudo systemctl start nginx $ sudo systemctl enable nginx $ systemctl status nginx
5. EC2 のIPアドレスにアクセスして、Nginx の画面が表示されれば動作確認も完了となる。
その他、よく使うコマンドは以下の通りである。
# 設定を再読み込み $ sudo systemctl reload nginx # Nginx 停止 $ sudo systemctl stop nginx
Railsのサンプルアプリ作成
動作確認のために、Rails のサンプルアプリケーションを作成する。
1. ディレクトリを作成し、bundle init
して、Gemfileを編集する。
$ mkdir sample $ cd sample $ bundle init $ vim Gemfile
2. 今回、Rails v5.2.3 をインストールするように Gemfile を変更する。
# frozen_string_literal: true source "https://rubygems.org" git_source(:github) {|repo_name| "https://github.com/#{repo_name}" } gem "rails", "~> 5.2.3"
3. 必要なGemをインストールする。ただし、システムには入れず、現在のパス配下の「vendor/bundle」にインストールさせる。(--jobs=4と指定することで、並列処理が可能となり、高速化される。)
$ bundle install --path vendor/bundle --jobs=4
4. 現在のディレクトリに、Rails ファイルを生成する。(Gemfileを上書きしていいか確認されるので、Yで続行する。)
$ bundle exec rails new . -d mysql -BJT
オプションでの指定は以下の通りである。(詳細に関しては、 bundle exec rails new -h
で確認できる。)
- -d mysql:データベースを MySQL に指定する。
- -B:(--skip-bundle)Rails 作成時に bundle install を行わない。
- -J:(--skip-javascript, --skip-turbolinks)JavaScript ファイルを作成しない。
- -T:(--skip-test)railsのデフォルトのテストminitestを使わない。
5. 追加したい Gem を Gemfile に追加して、インストールを行う。(上記で Gemfile を上書きしているため、conflict が発生するので、bundle install
ではなく、bundle update
を実行する。)
$ bundle update
6. MySQLサーバーに接続するために、config/database.yml のpasswordが空欄となっているので、先ほど設定した MySQL のrootユーザーの password
を追記する。
default: &default adapter: mysql2 encoding: utf8 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> username: root password: <-- パスワードを追記する --> host: localhost
7. Rails 用のデータベースを作成する。
$ bundle exec rake db:create
8. 次に、Nginx で表示できるように、今回のsampleアプリ用の Nginx の設定ファイルを追加する。
$ sudo vim /etc/nginx/conf.d/sample.conf
server { # リクエストを受けるポートを設定する listen 80; server_name localhost; location / { # 80 ポートで受けたリクエストを 3000 ポートに中継する proxy_pass http://127.0.0.1:3000; } }
9. Nginx を再起動する。
$ sudo systemctl reload nginx
10. 最後に、Rails サーバーを起動する。
$ bundle exec rails s
11. EC2 のIPアドレスにアクセスして、無事に Rails の起動画面が表示されれば、完了である。
長々とお疲れ様でした。
まとめ
無事に Rails アプリケーションの環境を構築することができた。環境構築方法は様々あるので、これからも最適解を探していきたい。
それでは、ステキな開発ライフを。