データ分析基盤 

連載:Azure で学ぶインフラ入門3(DBサーバー構築編)

こんにちは、第3回まで引っ張った続いた本連載もこれで最後です。

本記事では、DBサーバーを構築し、いよいよブログシステムを完成させます。

1. DBサーバの構築

これまでの振り返りも含め、以下の構成図にてこれから作るものを確認しましょう。

DBサーバを構築したのち、Webサーバの方に WordPressをインストールして、ブログシステムを完成させます。

1.1 インターネットから隔離したDBサーバを立てる

DBサーバ用の VM を作成していきます、というと Azure などのクラウドサービスの利用経験がある方は疑問に思うかもしれません。

DB を立てるなら本来は、「Azure SQL データベース」や ほかの DBMS を使いたい場合は専用の Azure サービスがありますので、そちらを利用するのが正しいからです。Azure のDBサービスであれば、これから設定していく DB の初期設定など導入の手間が省ける上、フェイルオーバーなどの設定もコンソール上から簡単に設定できます。

しかし今回は、ネットワークやサーバの気持ちを理解するために、あえて1から作成します。VM の構築方法の詳細は、前回の記事を参考にして下さい。ここでは、前回の基本設定と異なる点に注力して解説します。

まずは基本設定をしていきます。

名前は「DB-Server」、ディスクは「HDD」、ユーザ名は「centos」、SSH公開鍵の登録ですが、練習なので Webサーバーに登録した鍵と同じもの良いでしょう。それ以外の設定は Webサーバと一緒です。

続いてサイズ設定です。

ここも Webサーバと同じ、練習なので「A1 Basic」で良いでしょう。

最後にその他オプション設定です。

サブネットには、DBサーバですので「private-subnet」を選びましょう。

このサーバはインターネットからアクセスできないようにしたいので、パブリックIPアドレスは「無し」を選択して下さい。ネットワークセキュリティグループは、デフォルトで新規作成されるものをそのまま選択してください。

次のページで各種設定を確認したら VMを作成して下さい。

1-2. 踏み台サーバを経由してSSHでDBサーバへ接続する

前節で作成した VMは「DB-Server」という名前になっているものの、まだ DBサーバソフトをインストールしていません。ここから SSHでログインして MySQLという DBサーバソフトをインストールしてきます。

ここで一つ疑問があります。DBサーバはパブリックIPアドレスを持たず、インターネットから SSHで接続することができないのに、どうやってこの VMにアクセスすれば良いのでしょうか。

その解決方法の一つが「踏み台サーバ」です。

ここまでの操作で、Webサーバにはインターネットから SSHでアクセス可能になりました。Webサーバは DBサーバと同じネットワーク内部のVMです。そこで、① Webサーバに SSHでアクセス、②  Webサーバから DBサーバに SSHでアクセス、というように Webサーバを踏み台とすれば、ローカル環境から DBサーバへとアクセスできます。

以下のネットワーク構成図で上記の話をまとめます。

 

秘密鍵のアップロード

踏み台サーバを介してSSH接続をする場合、踏み台からDBサーバからSSH接続する際にも秘密鍵の情報が必要です。しかし、秘密鍵は手元のローカルPCにだけある状態です。

このような場合、単純にローカルPCにある秘密鍵ファイルをWebサーバに転送できれば、同じように SSHコマンドで鍵ファイルを指定することで同じように接続できます。このようなサーバ間でのファイルの受け渡しは、「SCP(Secure Copy)」プロトコルで実現できます。

・Windows の Tera Termの場合

Tera Term では「ファイル」メニューから「SSH SCP」をクリックすると 、ファイルを転送できます。

・Mac の場合

Macの場合は、ターミナルから scp コマンドを用いてファイルの転送が可能です。

コマンド例は以下となります。

$ scp -i ~/.ssh/my-key ~/.ssh/my-key centos@xxx.xxx.xxx.xxx:~/.ssh/

「-i 」の後には、転送先へのSSH接続で使う秘密鍵ファイルのパスを指定します。

scp  -i ” 接続のための秘密鍵のパス”  “転送したいファイルのパス”  “リモートホストのユーザ名”@”リモートホストのIPアドレス”:”転送するファイルを置くリモートホスト上のパス”

という書式で記述します。

 

秘密鍵のパーミッション変更

Webサーバへ転送ができたら、そのファイルの権限や所有ユーザを変更します。Webサーバへログインして以下のコマンドを実行してください。

[centos@web-server ~]$ sudo chown ~/.ssh/my-key centos:centos
[centos@web-server ~]$ sudo chmod 400 ~/.ssh/my-key

 

Webサーバから DBサーバへSSHで接続する

これまで SSHで接続するときは リモートサーバのパブリックIPアドレスを指定していましたが、DBサーバはパブリックIPアドレスを持ちません。ただし、同じネットワーク内部からアクセスするのであれば「プライベートIPアドレス」を指定することでSSHでの接続が可能です。

プライベートIPアドレスは、前節で作成した「DB-Server」の「ネットワーク」の項目から確認できます。

