Ruby
Rails
MySQL
CentOS
Conoha
3
どのような問題がありますか?

この記事は最終更新日から1年以上が経過しています。

投稿日

更新日

Railsアプリ〜デプロイへの道〜その②Ruby・MySQLインストール編【ConoHa VPS・CentOS・Capistrano3・Nginx・Unicorn】

Railsアプリケーションをデプロイした時の手順をまとめた記事の第2弾です。

今回はRubyおよびMySQLのインストール・設定の手順をまとめました。

前回同様こちらの記事がベースとなっています。
https://qiita.com/ryo2132/items/f62690f0b16ec11270fe

〈関連記事〉
Railsアプリ〜デプロイへの道〜その①リモートサーバーへのSSH接続編
Railsアプリ〜デプロイへの道〜その③Capistrano3設定編

開発環境

・Mac OS
・Rails 5.2.3
・Ruby 2.5.1
・ConoHa VPS
・CentOS 7.6
・Capistrano3
・Nginx
・Unicorn

Rubyのインストール

ConoHa VPSにRubyをインストールしていきます。

1.Gitインストール

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

$ sudo yum -y install git

$ git --version
# version名出力されればOK

2.rbenvインストール

続いてrbenvをインストール。
rbenvはRubyのバージョン管理ツールです。

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

ruby-burildインストール

こちらもRubyをインストールするために必要になります。

$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build

3.rbenv設定

rbenvコマンドを使えるようにするためにbash_profileに以下の内容を追加します。

# PATHにrbenvコマンドを追加
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
# rbenvの初期化
$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
# bashの再読込
$ source ~/.bash_profile
# rbenvのバージョン確認 バージョンが出ればOK
$ rbenv -v

これでRubyインストールの準備は完了です。
いよいよRubyをインストールします。

4.Rubyインストール

ローカルで使用中のRubyバージョンを確認
サーバーにインストールする前に、開発で使用したRubyのバージョンを確認します。

ローカル

$ ruby -v

ローカルと同じバージョンのRubyをインストール

サーバー

$ rbenv install 2.5.1 
# globalで使用するrubyの設定
$ rbenv global 2.5.1
# rbenvの再起動?
$ rbenv rehash
# rubyのバージョン確認
$ ruby -v

5.bundleインストール

Gemの管理ツールであるbundlerをインストールします。

bundlerのバージョンを開発したRailsアプリのGemfile.lockのものと合わせる必要があります。
バージョンが合っていないとデプロイ時にエラーが発生します。
参考:https://qiita.com/MotohiroSiobara/items/c0d343a160cffc2902ef

RailsアプリのGemfile.lockを確認

BUNDLED WITH 2.0.1

サーバー
同じバージョンのbundlerをインストール。

$ gem install bundle -v 2.0.1

6.関連パッケージインストール

必要なパッケージを諸々インストール
これらがないとデプロイ時にエラー起こします。

<参考>
https://teratail.com/questions/13430
https://qiita.com/jaxx2104/items/2277cec77850f2d83c7a

サーバー

#gcc-c++インストール
$ sudo yum install gcc-c++

#node.jsインストール
$ sudo yum install nodejs npm --enablerepo=epel 

#yarnインストール
$ sudo npm install -g yarn

MySQL

1.事前準備:MariaDBの削除

CentOS7系では標準でMariaDB(MySQL互換のDB)がインストールされている場合があるので、MySQLと競合しないようMariaDBを削除します。

参考:https://qiita.com/miqpim/items/5c519a9979d9b269d47e

サーバー

$ rpm -qa | grep maria     # mariaDBが存在するか確認
$ sudo yum remove mariadb-libs  # 本体削除
$ sudo rm -rf /var/lib/mysql  # データ削除

rmコマンドのオプションについてはこちらをご覧ください。
参考:https://eng-entrance.com/linux_command_rm

2.MySQLのリポジトリを登録

Mysql公式のYumリポジトリをインストールします。
最新版はMysql公式で確認できます。

サーバー

〈参考〉
https://qiita.com/rutko/items/56a33d1ecd70c0480202
https://qiita.com/nooboolean/items/7efc5c35b2e95637d8c1

CentOSのバージョンの確認

$ cat /etc/redhat-release

リポジトリのインストール

yumコマンドのlocalinstallオプションを使うことでリモートにあるrpmファイルをインストールすることができます。
rpmコマンドを使ってのインストールも可能ですが、依存関係とかを考慮したインストールまではしてくれないので、yumでインストールしましょう。
URLはリモートにあるrpmファイルをインストールするためのもので、公式サイトのリポジトリを、 http://dev.mysql.com/get/の後に付け加えて完成です。(お使いのOSに合わせたものを選んでください)

詳しくはこちらの記事をご覧ください。
https://qiita.com/nooboolean/items/7efc5c35b2e95637d8c1

$ sudo yum localinstall http://dev.mysql.com/get/mysql57-community-release-el7-7.noarch.rpm

リポジトリの確認

/etc/yum.repos.d配下に、mysql-community-source.repoとmysql-community.repoというリポジトリが作成されてるはずです。

$ cd /etc/yum.repos.d/
$ ls
mysql-community-source.repo  mysql-community.repo

このリポジトリが作成されて入れば、リポジトリの追加の確認は完了

インストールできたか確認

$ yum repolist all | grep mysql

mysql-connectors-community/x86_64 MySQL Connectors Community      有効:
mysql-connectors-community-source MySQL Connectors Community - So 無効
mysql-tools-community/x86_64      MySQL Tools Community           有効:
mysql-tools-community-source      MySQL Tools Community - Source  無効
mysql55-community/x86_64          MySQL 5.5 Community Server      無効
mysql55-community-source          MySQL 5.5 Community Server - So 無効
mysql56-community/x86_64          MySQL 5.6 Community Server      無効  <-ここ注目
mysql56-community-source          MySQL 5.6 Community Server - So 無効
mysql57-community/x86_64          MySQL 5.7 Community Server      有効: <-ここ注目
mysql57-community-source          MySQL 5.7 Community Server - So 無効

(環境によっては有効がenabled、無効がdisabledと表示される)
上記の例では、5.7が有効、5.6が無効になっています。
このままインストールすると、有効になっている5.7がインストールされてしまうので、5.6をインストールするには有効無効の切り替えをします。
この切り替えをするためにはyumの設定変更用のyum-utilsパッケージが必要なので、インストールされていない場合はインストールします。

$ yum list installed | grep yum-utils  #yum-utilsがインストールされているか確認
$ yum -y install yum-utils #入ってなければyum-utilsをインストールする
$ yum-config-manager --disable mysql57-community     #5.7を無効に設定
$ yum-config-manager --enable mysql56-community       #5.6を有効に設定

設定ができているか再度確認。

$ yum repolist all | grep mysql

mysql-connectors-community/x86_64  MySQL Connectors Community       有効:    
mysql-connectors-community-source  MySQL Connectors Community - Sou 無効
mysql-tools-community/x86_64       MySQL Tools Community            有効:     
mysql-tools-community-source       MySQL Tools Community - Source   無効
mysql55-community/x86_64           MySQL 5.5 Community Server       無効
mysql55-community-source           MySQL 5.5 Community Server - Sou 無効
mysql56-community/x86_64           MySQL 5.6 Community Server       有効:    
mysql56-community-source           MySQL 5.6 Community Server - Sou 無効
mysql57-community/x86_64           MySQL 5.7 Community Server       無効
mysql57-community-source           MySQL 5.7 Community Server - Sou 無効

5.6が有効になっていればOK。

#バージョン確認
$ yum info mysql-community-server
# インストール
$ sudo yum install mysql-community-server mysql-devel

mysql-develは必要です。
ないとデプロイ時にエラーが出ます。
参考:https://teratail.com/questions/181707

# 確認。バージョン出ればOK
$ mysqld --version

Mysqlの起動/自動起動設定

起動

$ sudo systemctl start mysqld.service   #起動

自動起動設定

$ sudo systemctl enable mysqld.service   #自動起動 ON
$ systemctl disble mysqld   #自動起動 OFF

自動起動になっているか確認

$ systemctl is-enabled mysqld

mysqld.service is not a native service, redirecting to /sbin/chkconfig.
Executing /sbin/chkconfig mysqld --level=5
enabled

enabledになっていれば自動起動 ONに設定されています。

基本操作

$ sudo systemctl start mysqld.service   #起動
$ systemctl stop mysqld    #停止
$ systemctl status mysqld  #ステータス確認
$ systemctl restart mysqld #再起動

ちなみに、mysqldのdはデーモン (daemon)のdらしいです。
デーモンについてはこちらの記事をご覧ください。
https://wa3.i-3-i.info/word11000.html

簡単に言うと「いつでも動けるようにスタンバイしてる常駐プログラム」だそうです。

3.パスワード、セキュリティ設定

続いてMySQLの設定をしていきます。
今回の山場です。
参考:https://weblabo.oscasierra.net/mysql-57-init-setup/

