目次
はじめに
前回【第4回】GCPの無料枠でdev.toなみの爆速Wordpress環境を構築する(ドメイン設定編)ではドメイン周りの設定を終わらせたので、今回【第5回】GCPの無料枠でdev.toなみの爆速Wordpress環境を構築する(KUSANAGI Runs on Docker編)では前々回に構築したVMインスタンスに「KUSANAGI Runs on Docker」をインストールしていく。初心者にはちょっと難しい内容になるが、手順通りに進めていけば無事に構築できるはず。焦らずに進めていこう。
今回の作業は上記のサイトを参考にしている。上記のサイトの方法ではいくつかの不具合が残ったまま構築することになるが、今回ここで紹介する手順で構築すれば諸問題は解決することができる。
Google Cloud PlatformでのSSH接続
Google Cloud PlatformにSSH接続する方法はいくつかあるが、今回はブラウザから手っ取り早くログインできる方法で進めていく。

VMインスタンスの画面から「接続」→「SSH」→「ブラウザウィンドウで開く」を選ぶ。

SSH 接続を開始するか尋ねられるので「接続」をクリックする。

するとターミナル画面が表示されるので、ここでコマンドを実行して構築していくことになる。
「KUSANAGI Runs on Docker」の環境を構築
さて、これからいくつものコマンドを実行していく。CUIに慣れていなくても一つ一つコマンドを実行していけば問題なく構築できるのでご安心を。
スワップ領域の設定
この環境で何度かWordpressを構築してきたが、サイトの移行などで大きいファイルを扱ったるする際にメモリの少なさが原因でサーバが非常に重たくなる。始めにスワップ領域を設定しておくことで、サーバの負荷を軽減することができるので設定しておこう。
作業の前にスワップ領域がないことを下記のコマンドで確認してみよう。
free -m
Swapが下記のように「0」と表示されていれば未設定。
total used free shared buff/cache available
Mem: 588 267 83 42 237 149
Swap: 0 0 0
Swapファイル領域を確保(処理に1ー2分かかる)
sudo dd if=/dev/zero of=/swapfile bs=1M count=1024
パーミッションを変更
sudo chmod 600 /swapfile
Swapの作成
sudo mkswap /swapfile
Swapを有効にする
sudo swapon /swapfile
Swapの確認
先ほど「0」になっていたのが「1023」となっている。
free -m
total used free shared buff/cache available
Mem: 588 256 69 42 262 159
Swap: 1023 0 1023
このままでは再起動した際にSwapファイルは無効になるので下記のコマンドで永続化する必要がある。長いコマンドなのでちゃんと行末までコピペするように。
sudo sed -i '$ a /swapfile swap swap defaults 0 0' /etc/fstab
念のために再起動。問題なくSwapが永続されているかを確認してみよう。
sudo reboot

上記のような画面が表示されるので「再接続」をクリック。再起動には1〜2分かかる。
もう一度下記のコマンドを実行しスワップ領域が確保されていれば大丈夫。
free -m
total used free shared buff/cache available
Mem: 581 91 327 2 162 376
Swap: 1023 0 1023
Dockerをインストール
次にDockerに必要なパッケージをインストールする。
curl -fsSL https://get.docker.com/ | sh
問題なく起動しているか確認するために下記のコマンドを実行してみよう。
sudo docker run hello-world
問題なくインストールされていれば
Hello from Docker!
This message shows that your installation appears to be working correctly.
と表示されているはずだ。
再起動しても自動的にDockerが起動するように下記のコマンドを実行。
sudo systemctl enable docker
問題なく動作するか確認するためにVMインスタンスを下記のコマンドで再起動させてみる。
sudo reboot

