ある企業の採用試験に実技があったので、練習がてら(多少のコストアップは覚悟の上で)Google Cloud Platformに趣味のサイトを移転したのですが、まさかここまでコストダウンする結果になるとは思いませんでした。

私のサイトはテキストコンテンツメインかつアクセス数が少ないため、メディアサイトや大規模サイトの場合はそれなりに費用はかかってくるかもしれません。

小規模な個人サイトを立ち上げる場所としては、費用もスペックも国内の格安サーバーよりずっと良くなります

おさらい

かつて、Google Cloud PlatformにWordPressを載せる方法は2つありました。

WordPressはデータベースを必要とするので、いずれも今年の2月頃までは無料枠では運用できませんでした。

Google App Engine + Cloud SQL

というわけで、予算と実装の関係でこちらは諦めていました。

やり方自体は色々と先人が書き記してくださっているので以下の記事等を参考にどうぞ。

Google Compute Engine上にLAMP環境またはLEMP環境を構築

IaaSなので、基本的には自分が選択したOS等へのインストール方法と全く同じです。私は初心者だったので無難にDebian上にLAMP環境で構築しました。

GCPからクリックでインストールも出来るようですので、あまり知識が無い人でもGCEを使ってWPサイトを運用する事は可能でしょう。

しかし、Googleのヘルプは素人向けではなく、セキュリティ対策やメモリ周りのチューニングも必要です。これからプログラミングやサーバーについて覚えよう、というつもりならおすすめしません。格安サーバーで自動インストール出来る所もあるのでそちらを利用しましょう。

新料金体系(Always Free)での運用コスト

新無料枠についてはAlways Freeを参照。

私はGCEを昨年末から利用し、試用期間後は700円/月程度の費用を予想していました。

3月の途中でGCEの無料枠が拡大され、4月いっぱい新料金体系で運用した所、GCEの費用はアメリカから中国へのデータ通信費1円のみでした。

一応、他にはCloud DNS及びCloud Storageも利用しており、画像等の通信費がかさみそうなものはストレージから配信する等の工夫をしています。

Storageの方は十分無料枠に収まり、DNSの方は請求がありましたが、多少アクセス数が増えたり為替が変動したりしても月100円を超える事は当分なさそうです。

米国リージョンなので、どうしてもアジア方面への通信費が課題でしたが、APACへの通信費が1GBまで無料となり大変助かっています。

一方私のサイトでは、中国への通信費は、今後更に増大する可能性があります。コンテンツの違法コピー問題で、長年中国からのアクセスは(全面的にではないにせよ)締め出す方針を取っていました。しかし、近年は身を置くジャンルでも中国での発展・中国への参入が著しく、中国語翻訳をサイトに追加し、アクセス制限を緩めたためです。

いずれにせよ、WordPressでブログを運用する程度では全く問題無いでしょう。

Google Compute Engine上にWordPressをインストールする

下準備

本当はgcloudコマンドでファイルをコピーするのが良いのでしょうが、私はGoogleの(現時点では)無料の非公開リモートリポジトリを利用しているので、必ずそちらを経由してサーバーとファイルをやり取りすることにします。とりあえず、

をローカルマシンにインストールしておきます。

VMインスタンスの作成とApacheのセットアップ

公式にマニュアルがあります。

注意点としては、

インスタンス一覧の「接続」から接続情報が確認できます。

mod_rewriteの有効化

以下の記事を参考に、mod_rewriteモジュールのインストールを確認。

WordPressの引越しでパーマリンクの404 Not Foundエラーが発生

http://junrei.dip.jp/wordpress/wordpress/wordpress%E3%81%AE%E5%BC%95%E8%B6%8A%E3%81%97%E3%81%A7%E3%83%91%E3%83%BC%E3%83%9E%E3%83%AA%E3%83%B3%E3%82%AF%E3%81%AE404-not-found%E3%82%A8%E3%83%A9%E3%83%BC%E3%81%8C%E7%99%BA%E7%94%9F-2/

mod_rewrite.soは存在したので、apache2.confにてロードさせたところApacheが起動できない。

どうやら機能そのものが有効化されていなかったので、a2enmod rewriteで有効化。

すると今度はサイトの方で500エラーが出る。ともかく、以下の事をしたら500エラーはなくなった。

まず、以下をapache2.confに追記して再起動。

<Directory /var/www/html/>
LoadModule rewrite_module modules/mod_rewrite.so
Options Indexes FollowSymLinks
AllowOverride All
</Directory>

次に、WordPressのサイトURL、ホームURLを現在のIPアドレスにする(Adminerから編集)。

そして、.htaccessを初期状態にする

#BEGIN WordPress
RewriteEngine On
RewriteBase /
RewriteRule ^index.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
#END WordPress

あとsudo a2enmod expiressudo a2enmod headersもやっておく。

PHP7のインストール

PHP7は自分でコンパイルする必要があるが、GitHubから簡単に取って来れる。

Debian8(jessie)にphp7をインストールしてApache2.4で動かす

http://vivibit.net/debian-php7/

ただこの記事にも

apxsがインストールされていない場合apache2-devもインストールする必要がある

と書かれている通り、apxsの設定を追加するだけではビルド(インストールだったかも)に失敗した。/usr/lib/apache2/modules/libphp7.soはあったけど/etc/apache2/mods-available/php7.confは無かった。

apache2-devを入れてから再度ビルドしたが、Apacheを切り忘れていたのが原因か、それとも他に原因があるのか、インストールに失敗する。あとはphp.iniがコピーできないとか色々。まあとにかくPHPをちゃんと入れるのが先ですね。

途中で作業を中断し、出かけて帰ってきたら今度はApacheも起動しなくなっていた。

your PHP Module is not compiled to be threadsafe

との事なのでThread SafeなPHPをビルドし直した。

php + apache のメモリ量をおさえる(2) workerを使ってみるも参考に、build.shに以下を追加。

--with-apxs2=/usr/bin/apxs2 \
--with-tsm-pthreads \
--enable-maintainer-zts \

ただ今度はメモリが足りない。以下の記事の方法で回避。

Amazon EC2 でメモリが足りない時の対処について - 仮想通貨サービス BitCapitalZ の日記

http://bitcapitalz.hatenablog.com/embed/2014/07/26/010700

ビルドしたら再インストール。

が既に存在すると止まってしまうので、削除してから、

./build.sh
sudo ./install.sh

とにかくこれで無事インストールできました。

php.iniでの日本語設定などはこのページなどを参照。

MySQLのインストール

これも公式にマニュアルがあります。日本語情報少ないって言われてたけど、案外ありますね。

データ移転はAdminerを一時的に設置して行いました。

最終的に、容量が大きすぎて一部はコマンド叩いてやったんですけれども。大きいファイルは一旦ローカルのコマンドプロンプトに戻ってから
gcloud compute --project "プロジェクトID" copy-files --zone "ゾーン" hogehoge.sql インスタンス名:hogehoge.sql
でGCPにアップロードし、GCP側でsourceコマンドでインポートします。

WordPress用のユーザーの作成

WordPress用のテーブル全てに全権限を持つユーザーを作ればOK。

wp-confing.phpの方は

define('DB_HOST', 'localhost');

にするのを忘れない。

WordPress本体のアップロード

前述の通りリポジトリ経由でアップロード。

自動更新、サイトマップなどファイルの生成、キャッシュシステムの設定など、WPの管理画面側からサイトを管理するには/var/www/html/以下のディレクトリやファイルを、Apacheを起動させているユーザーの所有にしておく必要がある。

パーミッションが664とかでもユーザーが違うと上手くいかない。 (WPはパーミッションよりも所有者を優先させるらしい)今回作った環境でのコマンドは以下。
sudo chown -R www-data:www-data /var/www

メモ:wp-config.phpの属性を400にすると500エラー。404なら大丈夫。サイトが落ちたらまずwp-config.phpの属性と所有者を確認すること。

独自ドメインの設定

静的IPがあるのでそれを各自登録すればOK。

Let’s Encryptの導入

Let's Encrypt - Free SSL/TLS Certificates

https://letsencrypt.org/

紆余曲折したので、うまくいった結果だけ。環境はDebian/Apache2.4.10。

まずは認証。やり方はググれば沢山出てきます。

Let's encryptで無料のSSL/TLS証明書を取得して独自ドメイン運用のGAEに入れて使う - koni blog

http://koni.hateblo.jp/embed/2016/06/02/233900
無料で使えるLet's EncryptをGCEに設定しよう - apps-gcp

http://www.apps-gcp.com/lets-encrypt/

そしてApacheの設定。Apacheの仕様は/usr/share/doc/apache2/README.Debian.gzとかとてもわかりやすい記事とかを見ましょう。mod_ssl自体はインストールされているものとする。


この他のちょっとしたTIPS等はQiitaに投稿しています。メールの設定もQiitaに書きました。

「 user:yukari-n tag:googlecomputeengine」の検索結果 - Qiita

http://qiita.com/search?q=+user%3Ayukari-n+tag%3Agooglecomputeengine&sort=stock

本当は過去記事を再アップするつもりで書き始めたのに、肝心の過去記事データを紛失していて(しかもその事に書いている今気が付いて)何を書こうと思っていたのかよくわからなくなってしましました。見つかったので編集して再掲しました!

とにかく言いたいことをまとめます。

これらの点が国内の格安レンタルサーバーに比べてアドバンテージなので、今後サイトを立ち上げる時の候補の一つにしていただければ。

勿論WordPress以外のCMSも入れられます。

スポンサーリンク