20201125のMySQLに関する記事は5件です。

Oracle MySQL Database Serviceを利用してWordPressを動かしてみた

  • Oracle MySQL Database Serviceの使い方メモ〜その4
  • WordPressコンテナからMySQL Database Serviceインスタンスへ接続する
  • Oracle Linux 8 + SELinux + podman + WordPress + MySQL Database Service

はじめに

Oracle Cloud Infrastructure (OCI) でマネージドサービスとして利用可能なOracle MySQL Database Serviceを利用してWordPressの環境を構築してみました。また、WordpressはOracle Linux 8上のPodmanを利用したコンテナ環境で稼働させています。podmanの利用方法については下記の記事を参照ください。

OCI上のOracle Linux 8 + podmanでWordPressを動かす

検証環境

  • MySQL 8.0.22-u2-cloud (Oracle MySQL Database Service)
  • Oracle Linux Server release 8.2 : Wordpressサーバ、Bastionサーバで利用
  • docker.io/library/wordpress:latest (Wordpress 5.5.3, PHP 7.4.12)
  • podman 2.0.5

OCI上の検証環境の構築

検証環境構成

前回の検証環境に加えてWordPressが稼働するWPサーバを作成します。また、ネットワークはBastionサーバと同じパブリック・サブネットに配置し、セキュリティ・グループによってWPサーバ固有のポート(8080番)を経由したアクセスを許可します。
20-11-25-20-15-55.png

OCI上のVCN構成 ~ Bastionサーバの作成 ~ MySQL Database Serviceインスタンスの作成

作業手順については前回の記事 を参照ください。Bastionサーバには、MySQL ShellやMySQLクライアントなどMySQL Database Serviceインスタンスへアクセスできるクライアント・ツールをご用意ください。

セキュリティ・グループの作成

クライアントのWebブラウザからWordpressの検証環境にアクセスするために、インターネットからのInbound通信で8080ポートを許可するようにセキュリティ・グループ WPを作成します。
OCIダッシュボードメニューから、コア・インフラストラクチャ>ネットワーキング>仮想クラウド・ネットワークにアクセスし、作成したVCN (本記事内ではMySQLTest) を選択、画面左下のリソースメニューよりネットワーク・セキュリティ・グループを選択、画面中央のネットワーク・セキュリティ・グループの作成ボタンをクリックし、下記の設定を有したセキュリティ・グループ WPを作成してください。

ステートレス ソース・タイプ ソースCIDR IPプロトコル ソース・ポート範囲 宛先ポート範囲
いいえ CIDR 0.0.0.0/0 TCP All 8080

WordPressが稼働するCompute VMインスタンスの作成

OCIダッシュボードメニューから、コア・インフラストラクチャ>コンピュート>インスタンスにアクセスします。インスタンスの作成ボタンを押してComputeインスタンスの作成ウィザードを開始します。ウィザード内の入力例を下記に示します。


  • 名前 : 任意名前 WP
  • コンパートメントの選択 : 任意のコンパートメント名  /dev

  • 配置とハードウェアの構成

    • 可用性ドメインの選択 :デフォルト Fubk:AP-TOKYO-1-AD-1
    • フォルト・ドメインの選択 :デフォルト  FAULT-DOMAIN-1
    • イメージ:Oracle Linux 8
    • シェイプの選択:デフォルト  VM.Standard.E2.1
  • ネットワーキングの構成

    • 仮想クラウド・ネットワーク: MySQLTest
    • サブネット: パブリック・サブネット-MySQLTest
    • ネットワーク・セキュリティ・グループを使用してトラフィックを制御: WP
    • パブリックIPv4アドレスの割当て: はい
  • SSHキーの追加:公開キー・ファイルの選択

  • ブート・ボリュームの構成 :デフォルト設定

Oracle MySQL Database Serviceインスタンスの構成

WordPress用のデータベース・スキーマの作成

BastionサーバにアクセスしMySQL Shellなどクライアント・ツールをMySQL Database Serviceインスタンス作成時に設定した管理者ユーザー・管理者パスワードでアクセスします。下記にはMySQL Shellを利用した例を記しますが、SQLモードに切り替え後、WordPressが利用するデータベース・スキーマwpdbを作成しています。

$ mysqlsh mdsadmin@10.0.31.11
MySQL Shell 8.0.22

Copyright (c) 2016, 2020, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its affiliates.
Other names may be trademarks of their respective owners.

Type '\help' or '\?' for help; '\quit' to exit.
Creating a session to 'mdsadmin@10.0.31.11'
Fetching schema names for autocompletion... Press ^C to stop.
Your MySQL connection id is 24 (X protocol)
Server version: 8.0.22-u2-cloud MySQL Enterprise - Cloud
No default schema selected; type \use <schema> to set one.

 MySQL  10.0.31.11:33060+ ssl  JS > \sql
Switching to SQL mode... Commands end with ;

 MySQL  10.0.31.11:33060+ ssl  SQL > CREATE DATABASE wpdb;
Query OK, 1 row affected (0.0042 sec)

WordPress用のデータベース・ユーザーの作成と権限の付与

WordPress用のデータベース・ユーザーwpuserの作成とwpdbスキーマに対する権限の付与を行います。ここでのポイントはWordPressが稼働するWPサーバが配置されるサブネット10.0.30.0/24からリモート・アクセスを許可するようにワイルドカードを利用してhost部分を'10.0.30.%'としているところです。

 MySQL  10.0.31.11:33060+ ssl  SQL > CREATE USER 'wpuser'@'10.0.30.%' IDENTIFIED BY 'PASSWORD';
Query OK, 0 rows affected (0.0068 sec)

 MySQL  10.0.31.11:33060+ ssl  SQL > GRANT ALL ON wpdb.* TO 'wpuser'@'10.0.30.%' WITH GRANT OPTION;
Query OK, 0 rows affected (0.0029 sec)

 MySQL  10.0.31.11:33060+ ssl  SQL > \q
Bye!

WordPressのインストールと構成

podmanのインストール

WPサーバにアクセス後、下記のコマンドを実行してpodmanと関連のcontainer-toolsをインストールします。

$ cat /etc/oracle-release 
  Oracle Linux Server release 8.2
$ sudo dnf install -y podman
$ sudo dnf module install -y container-tools:ol8

WordPressサーバのセキュリティ設定

Firewallの設定

はじめにfirewall-cmdを利用して、ブラウザアクセス検証用の8080ポートとMySQL Database Serviceへのアクセスに利用する3306ポートを経由した通信を許可するように設定します。3306ポートを経由した通信に関しては、リッチルールを利用して10.0.31.0/24サブネットからの通信に限定して許可するように設定しています。

$ sudo firewall-cmd --add-port=8080/tcp --zone=public --permanent
$ sudo firewall-cmd --permanent --add-rich-rule 'rule family="ipv4" source address="10.0.31.0/24" port protocol="tcp" port="3306" accept'
$ sudo firewall-cmd --reload

SELinuxの設定

今回はSELinuxはEnforcingのままで利用します。1つ目のhttpd_can_network_connectはhttpdがネットワークへの接続を許可する設定、2つ目のsetsebool -P httpd_can_network_connect_dbはhttpdがデータベースへの接続を許可する設定になります。

$ sudo setsebool -P httpd_can_network_connect=1
$ sudo setsebool -P httpd_can_network_connect_db=1

なお、コンテナ内のプロセスの権限についてはKubernetes YAML内のallowPrivilegeEscalation: trueseLinuxOptions: type: spc_tを記述して設定しています。

WordPressコンテナ用永続化ディレクトリの準備

WordPressコンテナが利用するディレクトリを永続化することで追加したテーマやPluginを永続化できます。作業ディレクトリ配下にそれぞれのディレクトリを作成し、適切なパーミッションを設定します。

$ mkdir -p wordpress
$ chmod 777 wordpress

Kubernetes YAMLの編集

事前に作成しておいたKubernetes YAMLをGithubリポジトリに配置してあるので、curlコマンドでダウンロードします。

$ curl -o podman_k8s_WPMDS.yml https://raw.githubusercontent.com/orakurara/WPonOCI/main/podman_k8s_WPMDS/podman_k8s_WPMDS.yml

ダウンロードされたYAMLファイルを編集し、MySQL Database Serviceへのアクセス情報を記述します。下記を参考にWORDPRESS_DB_HOSTにMySQL Database Serviceのプライベート・エンドポイントのIPアドレスとポート番号を10.0.31.11:3306の様に指定し、WORDPRESS_DB_NAMEにWordPress用のデータベース・スキーマ名wpdbを、WORDPRESS_DB_USERにWordPress用のデータベース・スキーマにアクセス可能なデータベース・ユーザー名wpuserを、WORDPRESS_DB_PASSWORDにデータベース・ユーザーのパスワードをそれぞれ記述してください。