上記のような画面が表示されるので「再接続」をクリック。再起動には1〜2分かかる。
もう一度下記のコマンドを実行し動作していれば大丈夫。
sudo docker run hello-world
Docker-composeをインストール
次にDocker-composeをインストール。まず下記のコマンドでファイルをダウンロードする。
sudo curl -L https://github.com/docker/compose/releases/download/1.21.0/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
Docker-composeファイルの権限を変更する。
sudo chmod +x /usr/local/bin/docker-compose
問題なくインストールできているかバージョン確認してみよう。
docker-compose --version
問題なければこのように表示されるはずだ。
docker-compose version 1.21.0, build 5920eb0
これで下準備ができた。ではDockerを使って実際に環境を構築していく。
「KUSANAGI Runs on Docker」の構築
まず「KUSANAGI Runs on Docker」の環境を構築するにあたって、Let’s Encrypt(SSL)を登録するためのE-MAILアドレスと、いくつかのdocker-compose.ymlが必要となってくる。
下記のコマンドでファイルをダウンロードし、環境構築に必要な階層とdocker-compose.ymlのファイルを準備する。
sudo curl https://www.karelie.net/wp-content/uploads/wordpress.tar.gz --output "/home/wordpress.tar.gz"
ダウンロードしたファイルを解凍する。
sudo tar -zxvf /home/wordpress.tar.gz -C /home/
すると下記の構造でhomeの階層に必要なファイルが揃う。
+ home
+ wordpress
+ nginx-proxy
- docker-compose.yml
- nginx.conf
+ mariadb
- docker-compose.yml
+ kusanagi-php7
- Dockerfile
+ files
+ kusanagi-1
- docker-compose.yml
+ kusanagi-2
- docker-compose.yml
- uploads.ini
コマンドでそれぞれのdocker-compose.ymlを編集していくので、先に権限も変更しておく。
sudo chmod 707 /home/wordpress/*/docker-compose.yml
Dockerネットワークを作成
Dockerのネットワーク環境を下記のコマンドで構築する。
sudo docker network create --driver bridge common_link
プロキシサーバーコンテナを起動(nginx-proxy)
下記のコマンドでプロキシサーバーコンテナを起動させる。
sudo docker-compose -f /home/wordpress/nginx-proxy/docker-compose.yml up -d
データベースサーバーコンテナの設定と起動(mariadb)
設定ファイル(docker-compose.yml)の変更
docker-composeで起動させる前に設定ファイル(docker-compose.yml)を4箇所、変更する必要がある。
データベースルートパスワード
データベースユーザー名
データベースパスワード
データベース名
下記のコマンドで「****」部分を設定したい文字列に変更して実行する。「****」部分を読者の設定したい文字列に必ず置き換えること。それぞれのコマンドをメモ帳などに一度コピーして****部分を置き換えれば作業しやすくなる。
また、「データベースユーザー名」「データベースパスワード」「データベース名」は、Wordpressのインストール時に必要になってくるので忘れないように。
データベースルートパスワードの設定変更
sudo sed -i -e "s/{データベースルートパスワード}/****/g" /home/wordpress/mariadb/docker-compose.yml
データベースユーザー名の設定変更
sudo sed -i -e "s/{データベースユーザー名}/****/g" /home/wordpress/mariadb/docker-compose.yml
データベースパスワードの設定変更
sudo sed -i -e "s/{データベースパスワード}/****/g" /home/wordpress/mariadb/docker-compose.yml
データベース名の設定変更
sudo sed -i -e "s/{データベース名}/****/g" /home/wordpress/mariadb/docker-compose.yml
設定変更のサンプルコマンド
例えばデータベース名の設定を「wordpress」とする場合、下記のコマンドになる。
sudo sed -i -e "s/{データベース名}/wordpress/g" /home/wordpress/mariadb/docker-compose.yml
もしターミナルからのテキスト処理に慣れているのなら下記のコマンドで直接ファイルを変更しても問題ない。
vi /home/wordpress/mariadb/docker-compose.yml
コンテナの起動
上記の設定ファイルの準備ができたら下記のコマンドを実行してデータベースサーバーコンテナを起動させる。
sudo docker-compose -f /home/wordpress/mariadb/docker-compose.yml up -d
kusanagi-php7のビルド
次に公式の「kusanagi-php7」のイメージではPHPのJPEGに対応していないので、今回は独自にビルドする。JPEG処理に対応させないとサムネイルの作成や画像のトリミングなどの編集ができない。
ビルド用のファイルは先ほどダウンロードしたファイルに含めているので下記のコマンドを実行すれば良い。
sudo docker build -t kusanagi-php7 /home/wordpress/kusanagi-php7/
ビルドには10分ほどかかるのでしばらく待つ。
KUSANAGI WordPressサイト1(kusanagi-1)の設定と起動
設定ファイルの変更
こちらもdocker-composeで起動させる前に設定ファイルを2箇所、変更する必要がある。
ドメイン
E-MAILアドレス
下記のコマンドで「****」部分を設定したい文字列に変更して実行する。「****」部分を必ず置き換えること。
ドメインの設定変更
sudo sed -i -e "s/{ドメイン}/****/g" /home/wordpress/kusanagi-1/docker-compose.yml
E-MAILアドレスの設定変更
sudo sed -i -e "s/{E-MAILアドレス}/****/g" /home/wordpress/kusanagi-1/docker-compose.yml
例えばドメインの設定を「www.free-wordpress.cf」とする場合、下記のコマンドになる。
sudo sed -i -e "s/{ドメイン}/www.free-wordpress.cf/g" /home/wordpress/kusanagi-1/docker-compose.yml
ちなみに今回はCloudflareでサイト全体をキャシュさせるのでKusanagiのキャッシュ機能は無効にしている。キャッシュ機能を有効にしたい場合はdocker-compose.ymlファイル内の
BCACHE: “off”
FCACHE: “off”
部分を “on” に変更すること。
下記のコマンドでも変更可能。
BCACHEを有効にする場合
sudo sed -i -e 's/BCACHE: "off"/BCACHE: "on"/g' /home/wordpress/kusanagi-1/docker-compose.yml
FCACHEを有効にする場合
sudo sed -i -e 's/FCACHE: "off"/FCACHE: "on"/g' /home/wordpress/kusanagi-1/docker-compose.yml
コンテナを起動
上記の設定ファイルの準備ができたら下記のコマンドを実行してKUSANAコンテナを起動させる。
sudo docker-compose -f /home/wordpress/kusanagi-1/docker-compose.yml up -d
コマンドが実行し終わってもLet’s Encrypt(SSL)の処理に15分弱かかるので気長に待とう。(処理が完全に終わるまでは設定したドメインにアクセスしてもエラーになってサイトは表示されない。)
無事に処理が終わるとめでたくこのようにwordpressの設定画面が表示される。

