こんにちは、ザックス株式会社の開発担当のものです。
以前、CentOS7にRuby on Rails6の開発環境を構築するといった記事を書きました。
Ruby on Rails 6の開発環境構築今回は、CentOS8にRuby導入からRuby on Railsの開発環境を構築するまでの手順を解説します。
目次
- バージョン情報
- Rubyの動作環境を用意
- Railsプロジェクト用のDBを用意
- Railsサーバーにアクセスできるようにポートを開放
- Railsプロジェクトを作成
- Railsのデータベース設定ファイルを修正
- Node.jsとYarnを導入し、Webpackerをインストール
- 動作確認
- 最後に
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を使用します。
$ 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の開発環境を構築するまでの手順を解説しましたがいかがでしたでしょうか。
現時点ではまだまだインターネット上の記事が少ないので、本記事が参考になれば幸いです。
最後までお読みいただきありがとうございました。