podman_k8s_WPMySQL.yml
apiVersion: v1
kind: Pod
metadata:
  labels:
    app: opc_wp
  name: opc_wp
spec:
  containers:
  - name: wordpress
    env:
    - name: PATH
      value: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    - name: WORDPRESS_DB_PASSWORD
      value: PASSWORD
    - name: WORDPRESS_DB_USER
      value: wpuser
    - name: WORDPRESS_DB_NAME
      value: wpdb
    - name: WORDPRESS_DB_HOST
      value: 10.0.31.11:3306
    - name: APACHE_CONFDIR
      value: /etc/apache2
    - name: APACHE_ENVVARS
      value: /etc/apache2/envvars
    - name: PHP_INI_DIR
      value: /usr/local/etc/php
    - name: HOSTNAME
    image: docker.io/library/wordpress:latest
    name: opcwordpress1
    ports:
    - containerPort: 80
      hostPort: 8080
      protocol: TCP
    - containerPort: 3306
      hostPort: 3306
      protocol: TCP
    securityContext:
      allowPrivilegeEscalation: true
      readOnlyRootFilesystem: false
      seLinuxOptions: 
        type: spc_t
    volumeMounts:
    - mountPath: /var/www/html
      name: home-opc-wordpress
      workingDir: /var/www/html
  volumes:
  - name: home-opc-wordpress
    hostPath:
      path: /home/opc/wordpress
      type: Directory

それではいよいよpodman play kubeを実行してWordpressを構築します。

$ podman play kube podman_k8s_WPMySQL.yml
Trying to pull docker.io/library/wordpress:latest...
Getting image source signatures
Copying blob 345b578c1a78 skipped: already exists  
Copying blob 852e50cd189d skipped: already exists  
Copying blob 0266fc315b01 skipped: already exists  
Copying blob 4c8a5fa787a1 skipped: already exists  
Copying blob 46fc127c1884 skipped: already exists  
Copying blob f768b7fadf16 skipped: already exists  
Copying blob 90aafe41e78d skipped: already exists  
Copying blob af01fae4e5fc skipped: already exists  
Copying blob 9e463236c8bc skipped: already exists  
Copying blob cd12b0a220f2 skipped: already exists  
Copying blob d9f76220cef4 skipped: already exists  
Copying blob c09cf9a96ea9 skipped: already exists  
Copying blob 6dda8bec068c skipped: already exists  
Copying blob fd36a10c28fe skipped: already exists  
Copying blob e11e483ab28e skipped: already exists  
Copying blob ab40cb22800e skipped: already exists  
Copying blob b08636db59dd skipped: already exists  
Copying blob d2c7678bc02b skipped: already exists  
Copying blob f903e014412a skipped: already exists  
Copying blob 114ff1eb7cb0 [--------------------------------------] 0.0b / 0.0b
Copying config cfb931188d done  
Writing manifest to image destination
Storing signatures
Trying to pull docker.io/library/mysql:latest...
Getting image source signatures
Copying blob 938c64119969 skipped: already exists  
Copying blob 852e50cd189d skipped: already exists  
Copying blob a43f41a44c48 skipped: already exists  
Copying blob 29969ddb0ffb skipped: already exists  
Copying blob 5cdd802543a3 skipped: already exists  
Copying blob b79b040de953 skipped: already exists  
Copying blob 7689ec51a0d9 skipped: already exists  
Copying blob a880ba7c411f skipped: already exists  
Copying blob 984f656ec6ca skipped: already exists  
Copying blob 9f497bce458a skipped: already exists  
Copying blob b9940f97694b skipped: already exists  
Copying blob 2f069358dc96 [--------------------------------------] 0.0b / 0.0b
Copying config dd7265748b done  
Writing manifest to image destination
Storing signatures
Pod:
e872e98923c6135f83e685804d77bb239ed9ea5c23d87557afbe25e016f1a0f4
Containers:
f507c83777327644e8cd3f32aa0e595bb53986673e7dc90bb2ad5dcf78792938
557ee2109cee2c4dc51d4a1b44c217f512b46eff3074a2c311199dee9c1a179d

下記URLでアクセスすればWordpressの初期セットアップ画面にアクセスできます。

http://仮想マシンのパブリックIP:8080/wp-admin/

初期セットアップを完了し、ブログテーマの追加、ブログの投稿を行ってみました。

20-11-25-19-16-58.png

まとめ