もし下記のようにリダイレクトが発生しサイトにアクセスできない場合は「Cloudflare」の「Crypto」にある「SSL」の設定を「Full」にすること。

複数サイトの立ち上げ
今回は「[WordPress] KUSANAGI Runs on DockerでLet’s EncryptのSSL付きマルチサイトを立ち上げる」を参考にし、一つのサーバーで複数のKUSANAGIを起動するマルチサイト運用にも対応させているので、その方法も紹介しておく。
KUSANAGI WordPressサイト2(kusanagi-2)の設定と起動
まず、ドメインはあらかじめ「kusanagi.karelie.net」というのを準備しておいた。

次にすでにある「kusanagi-2」の階層内にある「docker-compose.yml」ファイルを「kusanagi-1」の時と同様に「ドメイン」「E-MAILアドレス」を変更する。
下記のコマンドで「****」部分を設定したい文字列に変更して実行する。「****」部分を必ず置き換えること。またコマンドの階層部分が「kusanagi-1」ではなく「kusanagi-2」となっていることも確認すること。
ドメインの設定変更
sudo sed -i -e "s/{ドメイン}/****/g" /home/wordpress/kusanagi-2/docker-compose.yml
E-MAILアドレスの設定変更
sudo sed -i -e "s/{E-MAILアドレス}/****/g" /home/wordpress/kusanagi-2/docker-compose.yml
コンテナを起動
sudo docker-compose -f /home/wordpress/kusanagi-2/docker-compose.yml up -d
これで二つ目のサイトが立ち上がる。こちらも起動するまで10〜15分ほどかかる。
「kusanagi-2」のフォルダを複製しdocker-compose.ymlファイル内の「kusanagi-*」部分を適正に変更すれば、一つのインスタンス内に三つでも四つでもWordpressを立ち上げることができる。おそらく小規模でアクセスの少ないサイトであれば10サイトほど同時に立ち上げても大丈夫なんじゃないかなと思う。
まとめ
これでWordpressの環境が構築されたので、次回【第6回】GCPの無料枠でdev.toなみの爆速Wordpress環境を構築する(Wordpress設定編)では、Wordpressの初期設定を済ませ、「KUSANAGI Runs on Docker」に潜在している幾つかの諸問題を解決してく。
丁寧に手順を示していただけており、素人ながらここまでたどり着きました、ありがとうございます。
>無事に処理が終わるとめでたくこのようにwordpressの設定画面が表示される。
の部分で自動的に画面が表示されないのですが、何かわかりますでしょうか。
wordpressをほとんど触ったことがなく、取得したドメインや外部ipへの手動アクセスは試したのですがどうも違うようで。
試していただいてありがとうございます。どのような画面が表示されますでしょうか?一応注意書きで「コマンドが実行し終わってもLet’s Encrypt(SSL)の処理に15分弱かかるので気長に待とう。(処理が完全に終わるまでは設定したドメインにアクセスしてもエラーになってサイトは表示されない。)」と書いてますので、少し時間をおいてからアクセスして見てください。
sudo docker-compose -f /home/wordpress/kusanagi-1/docker-compose.yml up -d
ここで失敗です。
pull access denied for kusanagi-1, repository does not exist or may require ‘docker login ‘
で止まります。docker loginとやらが必要でしょうか。
試していただきありがとうございます。このようなエラーに遭遇したことがありませんので正確な原因がわかりませんが、そちらの環境は今回紹介しているGoogle Cloud Platform で VMインスタンスでOSは「Ubuntu 16.04 LTS」を利用していますか?それとも違う環境でしょうか?
また/docker-compose.ymlの内容は下の通りになっていますでしょうか?
{ドメイン}と{E-MAILアドレス}は括弧ごと置き換えてますでしょうか?
お返事ありがとうございます。
申し訳ありません、何からの異常で、直前のビルド作業で失敗していたようです。
これを再度ビルドし直す事で、正常に起動しました。
また、Cloud flareの設定も変更しておらずリダイレクトの状態だったため、
そちらも変更し、無事にWordpress画面へとアクセスできました。
本当にありがとうございました!
解決できてよかったです。
全て設定して、無事爆速になりました。
一番小さいインスタンスとは思えない凄まじい速度ですね。
本当にお世話になりました。あなたが神です(確信
以上、ご報告まで。本当にありがとうございます!
爆速のWordPressサイトが無料で構築でき、大変感謝しております。
WordPressサイトのサイトマップをGoogleに通知すべく、Google XML Sitemapsプラグインを導入したのですが、Nginxを使っているので設定を変更するようアナウンスが表示されています。
どの様に対応すれば良いか、指南頂けると幸いです。
Webserver Configuration
Since you are using Nginx as your web-server, please configure the following rewrite rules in case you get 404 Not Found errors for your sitemap:
rewrite ^/sitemap(-+([a-zA-Z0-9_-]+))?\.xml$ “/index.php?xml_sitemap=params=$2” last;
rewrite ^/sitemap(-+([a-zA-Z0-9_-]+))?\.xml\.gz$ “/index.php?xml_sitemap=params=$2;zip=true” last;
rewrite ^/sitemap(-+([a-zA-Z0-9_-]+))?\.html$ “/index.php?xml_sitemap=params=$2;html=true” last;
rewrite ^/sitemap(-+([a-zA-Z0-9_-]+))?\.html.gz$ “/index.php?xml_sitemap=params=$2;html=true;zip=true” last;
お忙しいところ恐縮ですが、よろしくお願い致します。
返事が遅くなってすいません。当サイトでもGoogle XML Sitemapsのプラグインを使用しており同様の内容が表示されておりますが、問題なく動作しているので無視しています。別サイトでこの問題について書かれている記事がありますので、下記のサイトを参照していただけますでしょうか。
https://www.yamamanx.com/sitemap-robots/
ちなみに、nginxのconfファイルはDocker内にありますので、Dockerのコマンドで中に入ってconfファイルを編集する必要があると思うので、Dockerに慣れていなければちょっと変更するのも難しいと思われます。
回答ありがとうございます。
私のところも、問題無く動作しているように見えますので、このメッセージは無視することにしました。
このプラグインは、sitemapファイルを動的に作成するので、そのためのURLにリダイレクトする設定だと認識しています。この設定をしないと、静的なファイルを取得しようとして、Not foundになるという現象が発生するはずなのですが、なぜか問題無く取得できており、???な状態です。実際、Dockerの中を覗いてみても、静的ファイルは存在しない様に見えるので、動的にファイルが生成されている様なのですが、Nginxの設定ファイルを見ても、どういう仕組みで生成されているのか、理解出来ていません。DockerもNginxもWordPressも経験が無いので、理解するのが大変ですが、ぼちぼちやってみようと思います。とりわけ、セキュリティは大丈夫なのか?本格的にブログを運営しても大丈夫か?という不安に駆られています。
また、運用に当たって、相談させて頂くかもしれませんが、その際は、よろしくお願い致します。
お忙しいところ、ありがとうございました。
wordpressの初期画面がテキストのみで表示され、「さあ、始めましょう!」ボタンをクリックするとデータベース接続確立エラーとなります。
何が原因か分かりますでしょうか?
sudo sed -i -e “s/{データベースルートパスワード}/****/g” /home/wordpress/mariadb/docker-compose.yml
これを入力したあと、
>
このような待機画面になったまま進まなくて苦労しております。
続けて入力するのかと思って次を入れてみると
sed: -e expression #1, char 58: unknown option to `s’
このようにもどってきて終了していまいます。
ここでつまづいてしまい先にすすめず困ってます。
当サイトの情報を参考にしていただきありがとうございます。確認ですが、該当するコマンド内の「****」部分を変更して実行していますでしょうか?もしくはコピー&ペーストする際に「”」ダブルクォーテーション部分が全角に置き換わってたりしていませんか?もしくは最後の閉じる「”」ダブルクォーテーションが抜けていませんでしょうか?
なんどもインスタンスを新規にしてから試みているのですが、
kusanagi-php7のビルドの際に、
いくつか
“PHP Warning:”
例)
PHP Warning: PHP Startup: Unable to load dynamic library ‘/usr/local/lib/php/extensions/no-debug-non-zts-20151012/
apc.so’ – Error relocating /usr/local/lib/php/extensions/no-debug-non-zts-20151012/apc.so: apc_is_enabled: symbol n
ot found in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library ‘/usr/local/lib/php/extensions/no-debug-non-zts-20151012/
apc.so’ – Error relocating /usr/local/lib/php/extensions/no-debug-non-zts-20151012/apc.so: apc_is_enabled: symbol n
ot found in Unknown on line 0
など
config.m4:82: warning: AC_REQUIRE: `AC_HEADER_STDC’ was expanded before it was required
config.m4:82: http://www.gnu.org/software/autoconf/manual/autoconf.html#Expanded-Before-Required
赤字でエラーが出ているためなのか、
最後のワードプレスの設定画面で、データベース接続確立エラーとなり、
どうもデータベースに接続されていない感があるのですが、
こちらはデータベースを最初に作っておく必要ってないですか?
kusanagi自体が今回初めての試みでやってみているのですが、
wordpressインストールの際、いつも先にデータベースを作ってからじゃないとインストールできないのですが、こちらはこの手順でデータベースも自動的に作成できるのかと解釈していました。
手順通り5回くらい同じ方法を取ってためしてみていますが、
引っかかりもなくすんなりエラー画面へ行く感がデータベースを作っていない時に似ているので、
なんかしらの理由でwordpressを接続するためのテーブルがそもそも出来ていない気がしてます。
GCP自体触るのも初めてですのでこちらのサイトを1から順番に辿って最後のインストール画面にたどり着いたのですが、なにかどこかで1行程飛ばしたのかもとインスタンス新規5回やり直しました。
それでも結果が同じになってしまうためちょっとお手上げになってしまってます。
kusanagi-php7のビルドの際、エラーでてらっしゃいましたか?
よろしくお願いいたします。
当サイトを参考にしていただきありがとうございます。
https://www.karelie.net/free-fast-wordpress-site-kusanagi-docker/#mariadb
こちらの手順の部分でデータベースを設定し起動させています。
wordpressのインストールじに「データベースのホスト名」を「mysql」と入力されていますでしょうか?こちらをご参照ください。
https://www.karelie.net/free-fast-wordpress-site-setting/#wordpress