【CentOS8】Ruby on Rails 6の開発環境を構築する

zax_developerRubyonRails

こんにちは、ザックス株式会社の開発担当のものです。

以前、CentOS7にRuby on Rails6の開発環境を構築するといった記事を書きました。

Ruby on Rails 6の開発環境構築

今回は、CentOS8にRuby導入からRuby on Railsの開発環境を構築するまでの手順を解説します。

目次

  1. バージョン情報
  2. Rubyの動作環境を用意
  3. Railsプロジェクト用のDBを用意
  4. Railsサーバーにアクセスできるようにポートを開放
  5. Railsプロジェクトを作成
  6. Railsのデータベース設定ファイルを修正
  7. Node.jsとYarnを導入し、Webpackerをインストール
  8. 動作確認
  9. 最後に

1.バージョン情報

各バージョンは以下のとおりです。

  • OS:CentOS8.2
  • Git:2.18.4
  • rbenv:1.1.2
  • Ruby:2.6.6
  • DB:PostgreSQL 12.4
  • Rails:6.0.3.3
  • Node.js:12.18.2
  • Yarn:1.22.5
  • Webpacker:4.3.0

2.Rubyの動作環境を用意

CentOS8にRubyをインストールする方法はいくつかありますが、今回は複数のRubyのバージョン管理を可能にするツールrbenvを導入し、rbenvを使ってRubyをインストールします。

ここからはターミナルで作業していきます。

Gitをインストールします。

$ sudo yum -y install git
$ git --version
git version 1.8.3.1

rbenvをインストールします。

/home/{ユーザー名}
$ git clone https://github.com/rbenv/rbenv.git ~/.rbenv

rbenvのPATHを設定します。

/home/{ユーザー名}
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
$ ~/.rbenv/bin/rbenv init
$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
$ source ~/.bash_profile

rbenvのパスが通っているか確認します。

/home/{ユーザー名}
$ rbenv --version
rbenv 1.1.2-28-gc2cfbd1

次にruby-buildを導入します。

ruby-buildは、rbenvからRubyをインストールするために必要なプラグインになります。

/home/{ユーザー名}
$ mkdir -p "$(rbenv root)"/plugins
$ git clone https://github.com/rbenv/ruby-build.git "$(rbenv root)"/plugins/ruby-build

rbenvが正しく動作するかを確認するために、rbenv-doctorスクリプトを実行します。

※rbenv-doctorは、動作環境が適切かどうかをチェックするものになります。
/home/{ユーザー名}
$ curl -fsSL https://github.com/rbenv/rbenv-installer/raw/master/bin/rbenv-doctor | bash

実行結果に「Counting installed Ruby versions: none」と表示されるのは、まだRubyをインストールしていないためです。

これからRubyをインストールしていきます。

まずインストール可能なRubyのバージョンを確認します。

/home/{ユーザー名}
$ rbenv install -l

今回は安定板であるRuby 2.6.6をインストールします。

/home/{ユーザー名}
$ rbenv install 2.6.6

Downloading ruby-2.6.6.tar.bz2...
-> https://cache.ruby-lang.org/pub/ruby/2.6/ruby-2.6.6.tar.bz2
Installing ruby-2.6.6...

BUILD FAILED (CentOS Linux 8 using ruby-build 20200819-2-g258455e)

Inspect or clean up the working tree at /tmp/ruby-build.20200909120127.3127.waACye
Results logged to /tmp/ruby-build.20200909120127.3127.log

Last 10 log lines:
The Ruby readline extension was not compiled.
The Ruby zlib extension was not compiled.
ERROR: Ruby install aborted due to missing extensions
Try running `yum install -y openssl-devel readline-devel zlib-devel` to fetch missing dependencies.

Configure options used:
  --prefix=/home/dev01/.rbenv/versions/2.6.6
  --enable-shared
  LDFLAGS=-L/home/dev01/.rbenv/versions/2.6.6/lib
  CPPFLAGS=-I/home/dev01/.rbenv/versions/2.6.6/include

上記の結果からパッケージが不足していることが分かります。

足りないパッケージをdnfコマンドでインストールします。

$ sudo dnf -y install openssl-devel readline-devel zlib-devel

もう一度rbenvコマンドでインストールします。

