皆様こんにちは。
前回はCloudSQLやCloud Storageを用いてWordpressを動かしてみました。
しかし、Cloud SQLやCloud Storage は有料なので WordPressサイトを1つ立ち上げるのに、比較的安いD1階層のインスタンスを使ってさえも毎月$43.8(約4,300円)のコストがかかってしまいます。
3つのサイトを公開しようものなら、毎月12,900円かかってしまい割高です。。。
そこで、たった1つのCloud SQL インスタンスを使って、複数の WordPress を動かしてみたら…ということを考えて、今回は複数のWordpressを動かし、たった1つのCloud SQL インスタンスで運用できるか実験してみることにします。
図1.1つのCloud SQL インスタンスを3つの WordPress プロジェクトで共有する
図1の様に、プロジェクトを3つ作成し project[0] の方には、Billingを有効にし、Cloud SQL instance[0] のみ立ち上げて、そこにDatabase[0]、Database[1]、Database[2]を作成します。
project[0]、project[1]、project[2] には、Wordpress を3つデプロイします。
project[0] には Database[0] を、project[1] には Database[1] を、project[1] には Database[1] を、割り当てます。
※WordpressのGAEへのデプロイ方法は、GAEでWordpressを動かすを参考にしてください。
project[0]、project[1]、project[2]のプロジェクトIDは、mywordpressongae000、mywordpressongae001、mywordpressongae002、にしました。
1.Cloud SQL インスタンスとデータベースの作成
Google APIs Console から、mywordpressongae000 を選択して、Google Cloud SQL メニューを開きます。
右上の New instance ボタンをクリックし、Name (インスタンス名)を instance、Authorized applications に3つのプロジェクトIDを入力します。
こちら、Authorized applications に入力したプロジェクトIDのプロジェクトは、mywordpressongae000 プロジェクト内の Cloud SQL インスタンスにアクセスできるようになります。(ここが重要)
作成したインスタンス上で以下のSQLを実行します。(Cloud StorageにSQLファイルをアップしてimportすると早い)
1:データベースにアクセスするユーザを作成します
ユーザ名: wp_user
パスワード: wp_password
※各データベース毎のユーザを作成するのを推奨しますが、今回は話を単純にするために1ユーザ作成してすべてのデータベースアクセス権限を与えています
2:データベースを作成します
database[0] のデータベース名: wpdatabase000
database[1] のデータベース名: wpdatabase001
database[2] のデータベース名: wpdatabase002
(1)ユーザの作成
CREATE USER 'wp_user' IDENTIFIED BY 'wp_password';
(2)3つのデータベースの作成とユーザに権限割り当て
CREATE DATABASE IF NOT EXISTS wpdatabase000;
CREATE DATABASE IF NOT EXISTS wpdatabase001;
CREATE DATABASE IF NOT EXISTS wpdatabase002;
GRANT ALL PRIVILEGES ON wpdatabase000.* TO 'wp_user';
GRANT ALL PRIVILEGES ON wpdatabase001.* TO 'wp_user';
GRANT ALL PRIVILEGES ON wpdatabase002.* TO 'wp_user';
2.Wordpressの設定ファイルを編集する
各々のデータベースにアクセスできるように wordpress の wp-config.php を編集します。
DBのユーザ設定で決定した任意のデータベース名とユーザ名とパスワード、Cloud SQL インスタンス名を書きます。
mywordpressongae000 の wp-config.php
/** The name of the database for WordPress */
define('DB_NAME', 'wpdatabase000');
/** MySQL database username */
define('DB_USER', 'wp_user');
/** MySQL database password */
define('DB_PASSWORD', 'wp_password')
if(isset($_SERVER['SERVER_SOFTWARE']) && strpos($_SERVER['SERVER_SOFTWARE'],'Google App Engine') !== false) {
define('DB_HOST', ':/cloudsql/mywordpressgae000:instance');//←mywordpressongae000のインスタンス
}else{
define('DB_HOST', 'localhost');
}
mywordpressongae001 の wp-config.php
/** The name of the database for WordPress */
define('DB_NAME', 'wpdatabase001');
/** MySQL database username */
define('DB_USER', 'wp_user');
/** MySQL database password */
define('DB_PASSWORD', 'wp_password')
if(isset($_SERVER['SERVER_SOFTWARE']) && strpos($_SERVER['SERVER_SOFTWARE'],'Google App Engine') !== false) {
define('DB_HOST', ':/cloudsql/mywordpressgae000:instance');//←mywordpressongae000のインスタンス
}else{
define('DB_HOST', 'localhost');
}
mywordpressongae002 の wp-config.php
/** The name of the database for WordPress */
define('DB_NAME', 'wpdatabase002');
/** MySQL database username */
define('DB_USER', 'wp_user');
/** MySQL database password */
define('DB_PASSWORD', 'wp_password')
if(isset($_SERVER['SERVER_SOFTWARE']) && strpos($_SERVER['SERVER_SOFTWARE'],'Google App Engine') !== false) {
define('DB_HOST', ':/cloudsql/mywordpressgae000:instance');//←mywordpressongae000のインスタンス
}else{
define('DB_HOST', 'localhost');
}
今回ポイントになるのは、Authorized applicationsです。
初期は、mywordpressongae000(CloudSQLインスタンスが内部にあるプロジェクト)だけが登録されていますが、
Authorized applications欄に、アクセスさせたいプロジェクトIDを登録することで他のプロジェクトからCloud SQLインスタンスへのアクセスが可能になります。
詳しくはこちらをご覧ください。
前回も触れましたが、今月に入り正式にGAEでPHPが使えるようになりました。
Limited Previewの申し込みなしで誰もがGAEでPHPを利用できるようになります。
http://googlecloudplatform.blogspot.jp/2013/10/google-app-engine-php-runtime-now-available-to-everyone.html