TECH
[CloudGarage]

CloudGarageでサーバセットアップ【その4:アプリケーションサーバとデータベースサーバを連携する】

TECH
中津川 篤司

インスタンスを簡単に立ち上げられるCloudGarageですが、立ち上げただけでは意味がありません。このインスタンスを使って開発を行っていかなければなりません。とは言え、自分の作りたいものはあるのに、セットアップで色々と時間が取られるのは面倒なはずです。

慣れてきたらKUSANAGI/CentOS-7.3-64bitなどのイメージから選択しても良いですが、まずは自分でイチから作業してみると何かトラブルがあってもリカバリーできるようになります。サーバの動きを掴んでおくと、後々役立つことも多いでしょう。

前回はnginxとPHP-FPMをインストールするところまでいきました。今回はより本格的に開発できるようにデータベースサーバを立てて、連携できるようにします。

アプリケーションサーバとデータベースサーバ

ごくごく小さなWebアプリケーションの場合、一台のサーバ内にすべての機能を追加します。サーバの役割は様々にありますが、ちょっとしたものであれば「HTTP」「アプリケーション」「データベース」という三層に分かれると思います。さらに大きくなると「キャッシュ」や「API」などの役割も出てくるでしょう。

今回の構成では nginx をHTTPサーバとして、PHP-FPMをアプリケーション、MySQLをデータベースとして構築します。前回、nginxとPHP-FPMを一つのインスタンスにインストールしましたので、「HTTP」「アプリケーション」の役割は一つのインスタンスが担っています。データベースは負荷が高くてボトルネックになりやすいので別なインスタンスとしても分離させます。

データベースインスタンスのセットアップ

まずデータベースサーバになるインスタンスを立てます。CloudGarageではあらかじめリソースを確保して利用します。例えばCPUを2コアで購入していれば、「HTTP」と「アプリケーション」サーバを1コア、データベースを1コアと割り当てられます。

今回はデータベースインスタンスをUbuntu 16.04 LTSで立てています。ポートは全開放しています。

セキュリティ上の設定

ライブラリの更新、ユーザの作成、sudo設定はHTTPサーバで行った時と変わりません。ポートは22022でSSHを利用できるだけとして、他はすべて無効としています。

MySQLサーバのセットアップ

MySQLのインストール

aptを使ってMySQLをインストールします。

sudo apt-get install mysql-server

MySQLの設定を変更

デフォルトのポートは 3306 で、ローカルからしか接続を許可しないようになっています。この設定を変更します。ファイルは /etc/mysql/mysql.conf.d/mysqld.cnf になります。変更点は以下の2行です。

[mysqld]
port=33060 # 元は3306
# bind-address = 127.0.0.1 # コメントアウトする

これでMySQLを再起動します。

service mysql restart

データベース接続用ポートを公開する

次にHTTPサーバからデータベースに接続できるようにポートを公開するのですが、単純にufwを使うとインターネット全体に渡って公開されてしまいます。それはセキュリティ上好ましくないので、ローカルネットワークからしか接続できないようにします。

CloudGarageでは自分の契約したインスタンス同士がローカルネットワークで接続されており、 192.168.0.* (*は任意の数字)でアクセスできます。そこで、このアドレス範囲においてデータベースに接続できるようにします。

sudo ufw allow from 192.168.0.1/24 to any port 33060

これで完了です。設定が終わると次のようになっているはずです。

sudo ufw status numbered

Status: active

     To                         Action      From
     --                         ------      ----
[ 1] 22022/tcp                  ALLOW IN    Anywhere                  
[ 3] 33060                      ALLOW IN    192.168.0.0/24            

データベースのユーザを作成する

MySQLをインストールする際に root のパスワードを設定しているはずです。それを使ってMySQLに接続します。ポート番号が変わっているので注意してください。

mysql -uroot -p -P 33060

接続したらデータベースを作成します。今回は mydb として作成します。

CREATE DATABASE mydb DEFAULT CHARACTER SET utf8;

そして作成したDBに対して操作権限を持つユーザを作成します。

GRANT ALL PRIVILEGES ON mydb.* TO app@'(HTTPサーバのIPアドレス)' IDENTIFIED BY '(パスワード)';

これでHTTPサーバからアクセスできるユーザが作成できました。

PHPから接続する

ではHTTPサーバからPHPで接続してみましょう。まず必要なライブラリをインストールします。

sudo apt-get install php7.0-mysql -y

これでMySQLiがインストールされます。最後にPHP-FPMを再起動します。

sudo service php7.0-fpm restart

コードを書く

例えば以下のようなコードを書きます( /usr/share/nginx/html/mysql.php などとします)。接続先情報はそれぞれ書き換えてください。

<?php
$mysqli = new mysqli('(DBのIPアドレス):(DBのポート番号)', '(ユーザ名)', '(パスワード)', '(データベース名)');
if ($mysqli->connect_error) {
  echo $mysqli->connect_error;
  exit();
} else {
  echo "MySQL接続成功";
  $mysqli->set_charset("utf8");
}
?>

もしファイルが書き込めない場合には /usr/share/nginx/html/ のアクセス権限を変えてください。

chmod -R 777 /usr/share/nginx/html/

そしてWebブラウザからアクセスします。MySQL接続成功、と出れば接続が無事行われています。


Linux + Apache + PHP + MySQLはLAMP環境と呼ばれて人気の技術スタックでしたが、今はApacheに変わってnginxを使うことが増えています。とは言えPHPとMySQLの組み合わせは今なおWeb開発のデファクトとも言えるくらい有名な組み合わせです。皆さんもぜひPHPとMySQLを組み合わせてWeb開発をはじめてみてください!

この記事を書いた人

中津川 篤司

株式会社MOONGIFT 代表取締役。CloudGarage、ニフクラ mobile backend、hifive エバンジェリスト。プログラマ、エンジニアとしていくつかの企業で働き、28歳のときに独立。2004年、まだ情報が少なかったオープンソースソフトの技術ブログ『MOONGIFT』を開設し、毎日情報を発信している。2013年に法人化、ビジネスとエンジニアを結ぶエバンジェリスト業「DevRel」活動をスタートした。 Twitter:@goofmint | GitHub:@goofmint | Facebook: goofmint

連載『CloudGarageでサーバセットアップ』の記事

この記事のタグ

オススメの記事

ページトップへ