Help us understand the problem. What is going on with this article?

CentOS8にRuby on Rails 6.0(MySQL)の開発環境を作る

前提

  • windows10上のVirtual Box 6.0で構築
  • Virtual Box 6.0をインストール後から開始
  • CentOS8のisoファイル(CentOS-8-x86_64-1905-dvd1.iso)はダウンロード済み

各種バージョン

  • Virtual Box 6.0
  • CentOS 8
  • Ruby 2.6.5
  • Ruby on Rails 6.0
  • MySQL 8.x.x
  • Nodebrew 12.13.0

全体の流れ

  • Virtual Boxに仮想マシンを作成
  • OSインストール
  • CentOS 初期設定
  • Ruby・Railsのインストール
  • Nodeのインストール
  • MySQLのインストール
  • Firewallの設定
  • プロジェクトの作成&各種設定
  • サーバーの起動

Virtual Boxに仮想マシンを作成

「新規」を押下。
2019-10-22 (0).png

  • 仮想マシンの作成
    • 名前: rails_test(任意)
    • マシンフォルダー: (任意)
    • タイプ: Linux
    • バージョン: Red Hat (64-bit)

2019-10-22 (1).png

以降は任意で設定。今回はデフォルトのままで進めました。

仮想マシンが作成されたら、「設定」を押下します。

「システム」→「マザーボード」→「起動順序」のハードディスクの順序を一番上に持ってきてください。
これをしないと、OSインストール直後の再起動時にisoファイルが再読み込みされます。

2019-10-22 (11).png

「ネットワーク」→「アダプター 2」で「ネットワークアダプターを有効化」にチェックを入れ、割り当てを「ホストオンリーアダプター」に設定。

2019-10-22 (12).png

OSインストール

仮想マシンを起動、ダウンロードしたisoファイルを選択。
2019-10-22 (13).png

日本語を選択して続行
2019-10-22 (16).png

赤色の枠を付けたところを設定します。

  • 時刻と日付...アジア/東京
  • ソフトウェアの選択...最小限のインストール
  • インストール先...デフォルト
  • ネットワークとホスト名...Ethernet(enp0s3), Ethernet(enp0s8)の接続を両方ONにする。

リリースノートによると、Virtual Boxを使用した上で「ソフトウェアの選択」がデフォルトのままだと問題があるようです。

2019-10-22 (17).png

ここまでできたら、インストールの開始をします。rootのパスワードを設定します。ユーザーは後で作成するのでここでは何もしません。

2019-10-22 (22).png

CentOS 初期設定

インストールが終了して、再起動したらrootでログインしてください。

ネットワークの設定

# nmcli device status

すると、ホストオンリーアダプターが接続されていないと思うので、以下のコマンドで接続します。

# nmcli c up id enp0s8

パッケージのアップデート

# dnf -y update

※CentOS8から、yumコマンドからdnfコマンドになりました。

ユーザーの作成・パスワードの設定

# useradd -m [ユーザー名]
# passwd [ユーザー名]

パッケージのインストール

dnf install -y git gcc-c++ glibc-headers openssl openssl-devel readline readline-devel zlib zlib-devel bzip2 tar make

Ruby・Railsのインストール

作成したユーザーでログインしてください。

rbenvのインストール

$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv

環境変数の設定

$ echo 'export RBENV_ROOT="$HOME/.rbenv"' >> ~/.bash_profile
$ echo 'export PATH="${RBENV_ROOT}/bin:${PATH}"' >> ~/.bash_profile
$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
$ source ~/.bash_profile
$ rbenv --version

最後にバージョンが表示されればインストール完了です。

Rubyインストール

$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
$ rbenv install -l
$ rbenv install -v 2.6.5
$ rbenv rehash
$ rbenv global 2.6.5
$ ruby -v

最後にバージョンが表示されればインストール完了です。(バージョンは適宜)

Rails インストール

$ gem update --system
$ gem install rails
$ gem install bundler
$ rbenv rehash
$ rails -v

最後にバージョンが表示されればインストール完了です。(バージョンは適宜)

Nodeをインストール

$ curl -L git.io/nodebrew | perl - setup
$ echo 'export PATH=$HOME/.nodebrew/current/bin:$PATH' >> ~/.bash_profile
$ source ~/.bash_profile
$ nodebrew install-binary stable
$ nodebrew ls
$ nodebrew use v12.13.0
  ↑「nodebrew ls」で表示された、使用するバージョンを指定
$ node -v

最後にバージョンが表示されればインストール完了です。(バージョンは適宜)

MySQLのインストール

rootでログインしします。

インストール

# dnf install -y mysql-server mysql-devel

起動

# systemctl start mysqld

初期設定

# mysql_secure_installation

いくつか質問があるので、適宜選択してください。
今回は下の流れで行いました。
基本はyes、パスワードポリシーの強度は0(=8文字以上)です。

[root@localhost ~]# mysql_secure_installation

Securing the MySQL server deployment.

Connecting to MySQL using a blank password.

VALIDATE PASSWORD COMPONENT can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD component?

Press y|Y for Yes, any other key for No: y

There are three levels of password validation policy:

LOW    Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary                  file

Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 0
Please set the password for root here.

New password: [新パスワード]

Re-enter new password: [新パスワード(確認)]

Estimated strength of the password: 50 
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.

Remove anonymous users? (Press y|Y for Yes, any other key for No) : y
Success.


Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.

Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y
Success.

By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.


Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y
 - Dropping test database...
Success.

 - Removing privileges on test database...
Success.

Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.

Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y
Success.

All done!

完了したらMySQLにrootでログインしてください。

ユーザーの作成・権限付与

> CREATE USER '[作成ユーザー名]'@'%' IDENTIFIED BY '[パスワード]';
> GRANT ALL ON *.* TO '[ユーザー名]'@'%';
> FLUSH PRIVILEGES;

DB作成

アプリで使用するDBを作成しておきます。

> CREATE DATABASE [DB名];

ここまでできたらログアウトして、MySQLを再起動します。

# systemctl restart mysqld

Firewallの設定

ポートの3000番を開けておきます。これを忘れて「サーバー起動してもアクセスできない」というのがあるあるでした。

# systemctl start firewalld
# firewall-cmd --add-port=3000/tcp --zone=public --permanent
# firewall-cmd --reload

プロジェクトの作成&各種設定

rootからログインしなおします。

$ mkdir [プロジェクト名]
$ cd [プロジェクト名]
$ bundle init

作成されたGemファイルを「vi Gemfile」などで開き、railsのコメントアウトを外します。

source "https://rubygems.org"
gem "rails", "6.0.0"            ←コメントアウト(#)を外す

gemのインストール

$ bundle install
$ bundle exec rails new . -d mysql --skip-bundle
$ gem install mysql2
$ bundle update
$ bundle install

project/config/database.ymlの設定

default: &default
  adapter: mysql2
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: [ユーザー名]
  password: [パスワード]
  socket: /var/lib/mysql/mysql.sock
  database: [DB名]
  charset: utf8mb4
  encoding: utf8mb4
  collation: utf8mb4_unicode_ci

development:
  <<: *default

test:
  <<: *default

production:
  <<: *default

I18n言語設定(必要であれば)

・gemの追加... "rails-i18n"
・config/locales/にja.ymlファイルを作成

/project/config/application.rb(追記)
config.time_zone = "Tokyo"
config.active_record.default_timezone = :local

# 言語ファイルを階層ごとに設定するための記述
config.i18n.load_path += Dir[Rails.root.join("config", "locales", "**", "*.{rb,yml}").to_s]

# アプリケーションが対応している言語のホワイトリスト(ja = 日本語, en = 英語)
config.i18n.available_locales = %i(ja en)

# 上記の対応言語以外の言語が指定された場合、エラーとするかの設定
config.i18n.enforce_available_locales = true

# デフォルトの言語設定
config.i18n.default_locale = :ja

文字コードutf8mb4対応(必要であれば)

config/initializers/utf8mb4.rb
module Utf8mb4
  def create_table(table_name, options = {})
    table_options = options.merge(options: 'ENGINE=InnoDB ROW_FORMAT=DYNAMIC')
    super(table_name, table_options) do |td|
      yield td if block_given?
    end
  end
end

ActiveSupport.on_load :active_record do
  module ActiveRecord::ConnectionAdapters
    class AbstractMysqlAdapter
      prepend Utf8mb4
    end
  end
end

webpackerのインストール

rails 6.0から必須になりました。

$ npm install -g yarn
$ rails webpacker:install

webpackerでjs.erbを使用できるようにする

jsをerbで使用する方がほとんどだと思います。

$ bundle exec rails webpacker:install:erb

サーバーの起動

jsをホットリロードしてくれるので、

$ bin/webpack-dev-server

を実行したあとにサーバー起動するのをおすすめします。

$ rails s -b 0.0.0.0

終わりに

とりあえず以上で動くようにはなります。
あとは適宜設定していただければと思います。
ザーっと書きなぐったかんじなので、不足している点があればコメントいただければ幸いです。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away