ログインするために、まず自動生成された初期パスワードを確認します。

$ sudo cat /var/log/mysqld.log | grep password
2017-12-31T11:31:07.946947Z 1 [Note] A temporary password is generated for root@localhost: .7ogGO4yokDh
# 「.7ogGO4yokDh」の部分が初期パスワードです

確認できたらmysql_secure_installationで初期設定を行います。
以下対話形式で進むので適宜コマンド入力してください。

$ mysql_secure_installation


Securing the MySQL server deployment.

Enter password for user root: # ログファイルから取得した初期パスワードを入力します

The existing password for the user account root has expired. Please set a new password.

New password: # root ユーザの新規パスワードを入力します

Re-enter new password: # 確認用にもう一度入力します
The 'validate_password' plugin is installed on the server.
The subsequent steps will run with the existing configuration
of the plugin.
Using existing password for root.

Estimated strength of the password: 100
Change the password for root ? ((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 # ローカルホスト以外からアクセス可能な root アカウントを削除
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 # test データベースの削除
 - 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!

4.日本語化

日本語を扱うために文字コードを設定します。
日本語の文字コードはutf8に設定すると思いますが、utf8mb4は絵文字に対応した文字コードなので、僕はutf8ではなくutf8mb4で設定しています。

現状、問題なく使えています。

〈参考〉
https://qiita.com/okamu_/items/5eb81688849fbe351350
https://qiita.com/jkr_2255/items/74fc79e764378b59355a

$ sudo vi /etc/my.cnf

#ファイル内の末尾に以下を追記
[mysqld]
character-set-server=utf8mb4

[client]
default-character-set=utf8mb4

#再起動
$ sudo systemctl restart mysqld.service

#文字コード確認
$ mysql -u root -p

$ show variables like "chara%";

utf8mb4になってたらOK!

5.Time-zone設定

〈参考〉
https://dev.mysql.com/doc/refman/8.0/en/time-zone-support.html
https://agohack.com/mysql-change-timezone/

現在のタイムゾーンを確認

$ show variables like '%time_zone%';

system_time_zone : UTC
time_zone : SYSTEM

タイムゾーンデータの確認

$ select * from mysql.time_zone;

空の場合は、データをインポートする。

タイムゾーンのインポート

$ /usr/bin/mysql_tzinfo_to_sql /usr/share/zoneinfo > ~/timezone.sql
# passwordを聞かれるのでmysqlのパスワードを入力
$ mysql -u root -p -Dmysql < ~/timezone.sql

設定の追加

$ sudo vi /etc/my.cnf

# 末尾に以下を追加
[mysqld]
default-time-zone = 'Asia/Tokyo'

再起動

$ sudo systemctl restart mysqld.service

確認

mysql > show variables like '%time_zone%';

# 以下表示が出ればOK
+------------------+------------+
| Variable_name    | Value      |
+------------------+------------+
| system_time_zone | JST        |
| time_zone        | Asia/Tokyo |
+------------------+------------+
2 rows in set (0.00 sec)

MySQLの自動起動設定
サーバーの再起動の際にも、mysqlが自動的に起動するよう設定します。

chkconfig mysqld on

まとめ

以上、Railsアプリ〜デプロイへの道〜その②Ruby・MySQLインストール編でした。

次回はいよいよ完結編。
Capistrano3・Nginx・Unicornの設定をし、アプリケーションをデプロイします。

Railsアプリ〜デプロイへの道〜その③Capistrano3設定編

ユーザー登録して、Qiitaをもっと便利に使ってみませんか。
  1. あなたにマッチした記事をお届けします
    ユーザーやタグをフォローすることで、あなたが興味を持つ技術分野の情報をまとめてキャッチアップできます
  2. 便利な情報をあとで効率的に読み返せます
    気に入った記事を「ストック」することで、あとからすぐに検索できます
Lmachi

コメント

この記事にコメントはありません。
あなたもコメントしてみませんか :)
ユーザー登録
すでにアカウントを持っている方はログイン
記事投稿イベント開催中
データに関する記事を書こう!
~
3
どのような問題がありますか?
ユーザー登録して、Qiitaをもっと便利に使ってみませんか

この機能を利用するにはログインする必要があります。ログインするとさらに下記の機能が使えます。

  1. ユーザーやタグのフォロー機能であなたにマッチした記事をお届け
  2. ストック機能で便利な情報を後から効率的に読み返せる
ユーザー登録ログイン
ストックするカテゴリー