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の設定をし、アプリケーションをデプロイします。