プライベートIPアドレスが確認できたら、以下のコマンド例でDBサーバへ接続します。

[centos@web-server ~]$ ssh -i ~/.ssh/my-key centos@'Db-ServerのプライベートIPアドレス'

ターミナルの入力待ちのラインが  [centos@db-server ~]$ となれば、接続成功です。接続先のサーバから接続もとのサーバに戻りたいときは exit と打つことで戻ることができます。

2.  DBサーバへ MySQL をインストールする

前章までで、DBサーバに踏み台サーバを介してアクセスすることができるようになりました。この章では DBサーバに MySQL をインストールし、ブログ記事を格納する DB を作成していきます。

2-1. MySQLのインストール

MySQL は yum コマンドでインストールしていきます。インストール方法は下記の記事を参考にしています。

DBサーバにログインした状態で以下のコマンドを実行してください。

[centos@db-server ~]$ # mariadb が入ってるか確認
[centos@db-server ~]$ rpm -qa | grep maria
[centos@db-server ~]$ 
[centos@db-server ~]$ # 入ってたら下記のコマンドで削除
[centos@db-server ~]$ sudo yum remove mariadb-libs
[centos@db-server ~]$ rm -rf /var/lib/mysql/
[centos@db-server ~]$ 
[centos@db-server ~]$ # MySQLのインストール
[centos@db-server ~]$ sudo yum localinstall http://dev.mysql.com/get/mysql57-community-release-el7-7.noarch.rpm
[centos@db-server ~]$ sudo yum install mysql mysql-devel mysql-server mysql-utilities
[centos@db-server ~]$
[centos@db-server ~]$ # インストールされたか確認する 
[centos@db-server ~]$ mysqld --version

2-2. MySQL の起動と初期設定

インストール以降の初期設定については以下を参考にしております。

次に、 MySQL を起動しましょう。次のコマンドを実行してください。

[centos@db-server ~]$ # データベース初期化
[centos@db-server ~]$ mysqld --user=mysql --initialize
[centos@db-server ~]$
[centos@db-server ~]$ # 自動起動をオンにする
[centos@db-server ~]$ sudo systemctl enable mysqld.service
[centos@db-server ~]$
[centos@db-server ~]$ # 状態を確認
[centos@db-server ~]$ systemctl status mysqld.service
[centos@db-server ~]$ 
[centos@db-server ~]$ # inactivateだったら起動させる
[centos@db-server ~]$ sudo systemctl start mysqld.service

続いて、MySQLの管理者パスワードを設定しましょう。

[centos@db-server ~]$ # 初期設定のパスワードを確認
[centos@db-server ~]$ grep password /var/log/mysqld.log
[centos@db-server ~]$
[centos@db-server ~]$ # パスワード確認したら、初期設定をしていく
[centos@db-server ~]$ # 順番に沿って、新しいパスワードを入力していく
[centos@db-server ~]$ # 8文字以上かつ英大文字・小文字・数字・記号を含むパスワードでないと許可されないので、注意
[centos@db-server ~]$ # パスワード関連以外の質問にはすべて、Yes(Y)でOK
[centos@db-server ~]$ 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.

Re-enter new password:

Estimated strength of the password: 100
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!
[centos@db-server ~]$

2-3. WordPress 用のデータベースを作成する

WordPressで使用するデータベースを作成していきます。まずは先ほど設定したパスワードでmysqlに接続します。

[centos@db-server ~]$ mysql -u root -p
Enter password: "新しいパスワードを入力し、mysqlに入る"
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 14
Server version: 5.7.20 MySQL Community Server (GPL)

Copyright (c) 2000, 2017, 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>

接続に成功したら、mysql> のプロンプトが現れます。ここでSQLを実行することで、データベースの各種操作ができます。

まずはデータベースを作成するために、次のように入力します。ここではデータベース名を「wordpress」としました。

mysql> CREATE DATABASE wordpress DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
Query OK, 1 row affected (0.00 sec)

上のような Query OK が出たら実行に成功です。

続いてユーザを作成します。ここではユーザ名を「wordpress」、パスワードは「WordPressPasswd0:」で設定します。

wordpress ユーザには、先ほど作成した wordpress データベースに対して、全ての権限を与えます。

mysql> grant all on wordpress.* to wordpress@"%" identified by 'WordpressPasswd0:' ;
mysql> flush privileges; --権限を反映させる
mysql> select user, host from mysql.user; --ユーザが作成されたか確認する

最後のSELECT 文で wordpress ユーザが出力されたら、データベースの作成は完了です。

DBサーバのMySQLの設定は以上ですので、exit と入力して mysql コマンドを終了させてください。

3. WordPressの導入〜ブログシステムの仕上げ〜

以上でDBサーバの設定が完了したので、続いてWebサーバに WordPressをインストールしていきます。

3-1. PHP や 関連ライブラリのインストール

WordPressを使うには、PHPやその他ライブラリが必要です。以下のコマンドでインストールしていきます。

[centos@web-server ~]$ sudo yum -y install php php-mysql php-mbstring