Oracle MySQL Database Serviceを利用してWordPressを構築することができました。WordPressの標準機能しか試していませんが特に問題なく利用できています。Oracle MySQL Database Serviceはこれから新規でWordPressを立ち上げようとしている方だけでなく、パフォーマンスにお困りの方やセキュリティ運用にお困りの方に移行先として検討いただきたいサービスです。

関連情報

Oracle MySQL Database Serviceのインスタンスを作ってMySQL Workbenchから接続してみた

OCI上のOracle Linux 8 + podmanでWordPressを動かす

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

CentOS8.2にMySQL8.0をセットアップする手順

../

VPSサーバー(CentOS8.2)にMySQL 8.0をインストールした。MySQLは過去に何度もインストールしたことがあるが、毎回エンコーディングには悩まされてきた。今回は特に躓くこともなく、すんなりセットアップできた。手順をメモしておく。

事前にMariaDBを削除しておくこと、utf8mb4が追加になっていること、rootパスワードの暗号化方式(plugin)がデフォルトでcaching_sha2_passwordに変わったことは、経験的に知っていた。今回インストールしたものは、現時点の安定的なバージョン8.0.21である。新たに分かったこともいくつかある。

  • my.cnfが3つのファイルに分割されていた。
  • rootのpluginがmysql_native_passwordに戻されていた。
  • mysql_secure_installation が使えた。
  • userテーブルのスキーマが変わり、passwordのカラムがなくなっている。
  • [client]default-character-set=utf8を設定すると、コンソールから日本語が入力できなくなっている。(※CentOS8.2でMySQL8.0コンソールから日本語入力できない問題の回避策を参照)

MySQLのインストール

MySQL のサイトからyumリポジトリを取得し、それからyum install mysql-serverを実行する流れになる。

# MariaDBがインストールされていたら削除する
$ yum remove mysql

# MySQLサイトからyumのリポジトリを取得する
$ cd Downloads 
$ wget
https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql80-community-release-el8-1.noarch.rpm
$ ls
mysql80-community-release-el8-1.noarch.rpm

$ rpm -ivh mysql80-community-release-el8-1.noarch.rpm
$ ls /etc/yum.repo.d/mysql*         // リポジトリの追加を確認
mysql-community.repo
mysql-community-source.repo

# MySQLをインストールする
$ yum install mysql-server          // 15分くらいかかった
$ mysql --version
mysql  Ver 8.0.21 for Linux on x86_64 (Source distribution)

my.cnfの修正

Javaから利用したいので、エンコーディングはutf8(小文字のハイフンなし)にする。すべての文字を4 バイトで扱うutf8mb4もあるが、処理が重いと想像されるので利用しない。utf8は言語に応じていて、日本語は原則2バイトであり、JIS第4水準の一部がサロゲートペア文字(例えば、吉野家の正しい「?」や高橋さんの「髙」など)が4バイトになる。

以前のMySQLは、設定ファイルはmy.cnfの1つだけだったが、my.cnf.d/ をインクルードするように変更になっている。3つに分割されたことになる。特にmysql-default-authentication-plugin.cnf では、初期値でmysql_native_passwordが設定されている。これは最近の変更のようだ。初期のMySQL8.0では、rootのパスワード暗号化方式(plugin)がデフォルトでcaching_sha2_passwordになっていたが、非常に扱いにくく、多くの方が速攻でmysql_native_passwordに戻して利用していた。それを考慮してくれたのだろう。

$ ls /etc/my*
/etc/my.cnf
/etc/my.cnf.d:
client.cnf  mysql-default-authentication-plugin.cnf  mysql-server.cnf

$ vi /etc/my.cnf.d/client.cnf
[client]
default-character-set=utf8              // 追加する

$ vi /etc/my.cnf.d/mysql-server.cnf
[mysqld]
character-set-server=utf8               // 追加する

$ vi /etc/my.cnf.d/mysql-default-authentication-plugin.cnf
[mysqld]
default_authentication_plugin=mysql_native_password     // このままでよい

mysqldの起動とサービス登録

Firewallにmysqlサービスを追加しておく。3306/tcpポートを明示的に追加する必要はないようだ。そして、MySQLのサービス(mysqld)を起動する。またOSの起動時に自動でサービスを開始してくれるように設定しておく。

$ firewall-cmd --add-service=mysql --permanent
$ firewall-cmd --reload
$ firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources: 
  services: dhcpv6-client http mysql ssh vnc-server
  ports: 
  protocols: 

$ systemctl enable mysqld
$ systemctl start mysqld 
$ systemctl status mysqld
● mysqld.service - MySQL 8.0 database server
   Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
   Active: active (running) since Wed 2020-11-25 17:12:59 JST; 19s ago
  Process: 43395 ExecStartPost=/usr/libexec/mysql-check-upgrade (code=exited, status=0/SUCCESS)
  Process: 43265 ExecStartPre=/usr/libexec/mysql-prepare-db-dir mysqld.service (code=exited, status=0/SUCCESS)
  Process: 43239 ExecStartPre=/usr/libexec/mysql-check-socket (code=exited, status=0/SUCCESS)
 Main PID: 43350 (mysqld)
   Status: "Server is operational"
    Tasks: 39 (limit: 24989)
   Memory: 424.9M

rootのパスワード変更

MySQLの簡易なツールmysql_secure_installationが提供されているので使ってみる。rootのパスワード設定も含まれている。

# mysql_secure_installation
...
Please set the password for root here.
New password: ***
Re-enter new password: ***
(※以降、選択項目がいくつかあるが割愛)

MySQLコンソールからの確認

MySQLにコンソールから接続して、操作してみる。

# mysql -uroot -p
Enter password: ***
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 8.0.21 Source distribution
Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
mysql> connect mysql;
mysql> show tables;
mysql> select host,user,plugin from user;
+-----------+------------------+-----------------------+
| host      | user             | plugin                |
+-----------+------------------+-----------------------+
| localhost | mysql.infoschema | caching_sha2_password |
| localhost | mysql.session    | caching_sha2_password |
| localhost | mysql.sys        | caching_sha2_password |
| localhost | root             | mysql_native_password |
+-----------+------------------+-----------------------+
4 rows in set (0.00 sec)

rootのpluginが、mysql_native_passwordになっている。OKだ。userテーブルにpasswordのカラムがなくなっている。認証回りがかなりいじられた感じだ。

以下、エンコーディングの確認である。期待どおりにすべてutf8に変更できている。OKだ。ただし、character_set_clientがutf8だと、GNOMEのMySQLコンソールから日本語入力できない問題があるので、注意のこと。(※CentOS8.2でMySQL8.0コンソールから日本語入力できない問題の回避策を参照)

mysql> show variables like 'char%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

以上

../
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

GoToイート加盟店舗を地図上で選べるサービス作った

こんなもの

・「食べログ」「ぐるなび」「ホットペッパー」を統括してGoToイートの店舗を確認できるブラウザアプリ
・ 地図ベースで手軽と検索できる(個人店舗を応援するためのもので、有名チェーン店は除外)
・ 煩雑なインストールなし(PWAは対応)、ユーザ登録なし
幹事マップはこちら

コンテンツ

スマホでの表示画面
Image from iOS.png

マーカクリックで店舗情報が表示されます。
Image from iOS (3).png

ぐるなびで検索した場合で、検索に駅名を入力するとそこへ飛べます。
Image from iOS (2).png

ホットペッパーで検索した場合
Image from iOS (5).png

利用技術一覧

・javascript
・OpenStreetMap + Leaflet
・jquery
・MySQL
・PWA
・PHP(軽量化のためフルスクラッチ)
・GPS

特徴

・ズームレベルで周辺店舗を統括して見やすさ向上
・非同期通信によるUX向上
・逐次通信によるデータ転送量の削減
・タイルサーバは自前
・PWA化対応

気になること

・トラフィックが増えたときの挙動
・デザインが受け入れられるのかどうか
・GoToイート終わりそうw

最後に

もしよかったら触ってみてフィードバックを頂ければ大変嬉しく思います。どうぞよろしくお願いいたします。
https://kanjimap.jp

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Vagrant + VirtualBox で初めての開発環境こうちく|既存のRailsプロジェクト + Mysql + Apatch

はじめに

初めて Vagrant で開発環境を構築する方に向けて手順をまとめました。
初めて構築する方のために、専門用語の説明や、つまづきそうな箇所の説明も載せました。
それでは開発環境を構築していきましょう。

仮想マシンスペック

  • OS                            :  CentOS release 7.1

  • DB                            : mysql Ver 14.14 Distrib 5.5.41, for Linux (x86_64) using readline 5.1

  • Webサーバーソフト  : Apache/2.2.15 (Unix)

  • Ruby                         : ruby 2.1.5p273 [x86_64]

ローカルOSはWidnowsです。

■目次

■□■□■□■□■□■□■

… 1. 環境構築まえの準備

… 2. 仮想マシンの作成

… 3. 必要な関連ソフト及びRubyインストール | 開発環境の作成

… 4. Mysql, Apatchインストール | 開発環境の作成

… 5. Railsインストール | 開発環境の作成

… 6. Railsの起動

■□■□■□■□■□■□■

■ 1.環境構築まえの準備

Vagrant, Virtual boxとは ...

ソフト名 役割
Vagrant 仮想マシンの停止・起動などを簡単に管理できる 「コマンドラインツール」
Virtural box 仮想マシンを作る「仮想化ソフト」

つまり Vagrant を使えば、仮想マシンを 簡易にコマンド操作 できるようになります。

▼ Vagrant + Virtual box のインストール

まず次のサイトから、必要なソフトをダウンロードします。
・Vagtant     https://www.vagrantup.com/
・VirtualBox   https://www.virtualbox.org/

インストールはインストーラーに従うだけで完了します。

▼ インストールされたか確認

次のコマンドを入力してください。

$ vagrant -v
Vagrant 1.9.1

無事バージョンが返ってこればインストールは完了です。

▼ Vagrant 操作用のディレクトリを作成

次に CentOS インストール用ディレクトリを作成し、作成先のディレクトリへ移動しましょう。

$ mkdir workspace
$ cd workspace

■ 2.仮想マシンの作成

Virtual box を使用して、仮想マシンを起動するためには OS イメージファイル(※ boxファイル)が必要です。
※ 今回の OS イメージファイルは、Chef 社で用意されている「bento」を使用しました。

▼ OS インストール

仮想マシンへ CentOS 7.1 をインストールします。
初期設定を行うために、次のコマンドを実行します。

$ vagrant init bento/centos-7.1

実行すると「Vagrantfile」という初期設定ファイルが作成されます。

$ ls
Vagrantfile

▼ 初期設定ファイル(Vagrantfile)の書き換え

次の2箇所の設定を書き換えます。
1. ネットワーク
2. 共有フォルダ

▽ 1.ネットワーク

ローカルホスト(作業しているPC)から仮想マシン上の Rasil サーバーへ接続できるようにネットワーク設定を変更します。
Vagrantfile を好みのテキストエディタで開いてください。

▶︎ workspace / Vagrantfile

Vagrant.configure(2) do |config|
 # The most common configuration options are documented and commented below.
 # For a complete reference, please see the online documentation at
 # https://docs.vagrantup.com.
 # Every Vagrant development environment requires a box. You can search for
 # boxes at https://atlas.hashicorp.com/search.
 config.vm.box = "bento/centos-7.1"
 # Disable automatic box update checking. If you disable this, then
 # boxes will only be checked for updates when the user runs
 # `vagrant box outdated`. This is not recommended.
 # config.vm.box_check_update = false

 # Create a forwarded port mapping which allows access to a specific port
 # within the machine from a port on the host machine. In the example below,
 # accessing "localhost:8080" will access port 80 on the guest machine.



 # コメント(#)を外してポート番号を書き換える。
 config.vm.network "forwarded_port", guest: 3000, host: 3000 



 # Create a private network, which allows host-only access to the machine
 # using a specific IP.
 # config.vm.network "private_network", ip: "192.168.33.10"

 # Create a public network, which generally matched to bridged network.
 # Bridged networks make the machine appear as another physical device on
 # your network.
 # config.vm.network "public_network"

この設定でブラウザから仮想マシンに接続する接続先が http://localhost:3000 になります。

ここで一度 Vagrant を使って、仮想マシンを起動できるか確認してみましょう。

$ vagrant up

vagrantコマンド | 参考

コマンド 役割
vagrant up Vagrantfileに基づいて仮想サーバーを起動
vagrant ssh 仮想サーバーに接続され、コマンド操作できるようになる
vagrant halt 仮想サーバーを停止
vagrant reload Vagrantfileの設定を反映させる( vagrant halt + vagrant up )
vagrant destroy 仮想サーバーを消去

▽ 2.共有フォルダ

共有フォルダ機能とは ...

Vagrant には、ローカルと仮想マシン間のファイルを同期する機能があります。
この機能により、仮想マシン上にわざわざリモート接続(vagrant ssh)してファイルを編集する必要がなくなります。
つまり、ローカルファイルを編集するだけで、自動的に仮想マシン上のファイルに反映できます。

デフォルのフォルダ共有場所

場所 ディレクトリ
ローカル側 ./workspace
仮想マシン側                          /home/vagrant

別のフォルダ場所を共有したい場合は、Vagrantfile の次の箇所を変更します。

config.vm.synced\_folder “ローカルのフォルダ場所”, “仮想マシン上のフォルダ場所”

今回は以下の場所を共有しました。

▶︎ workspace / Vagrantfile

Vagrant.configure(2) do |config|
 # other config here

 config.vm.synced_folder "./workspace", "/home/vagrant/rials_projects"
end

この設定を反映させるために仮想マシン側で不足しているものがあるので、次の作業(■ 3.Ruby及び...)に行く前にインストールします。

右のエラーが出るため。「yum update→カーネルアップデート→ VitualBox GuestAddition 破損」

# ローカル
$ vagrant ssh

# 仮想マシン
$ sudo yum install kernel-devel
$ sudo yum install gcc make
$ exit

# ローカル
$ vagrant plugin install vagrant-vbguest
$ vagrant vbguest

ファイル共有できているか確認。

$ vgrant ssh
$ cd /rails_projects/
$ ls
Vagrantfile

ここまでで仮想マシンの基本的な設定は完了です !

以降は、必要なソフトウェア類をインストールしていきます。

■ 3.必要な関連ソフト及びRuby インストール | 開発環境の作成

▼ 必要な関連ソフトのインストール

yumを最新化して諸々のパッケージをまとめてインストール。

$ vagrant ssh
$ sudo yum update
$ sudo yum install -y gcc-c++ patch readline readline-devel zlib zlib-devel libyaml-devel libffi-devel openssl-devel make bzip2 autoconf automake libtool bison nodejs git vi

▼ Git インストールされたか確認

$ git --version
ruby  git version 2.2.2

▼ rbenv のインストールと初期化

rbenv をインストールし、初期化を行います。

$ git clone git://github.com/sstephenson/rbenv.git ~/.rbenv
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
$ . ~/.bashrc

▼ ruby-build のインストール

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

インストールされると、次のコマンドでインストール可能な ruby のバージョンを表示できます。

$ rbenv install -l

▼ Rubyのインストール

$ rbenv install 2.1.5
$ rbenv global 2.1.5
$ rbenv rehash

インストールされたか確認。

$ ruby -v
ruby 2.1.5

■ 4.Mysql, Apache インストール | 開発環境の作成

▼ Mysqlのインストールと初期設定

次のコマンドで Mysql の Yum レポジトリを追加。

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

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

$ 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 無効

上記の例では、5.7が有効、5.5が無効になっています。

バージョンの切り替えには Yum の設定変更用の yum-utils パッケージが必要なので、インストールします。

# yum-utilsがインストールされているか確認
$ yum list installed | grep yum-utils            

# 入ってなければyum-utilsをインストールする
$ yum -y install yum-utils                       

# 5.7を無効に設定
$ yum-config-manager --disable mysql57-community 

# 5.5を有効に設定
$ yum-config-manager --enable mysql55-community  

設定できているか再確認します。
5.5が有効になっていれば大丈夫です。

公式リポジトリにある、mysql-community-server パッケージをインストールします。
Mysql のバージョンが5.5になっているのを確認。

$ yum info mysql-community-server

...(略)...

Name : mysql-community-server

Arch : x86\_64

Version : 5.5.62

Release : 2.el6

Size : 38 M

Repo : mysql55-community

Summary : A very fast and reliable SQL database server

URL : http://www.mysql.com/

License : Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. Under GPLv2 license as

: shown in the Description field.

Description : The MySQL(TM) software delivers a very fast, multi-threaded, multi-user,

...(略)...

インストールします。

$ yum -y install mysql-community-server

インストールしたらバージョンを確認。

$ mysql --version
mysql Ver 14.14 Distrib 5.5.62, for Linux (x86\_64) using readline 5.1

root やセキュリティの設定を一括で行います。

$ sudo mysql_secure_installation

root で入れるか試します。

$ mysql -u root -p

▼ Apache のインストール

yum でインストールできる Apache のバージョンを確認。

$ yum list | grep httpd

Apache のインストール。

$ sudo yum install -y httpd

インストールされたバージョンを確認。

$ httpd -v
Server version: Apache/2.2.15 (Unix)
Server built:   Jun 19 2018 15:45:13

起動と自動起動設定。

$ sudo /etc/init.d/httpd start
$ sudo chkconfig httpd on

■ 5.Rails インストール | 開発環境の作成

▼ bundlerのインストール

$ gem install bundler 
# バージョンを指定する場合は 「gem install bundler -v '~\>1'」のようにオプションを指定。

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

$ bundler -v
Bundler version 1.17.3

▼ Rails + その他のライブラリをインストール

bundler を使って、gemfile に記載された諸々のライブラリ(指定バージョンの Rails を含む)をインストール。

$ bundle install --path=~/vendor/bundle 

「--path=vendor/bundle」ではないことに注意。
フォルダ共有機能で設定しているディレクトリ(--vendor/bundle)にbundle installしようとするとエラーが出る。
参考記事

「rails コマンド」をつかえるように、グローバルに rails をインストール。

$ gem install rails 
# バージョンを指定する場合は 「gem install rails -v '5.2.4'」のようにオプションを指定。

■ 6. Rails の起動

▼ vagrant に設定を反映

vagrant に設定を反映するために、以下を実行します。

# 停止
$ vagrant halt

# 立ち上げ
$ vagrant up

# 仮想マシンへ入る
$ vagrant ssh

仮想マシン上のデータベースに migration ファイルの設定を反映させます。

$ rails db:migrate

rails server の起動。

$ rails server -b 0.0.0.0 

「-b 0.0.0.0」オプション(全てのIPアドレスからアクセス可)は、ブラウザからアクセスできるように指定。
rails server のみだとIPアドレスが 127.0.0.1 に指定され、localhost なので 外部から(仮想環境の外から)はアクセスできません。
参考記事

ブラウザで http://localhost:3000/ にアクセス。

まとめ

というわけで、初めてVagrantを使う方に向けて開発環境を構築する手順を紹介しました。

基本的には一つ一つ調べながら手順をまとめましたが、まだ自身も十分に理解できていない部分もあるかと思います。

ミスがあった場合は忌避なく指摘をいただけると幸いです !

参考書籍

独習Ruby on Rails

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Rails】Mysql2::Error::ConnectionErrorの解消

Railsアプリにバリデーションを定義した後の、テストデータ登録の成功が目的の備忘録です。その為、バリデーションの定義、記述は終わっている状態です。

データ保存したいのに、Mysql2に接続できない

Docker環境下のRailsアプリで、app/modelsにバリデーションを定義し、動作チェックの為にMySQLにデータ登録を試みました。そうしたら.....

Mysql2::Error::ConnectionError at /Unknown MySQL server host 'db' (0)

MySQLに繋がってないよと怒られました。

全く同じエラーにハマっている方も居ましたが、解決策は載っていません。
記事に載っていたdocker-compose upを実践するも、dockerは正常に起動していました。

いずれにせよ、データが登録できていないので、次はデータベースのチェックを行いました。

①rails db:create
②rails db:migrate

しかし、ダメでした。
下記はrails db:create実行後にターミナルに出力されたエラー

Unknown MySQL server host 'db' (0)
Couldn't create 'myapp_development' database. Please check your configuration.
rails aborted!
Mysql2::Error::ConnectionError: Unknown MySQL server host 'db' (0)
/Users/athlaliel/test/qa-coin/bin/rails:9:in `<top (required)>'
/Users/athlaliel/test/qa-coin/bin/spring:15:in `<top (required)>'
bin/rails:3:in `load'
bin/rails:3:in `<main>'
Tasks: TOP => db:create
(See full trace by running task with --trace)

この後も、色々試した結果、原因が分かりました。

Docker環境でアプリを作成しているのに、実際はローカル環境でひたすらコマンドを叩いていました。Docker上のコンテナでMySQLも管理されてる以上、見つかるわけがなかったです。

下記のコマンドを順に実行する事で無事にデータベースは作成され、更新も可能となりました。

①docker-compose exec web rails db:create 

②docker-compose exec web rails db:migrate

バリデーションのデータ登録

データベースがDocker上に出来たので、テストデータを登録しバリデーションが機能しているか試します。rails consoleを起動し、テストデータを登録していきます。

バリデーションに記述する文言はここでは書きませんが、変数を定義して<モデル名.create>と入力します。
このコマンドでデータ登録が成功すれば、SQLと同じ文言が表示され、データの保存まで行います。その為、別途<モデル名>.saveコマンドを入力する必要はありません。
validate.png

validate2.png
もしエラーが起きたら、下記コマンドでチェックして原因の追求を行います。

pry(main)> <モデル名>.errors

※user.rbというmodelsファイルがあれば、user.errorsとターミナルに入力します。

validate3.png

Mysql2::Error::ConnectionErrorのようなエラーに遭遇したら、自分が今どの環境で作業しているかのチェックを行ってみると良いでしょう。

参考記事
Unknown MySQL server host 'db' (0)エラーが消えない
Active Record バリデーション

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む