/home/{ユーザー名}
$ rbenv install 2.6.6

globalにセットします。

/home/{ユーザー名}
$ rbenv global 2.6.6
$ rbenv rehash
$ rbenv versions
* 2.6.6 (set by /home/{ユーザー名}/.rbenv/version)

Rubyのバージョンを確認します。

/home/{ユーザー名}
$ ruby -v
ruby 2.6.6p146 (2020-03-31 revision 67876) [x86_64-linux]

問題なくインストールされていることが確認できました。

3.Railsプロジェクト用のDBを用意

Railsプロジェクト用のデータベースを用意します。

今回はPostgreSQL 12を使用します。

PostgreSQL公式ダウンロードサイト

$ sudo dnf install https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm
$ sudo dnf -qy module disable postgresql
$ sudo dnf install postgresql12 postgresql12-server postgresql12-devel

DBを初期化します。
※rootユーザーで実行してください。

# /usr/pgsql-12/bin/postgresql-12-setup initdb
Initializing database ... OK

DBを起動します。

# systemctl start postgresql-12

DBの自動起動を有効にします。

# systemctl enable postgresql-12

DBにアクセスできるか確認します。

# su - postgres
$ psql -l
                                         データベース一覧
   名前    |  所有者  | エンコーディング |  照合順序  | Ctype(変換演算子) |     アクセス権限
-----------+----------+------------------+------------+-------------------+-----------------------
 postgres  | postgres | UTF8             | ja_JP.utf8 | ja_JP.utf8        |
 template0 | postgres | UTF8             | ja_JP.utf8 | ja_JP.utf8        | =c/postgres          +
           |          |                  |            |                   | postgres=CTc/postgres
 template1 | postgres | UTF8             | ja_JP.utf8 | ja_JP.utf8        | =c/postgres          +
           |          |                  |            |                   | postgres=CTc/postgres

上記のようにテーブルが一覧で表示されればOKです。
exitコマンドで抜けます。

$ exit

postgresユーザーのパスワードを設定します。

任意のパスワードを設定してください。

# passwd postgres

作業ユーザーに切り替えてから、postgresユーザーに切り替えるときにパスワードが求められるか確認します。

/home/{ユーザー名}
$ su - postgres
パスワード:

問題なければ、exitコマンドで抜けます。

PostgreSQLの設定ファイルを修正します。

/home/{ユーザー名}
$ sudo vim /var/lib/pgsql/12/data/pg_hba.conf
変更前
...
# "local" is for Unix domain socket connections only
local   all             all                                     peer
# IPv4 local connections:
host    all             all             127.0.0.1/32            ident
# IPv6 local connections:
host    all             all             ::1/128                 ident
# Allow replication connections from localhost, by a user with the
# replication privilege.
local   replication     all                                     peer
host    replication     all             127.0.0.1/32            ident
host    replication     all             ::1/128                 ident

変更後
...
# "local" is for Unix domain socket connections only
local   all             all                                     peer
# IPv4 local connections:
host    all             all             127.0.0.1/32            trust
# IPv6 local connections:
host    all             all             ::1/128                 trust
# Allow replication connections from localhost, by a user with the
# replication privilege.
local   replication     all                                     peer
host    replication     all             127.0.0.1/32            trust
host    replication     all             ::1/128                 trust

“ident”の部分を”trust”に変更しています。

ただしDB接続への許可を制限する機能を持ち、全て”trust”に変更するのはセキュリティ上適切ではありません。

今回はあくまでRailsアプリを動かすことを目的としていますので、適宜変更をお願いします。

ファイルを保存し、DBを再起動します。

/home/{ユーザー名}
$ sudo systemctl restart postgresql-12

4.Railsサーバーにアクセスできるようにポートを開放

Ruby on Railsを動かすためのアプリケーションサーバーであるPumaを利用するためには、Firewallのポートを開ける必要があります。

次のコマンドで3000番ポートを開放しましょう。

/home/{ユーザー名}
$ sudo firewall-cmd --zone=public --add-port=3000/tcp --permanent

設定を反映します。

/home/{ユーザー名}
$ sudo firewall-cmd --reload

ポートが開放されているか確認します。

/home/{ユーザー名}
$ sudo firewall-cmd --list-all
...
ports: 3000/tcp
...

5.Railsプロジェクトを作成

プロジェクト専用のディレクトリを作成します。

/home/{ユーザー名}
$ mkdir railstest

Gemfileを生成します。

/home/{ユーザー名}/railstest
$ bundle init

Gemfileにあるrailsのコメントアウトを外します。

/home/{ユーザー名}/railstest
$ vim Gemfile
変更前
...
# gem "rails"
...
変更後
...
gem "rails"
...

Railsをインストールします。

/home/{ユーザー名}/railstest
$ bundle install --path vendor/bundle

DBにPostgreSQLを指定し、Railsプロジェクトをたちあげます。

/home/{ユーザー名}/railstest
$ bundle exec rails new . -d postgresql

エラーが発生するので、順番に対応していきます。

tzinfo-dataのエラーは、Gemfileの以下の記述を変更します。

/home/{ユーザー名}/railstest
$ vim Gemfile
変更前
...
gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]
...
変更後
...
gem 'tzinfo-data'
...

pg_configのエラーは、pg_configの場所を指定してあげることで解決します。

/home/{ユーザー名}/railstest
$ bundle config build.pg --with-pg-config=/usr/pgsql-12/bin/pg_config

もう一度インストールします。

/home/{ユーザー名}/railstest
$ bundle install

6.Railsのデータベース設定ファイルを修正

PostgreSQLに接続するためには、設定ファイルを編集する必要があります。

$ vim config/database.yml
変更前
...
default: &default
  adapter: postgresql
  encoding: unicode
  # For details on connection pooling, see Rails configuration guide
  # https://guides.rubyonrails.org/configuring.html#database-pooling
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
...
変更後
...
default: &default
  adapter: postgresql
  encoding: utf8
  # For details on connection pooling, see Rails configuration guide
  # https://guides.rubyonrails.org/configuring.html#database-pooling
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: postgres
  password: postgresユーザーのパスワードを入力
  host: localhost
...

設定ファイルの修正が終わりましたら、以下のコマンドでテーブルを作成します。

/home/{ユーザー名}/railstest
$ bundle exec rails db:create
Created database 'railstest_development'
Created database 'railstest_test'

7.Node.jsとYarnを導入し、Webpackerをインストール

Ruby on Rails 6からは、WebpackのラッパーライブラリであるWebpackerの使用がデフォルトになりました。

※Webpackerとは、WebpackをRuby on Railsで使うためのgemパッケージになります。 Webpackとは、CSSやJavaScript、画像などを1つのファイルとしてまとめるモジュールバンドラーになります。

Webpackerをインストールするためには、Node.jsとYarnが必要になります。

まず、推奨版のNode.js12系をインストールします。

$ sudo dnf module list nodejs
CentOS-8 - AppStream
Name      Stream    Profiles                                Summary
nodejs    10 [d]    common [d], development, minimal, s2i   Javascript runtime
nodejs    12        common [d], development, minimal, s2i   Javascript runtime

nodejs10がデフォルトになっているので、以下のコマンドから12に切り替えます。

$ sudo dnf module enable nodejs:12

インストールします。

$ sudo dnf install nodejs

無事にインストールされていることが確認できました。

次に安定板のYarn1.22.5をインストールします。

/home/{ユーザー名}/railstest
$ curl --silent --location https://dl.yarnpkg.com/rpm/yarn.repo | sudo tee /etc/yum.repos.d/yarn.repo
$ sudo yum install yarn
$ yarn -v
1.22.5

最後にWebpackerをインストールします。

/home/{ユーザー名}/railstest
$ bundle exec rails webpacker:install

8.動作確認

実際にRails serverコマンドでPumaを起動し、ブラウザから確認してみます。

/home/{ユーザー名}/railstest
$ bundle exec rails s -b 0.0.0.0

http://{サーバーのIPアドレス}:3000にアクセスしてみましょう。

上記のウェルカムページが表示されればOKです。
無事にRailsアプリケーションが動作することを確認できました。

9.最後に

今回は、CentOS8にRuby導入からRuby on Railsの開発環境を構築するまでの手順を解説しましたがいかがでしたでしょうか。

現時点ではまだまだインターネット上の記事が少ないので、本記事が参考になれば幸いです。

最後までお読みいただきありがとうございました。