3-2. Webサーバから MySQLにアクセス

次に、Webサーバ上からDBサーバの MySQL にアクセスへの疎通確認をするため、mysqlコマンドもインストールします。

[centos@web-server ~]$ sudo yum -y install mysql

 ただし、DBサーバのポートは22ポート以外閉じたままのデフォルト設定のままです。MySQLのポート番号は3306なので、このままではアクセスできません。DBサーバ の セキュリティグループから 3306ポートを開けましょう。

リソースグループから、「blog-system」を選択し、グループ内リソースの「DB-Server-nsg」をクリックします。

「DB-Server-nsg」のパネルが開いたら、左端の「受信セキュリティ設定」を開きます。

受信セキュリティルールの一覧が表示されたら、画面上部の「追加」をクリックします。

DBサーバの MySQL には パブリックサブネットのみからのアクセスに制限したいので、ソースの設定はこれまでと異なります。

ソースは、「IP Address」を選択、ソース IP アドレス範囲/ CIDR範囲には、パブリックサブネットの「10.0.0.0/24」を指定します。ここにWebサーバのIPアドレスを指定すれば、Webサーバのみからアクセスできるようになります。宛先ポート番号には「3306」で、プロトコルは「TCP」、名前は「MySQL-default」としました。

ポートが開けたので、Webサーバ上から DBサーバの MySQL に接続してみましょう。Webサーバにログインし、以下のmysqlコマンドを実行してください。

mysql -h <DBサーバのプライベートIP> -u wordpress -p
Enter password:"wordpressユーザのパスワードを入力"

「-h」の後には、DBサーバのプライベートIPアドレスを入力してください。「wordpress」ユーザのパスワードは先ほど「WordpressPasswd0:」と設定したので、これを入力してください。接続に成功したら、疎通確認は終了です。exit コマンドでmysqlを終了してください。

3-4. WordPressのインストール

PHPやMySQLの準備ができたので、WebサーバにWordPressをインストールしていきます。

[centos@web-server ~]$ cd ~
[centos@web-server ~]$ # ソースファイルのダウンロード
[centos@web-server ~]$ wget http://ja.wordpress.org/latest-ja.tar.gz
[centos@web-server ~]$
[centos@web-server ~]$ # 展開とインストール
[centos@web-server ~]$ tar xzvf latest-ja.tar.gz
[centos@web-server ~]$ 
[centos@web-server ~]$ # ディレクトリ移動
[centos@web-server ~]$ cd wordpress/ # このディレクトリ以下が WordPress のプログラム一式
[centos@web-server wordpress]$
[centos@web-server wordpress]$ # WordPress のプログラム一式を Apache から見えるディレクトリに配置する
[centos@web-server wordpress]$ sudo cp -r * /var/www/html/
[centos@web-server wordpress]$ 
[centos@web-server wordpress]$ # コピーしたファイルの所有者/グループをそれぞれ、apache / apache に変更
[centos@web-server wordpress]$ sudo chown apache:apache /var/www/html/ -R

以上でWordPressのインストールは完了です。

3-5. WordPressの設定

WordPressの各種設定をしていきます。

Apache  の起動

まずは Webサーバ上の Apacheを再起動させます。再起動しないとインストールしたPHPが有効になりません。

[centos@web-server ~]$ sudo service httpd restart

これでWebブラウザから Webサーバにアクセスすれば、WordPressの画面が表示されるようになります。

WordPress を初期設定する

Web サーバのパブリックIPアドレス or DNS 名を Web ブラウザに入力しましょう。以下の画面が表示されるはずです。

 「さあ、始めましょう!」とクリックして設定をすすめてください。

先ほどMySQLで設定した情報を入力していきます。

データベース名は「wordpress」、ユーザ名は「wordpress」、パスワードは「WordpressPasswd0:」、データベースのホスト名には、DBサーバのプライベートIPアドレスを入力してください。テーブル接頭辞はデフォルトのままで大丈夫です。

「送信」ボタンをクリックしたら、データベースとの接続確認を行います。

インストールを実行する

データベースとの接続に成功したら、「インストールを実行する」をクリックします。

サイトのタイトルや管理者情報を入力する

最後に、サイトのタイトルや管理者のユーザ名、パスワードなどを入力します。初期設定が完了し、WordPressの管理ページが表示されれば成功です。

まとめ

以上で、WordPress を用いたブログシステムの構築は完了です。本連載で構成したシステムをまとめると以下の図のようになります。

 

ここまでのシステム構築を通じて、ネットワークの構成の仕方、基本的なコンセプト、Azureの利用方法など一通り学んで頂けましたら幸いです。

弊社では Azureを利用した分析基盤構築サービスも提供しております。分析環境の整備でお困りの場合は、ぜひ DATUM STUDIO にお声がけください。

最後までお読み頂きありがとうございました。



DATUM STUDIOは、クライアントの事業成長と経営課題解決を最適な形でサポートする、データ・ビジネスパートナーです。
データ分析の分野でお客様に最適なソリューションをご提供します。まずはご相談ください。

このページをシェアする: