【WordPress】KUSANAGI Runs on DockerでWPを爆速で立ち上げてみた

この記事は現役ウェブディベロッパーがわかりやすさにこだわって作成しました

【WORDPRESS】KUSANAGI Runs on Docker

はじめに

WindowsでLinuxのローカル環境を構築するには一昔前ならVMやVIRTUALBOXが主流でしたが、Windows10以降では、Linux実行環境の「WSL」(Windows Subsystem for Linux)が標準搭載され、「本物のLinux」がすぐに使えるようになりました。

このWSL上でWordPressを最速でインストールするために、Docker社(旧dotCloud)が開発するコンテナのアプリケーション実行環境を管理するオープンソースソフトウェア(OSS)と、Docker上で利用することができるKUSANAGI Runs on Docker (略称 KUSANAGI RoD)を利用して爆速でWordPressローカル環境を構築します。

超高速CMS実行環境「KUSANAGI」をDocker上で利用することにより、WordPress等のCMSを高速・セキュアに動作させることができます。 そのほか次のような特徴があります。 WordPressのほか、concrete5、Drupal 7/8、LAMP、LEMP環境としても利用できます。

ちなみに、このDockerですがLinuxのコンテナ技術を使っています。よく仮想マシン(ハイパーバイザー型)と比較されるのですが、仕組みは大きく異なります。

仮想マシンといえば、VirtualBoxやAWSのなどのクラウドサーバーが有名ですがこれは、ホストマシン(WindowsやMacOSなど)上でハイパーバイザーという技術を利用しゲストOS(Windows、MacOS、LinuxなどすきなOS)を動かし、その上でミドルウェアなどを稼働させていますが、一方、コンテナ技術はホストマシンのカーネル(OSの中心となるソフトウェア)を利用し、プロセスやユーザなどを隔離することで、まるで別のマシンが動いているかのように稼働させる仕組みです。

メリットとしては、リソースの消費量が少なく、軽量、高速に起動や停止などが可能なことです。

Windows ターミナルをインストール

Microsoftの公式サイトを参照してターミナルを設定します

Windows ターミナルのインストール
Windows ターミナルをインストールしてセットアップする方法について説明します。

WSL環境設定

Microsoftの公式サイトを参照してWSL開発環境を設定します

WSL 開発環境を設定する
このセット バイ ステップ ガイドのベスト プラクティスを使用して、WSL 開発環境を設定します。 Ubuntu、Visual Studio Code、Visual Studio、Git、Windows Credential Manager、MongoDB、MySQL、Docker リモート コンテナーなどを実行する方...

前提条件

WSL 2を利用するには現在最新のWindows 10であるWindows 10 May 2020 Update (Ver.2004、ビルド19041)以降である必要があります。
古いWindows 10を利用している場合はまずアップグレードが必要となります。

また、今回の環境は64bit版 Windows 10 Proとなります。
ちなみにWSL 2はWindows 10のすべてのエディションで利用可能です。

機能の追加

はじめにWLS 2を利用するには以下の2つの「Windowsの機能」が必要です。

  • Linux 用 Windows サブシステム
  • 仮想マシン プラットフォーム

管理者としてPowerShellコンソール(またはコマンドプロンプト)を起動しDISMを使いこれらの機能を追加します。

Linux用Windlowsサブシステム
仮想マシンプラットフォーム

WSLインストール

Windowsターミナルから以下のコマンドを入力します。

wsl --install

–install コマンドでは、次のアクションが実行されます。

  • オプションの WSL および仮想マシン プラットフォームのコンポーネントを有効にする
  • 最新の Linux カーネルをダウンロードしてインストールする
  • WSL 2 を既定値として設定する
  • Ubuntu Linux ディストリビューションをダウンロードしてインストールする (再起動が必要になる場合があります)

このインストール プロセス中にコンピューターを再起動する必要があります。

msgfmtが見つかりませんのエラーが発生した場合は以下のコマンドでインストールしてください

DistributionCommand
Debianapt-get install gettext
Ubuntuapt-get install gettext
Alpineapk add gettext
Arch Linuxpacman -S gettext
Kali Linuxapt-get install gettext
CentOSyum install gettext
Fedoradnf install gettext
OS Xbrew install gettext
Raspbianapt-get install gettext
Dockerdocker run cmd.cat/msgfmt msgfmt

Dockerインストール

Dockerの公式サイトを参照してインストールします

Windows Home に Docker Desktop をインストール — Docker-docs-ja 19.03 ドキュメント

Windows Home マシンで WSL2 バックエンドを使うと、Docker Desktop をインストールできます。Docker Desktop on Windows Home は、Linux コンテナ開発用の Docker Desktop の完全なバージョンです。

このページは、Docker Desktop を Windows 10 Home にインストールするための情報です。Docker Desktop を Windows 10 Pro、Enterprise、Education にインストールする情報をお探しであれば、 Windows に Docker Desktop をインストール をご覧ください。

Docker Desktop on Windows Home を使えば、以下の利点があります:

  • Windows Home マシン上で、最新版の Docker が使える
  • Windows Home 上で、1回クリックするだけで Kubernetes をインストールする
  • 統合 UI によって、実行中コンテナの表示・管理
  • 10 秒もかからず Docker Desktop を起動
  • Linux ワークスペースの使用
  • リソースとメモリの動的な割り当て
  • ネットワーク・スタックにより、http プロキ設定や信頼できる CA 同期のサポート

WSLインテグレーションの有効化

これが設定されていないとWSL側で使用できません。必ず確認しましょう。WSLでDockerコマンドが使用できなくなったときはここの設定が外れていないか確認して、Refreshボタンをクリックしてください。

KUSANAGI Runs on Dockerのインストール

Kusanagiの公式サイトを参照しKusanagi を設定します

KUSANAGI Runs on Docker | KUSANAGI
超高速CMS実行環境

以下のようにコマンドを実行すると、KUSANAGI RoDが$HOME/.kusanagi 以下にインストールされます。

$ curl https://raw.githubusercontent.com/prime-strategy/kusanagi-docker/master/install.sh |bash

インストールが終わったらkusanagiコマンドを実行できるよう.bashrcの最後にPATHを追加しておきます。

$HOME/.bashrc

PATH=/home/kusanagi/.kusanagi/bin:$PATH

KUSANAGI RoDコマンドでWordPress環境作成(プロビジョニング)

プロビジョニング(KUSANAGI RoDの環境を作成)を行うことでWORDPRESS環境が簡単に構築できます。$HOMEディレクトリでkusanagi-dockerコマンドを実行します。fdqnオプションは必須です。それ以外のオプションは省略できますが、極力設定しておいたほうがわかりやすくてよいです。

オプション環境変数説明
–fqdn(必須)FQDN作成するサイトのドメイン名を指定します
–wp(なし)WordPressの環境を構築します
–wplangjaWordPressの言語を一つだけ指定します
–admin-userユーザ名WordPressの管理者ユーザ名を指定します
–admin-passパスワードWordPressの管理者パスワードを指定します
–admin-emailメールアドレスWordPressの管理者メールアドレスを指定します
–wp-titleタイトルWordPressのタイトルを指定します
–kusanagi-passKUSANAGIパスワードWordPressでの更新で使用するkusanagiユーザのパスワードを指定します
–dbnameDB名接続するDB名を指定します
–dbuserDBユーザ名接続するDBユーザ名を指定します
–dbpassDBパスワード接続するDBパスワードを指定します
–http-portHTTPポート番号ホストにポートフォワードするhttpポート番号を指定します
–tls-portHTTPSポート番号ホストにポートフォワードするhttpsポート番号を指定します

WordPressプロビジョニング作成

WordPressプロビジョニングを作成するのは簡単です。Kusanagiコマンドでprovisionコマンドを実行します。

kusanagi-docker provision --wp --wplang=ja --admin-user={ユーザ名} --admin-pass={パスワード} --admin-email={メールアドレス} --wp-title={タイトル} --kusanagi-pass={KUSANAGIパス} --dbname={DB名} --dbuser={DBユーザ名} --dbpass={DBパスワード} --http-port=80 --tls-port=443 --fqdn {ドメイン名} {プロビジョニング名}

次はサンプルコマンドです。

$ kusanagi-docker provision --wp --wplang=ja --admin-user=admin --admin-pass=password --admin-email=sample@wp.local --wp-title=test --kusanagi-pass=password --dbname=wordpress --dbuser=wordpress --dbpass=password --http-port=80 --tls-port=443 --fqdn wp.local wplocal

MYSQLのパスワードに#を使用すると、YMLファイルにパスワードが書き込まれたのち参照したときに#以降コメントとして認識されてしまうため、パスワードの一部が無効になってしまいます。

そのためログインできなくなりMYSQLエラーが発生しますので、ご注意ください

GITをインストールをした直後の環境で、エラーが出る場合があります。その場合は、GITにメールアドレスと名前を設定することで解決する場合がありますので設定をご確認ください。

git config –global user.email “you@example.com
git config –global user.name “Your Name”

こちらのサイトを参考にさせていただきました

VultrでKUSANAGI Runs on Dockerが動くまで(その1) - Qiita
前回のおさらい 前回の記事『VultrにDocker環境を作成する』でDockerとDocker-Composeの環境を作りました。今回はDocker上で超高速Wordpress環境であるKUSANAGIを動かしてみたいと思いま...

hostsファイルの編集

FQDNで設定したドメイン名にローカルホストIP(127.0.0.1)を紐づけるために、WINDOWSのhostsファイルを編集する必要があります。

以下のフォルダに存在するhostsファイルを編集します。

C:\Windows\System32\drivers\etc

権限により直接編集できないためいったんデスクトップにコピーして次のコードを追加します

  127.0.0.1   {ドメイン名}                     # local host

編集が完了したら、元のフォルダに移動します。

この際、以下の確認画面がでますので続行を選択します。

ブラウザで確認

ブラウザでFQDNオプションで設定したドメインにアクセスします

Kusanagi Rod のコンテナの設定を変更

phpのコンテナにiniファイルを追加する

追加するINIファイルを作成

docker-compose.yml の置かれているフォルダの配下にphpフォルダを作成して、そこに下記ファイルを作成、配置する

uploads.ini

file_uploads = On
memory_limit = 256M
upload_max_filesize = 64M
post_max_size = 64M
max_execution_time = 600

docker-compose.ymlファイル修正

docker-compose.ymlファイルのphp、volumesのサービス※に下記のコードを追加する

- ./php:/usr/local/etc/php/conf.d #※追加を追加する

docker-compose.ymlファイル に以下のように追加します

  php:
    container_name: kusanagi01_php
    image: primestrategy/kusanagi-php:7.4.8-r0
    ・・・
    volumes:
      - ./php:/usr/local/etc/php/conf.d     #※追加

プロビジョニングフォルダ内の./phpフォルダに置かれているすべてのファイルが、コンテナ内の/usr/local/etc/php/conf.d配下に生成されます

修正の反映

コンテナの再構築を行います

最初に終了のコマンドを実行します

docker-compose down

次に起動のコマンドを実行します

docker-compose up -d

Docker内ファイルのパーミッションを変更する

wp-contentフォルダやファイルのパーミッションは必要に応じて変更します

find /home/kusanagi/wp.local/DocumentRoot/wp-content/ -type d -exec chmod 777 {} +
find /home/kusanagi/wp.local/DocumentRoot/wp-content/ -type f -exec chmod 777 {} +

【参考】サービス(docker-composer.xml設定項目)について

こちらのサイトを参考にしました

docker-compose.ymlの書き方について解説してみた - Qiita
はじめに この記事は、現在Dockerについて学習している自分が、docker-compose.ymlの書き方について、 ファイル内に記述されているコマンドの意味などをアウトプットを兼ねて解説した内容になります。 ※お知らせ...

Serviceの内容の設定項目はかなりたくさんあります。よく使うものをピックアップし、簡単な表にまとめられています。(上記サイトから抜粋)

項目意味リファレンスリンク
restart実行時に再起動するかどうかhttps://docs.docker.com/compose/compose-file/#restart
environmentDBについての環境変数設定(パスワードなど)https://docs.docker.com/compose/compose-file/#environment
portsDBのDockerImageを立ち上げる際のポート番号https://docs.docker.com/compose/compose-file/#ports
volumesマウントする設定ファイルのパスを指定(mysqlのconfなど)。https://docs.docker.com/compose/compose-file/#short-syntax-3
buildComposeFileを実行し、ビルドされるときのpathhttps://docs.docker.com/compose/compose-file/#build
depends_onService同士の依存関係https://docs.docker.com/compose/compose-file/#depends_on
entrypointデフォルトのentrypointを上書きするhttps://docs.docker.com/compose/compose-file/#entrypoint
driverボリュームに使用するドライバ(動かすための接続先)の指定。https://docs.docker.com/compose/compose-file/#driver

【参考】KUSANAGI RoDコマンド

主なサブコマンドは以下になります。

  • provision KUSANAGI RoDの環境を作成します
  • remove KUSANAGI RoDの環境を削除します
  • ssl KUSANAGI RoDのSSL関連の設定を変更します
  • config KUSANAGI RoD の設定を行います
  • wp WordPressのCLIコマンドを実施します(WordPressのみ)
  • import/export Docker上に設定したファイルおよびDB情報をローカルディレクトリにimport/exportします
  • start/stop/restart 作成したKUSANAGI RoD環境を開始/停止/再起動を行います
  • status 作成したKUSANAGI RoD環境の状態を確認します

こちらのサイトより抜粋

KUSANAGI Runs on Docker | KUSANAGI
超高速CMS実行環境

KUSANAGI RoDで使用できるコマンド一覧(ヘルプ参照)

KUSANAGI RoDで使用できるコマンドは、-hオプションを指定することで一覧表示することが可能です

kusanagi-docker -h

対象のプロビジョニングに移動

先に作成したWordPress環境(プロビジョニング)は、wp.localフォルダに作成されています。

以下のコマンドでフォルダを移動します

cd wp.local/

作成したプロビジョニングのフォルダ内で、KUSANAGI RoDのコマンドが使用できるようになります。

プロビジョニングの停止

ローカルに複数のプロビジョニングを作成している場合は、同時に起動することはできません

次のコマンドで起動中のプロビジョニングを停止します

kusanagi-docker stop

プロビジョニングの開始

次のコマンドで起動中のプロビジョニングを開始します

kusanagi-docker start

複数のプロビジョニングを作成しておき、必要に応じてそれぞれの環境を立ち上げることができます

こちらはの例では別に作成したプロビジョニング(wp2.local)を起動しました

コンテナのWordPressソースを展開する

対象のプロビジョニングのフォルダを参照すると、contentsフォルダがあります。

次のコマンドでDockerコンテナ内に存在するDocumentRoot以下のWordPressソースを上記contentsフォルダに展開することができます。

kusanagi-docker config pull

WordPressソースをコンテナ内に格納する

次のコマンドで上記contentsフォルダ内のWordPressソースをDockerコンテナに格納することができます。

kusanagi-docker config push

WP-CLIを使用する

KUSANAGI RoDのコマンドからWP-CLIを実行することが可能です

WP-CLIバージョンを参照

例えば、WP CLIのバージョンを参照したい場合は、以下のコマンドを実行します

wpから右のオプションはwp-cliのオプションになります。

kusanagi-docker wp --version

データベースのエクスポート

データベースのエクスポートは、以下のコマンドで可能です

wp db export ファイル名

ただし、エクスポート先のフォルダはコンテナ内になりますので、kusanagi-docker config pullコマンドを実行してcontentsフォルダ内に展開することで参照できるようになります。

【参考】 Dockerコマンド

Dockerコマンドは公式サイトに詳しく説明されています

Docker コマンド — Docker-docs-ja 20.10 ドキュメント

dockerコマンドは以下のフォーマットで使用します。

docker [OPTIONS] COMMAND

主要なコマンドの紹介

コンテナ作成

コマンド引数説明
runimage名コンテナを作成する(起動状態で)
createimage名コンテナを作成する(停止状態で)

コンテナ一覧

コマンド 引数 説明
psN/Aコンテナの一覧を表示する
statsN/Aコンテナのリソース使用状況一覧を表示する

コンテナ操作(1)

コマンド 引数 説明
rmcontainer名コンテナを削除する
startcontainer名コンテナを開始する
stopcontainer名コンテナを停止する
killcontainer名コンテナを強制停止する
restartcontainer名コンテナを再起動する
pausecontainer名コンテナ上のプロセスを一時停止する
unpausecontainer名コンテナ上のプロセスを再開始する

コンテナ操作(2)

コマンド 引数 説明
execcontainer名コンテナ内でプロセスを起動する
attachcontainer名コンテナに標準入出力をアタッチする

コンテナ操作(3)

コマンド 引数 説明
cpsrcfile dstfileコンテナに(から)ファイルをコピーする
renamecontainer名 newnameコンテナ名を変更する
updatecontainer名コンテナの設定(CPU数等)を変更する

コンテナ詳細

コマンド 引数 説明
logscontainer名コンテナのログを表示する
portcontainer名コンテナのポートマッピングを表示する
topcontainer名コンテナ内のプロセスの一覧を表示する

Dockerレジストリ関連

コマンド 引数 説明
pullnameレジストリからイメージをダウンロードする
pushnameレジストリにイメージをアップロードする
searchtermDockerレジストリからイメージを検索する
loginN/ADockerレジストリにログインする
logoutN/ADockerレジストリからログアウトする

イメージ管理

コマンド 引数 説明
imagesN/Aイメージの一覧を表示する
rmiimagesイメージを削除する
historyimageイメージのヒストリを表示する
commitcontainer名コンテナからイメージを作成する
tagimage NEWimageイメージにタグをつける
builddockerfileイメージをビルドする
trustN/Aイメージに署名する

ボリューム管理

コマンド 引数 説明
volumeN/ADockerボリュームを管理する

ネットワーク管理

コマンド 引数 説明
networkN/ADockerネットワークを管理する

インポート/エクスポート/セーブ/ロード

コマンド 引数 説明
exportcontainerコンテナをファイルにエクスポートする
importfileエクスポートファイルをイメージとしてインポートする
saveimageイメージをファイルにセーブする
loadfileセーブファイルをイメージとしてロードする

Docker Swarm(クラスタリング)関連

コマンド 引数 説明
swarmN/ASwarmを管理する
nodeN/ASwarmノードを管理する
stackN/ASwarmスタックを管理する
secretN/ASwarmシークレットを管理する
serviceN/ASwarmサービスを管理する

その他

コマンド 引数 説明
versionN/Aバージョンを表示する
helpN/Aヘルプを表示する
infoN/ADockerに関するシステム情報を表示する
inspectN/A様々なDockerオブジェクトの詳細情報を表示する
diffcontainerコンテナ生成後の更新ファイルを表示する
waitcontainerコンテナの停止を待ち合わせる
eventsN/ADockerエンジンのイベントを監視・表示する
imageN/Aイメージ管理系コマンドを実行する
containerN/Aコンテナ管理系コマンドを実行する
builderN/Aイメージビルド系コマンドを実行する
systemN/Aシステム管理系コマンドを実行する
configN/Aコンフィグを管理する
contextN/Aビルド時のコンテキストを管理する
engineN/ADockerエンジンを管理する
pluginN/Aプラグインを管理する

詳細はこちらを参照

Dockerコマンド - とほほのWWW入門

Dockerコマンドに使用例

起動中のコンテナの一覧

起動中のコンテナを一覧表示します

docker ps

次のように一覧表示されます

停止中のコンテナもすべて表示する場合は-aオプションを使用します

docker ps -a

起動中のコンテナの中に入る

起動中のコンテナの中に入る場合は、上記のコンテナ一覧のコンテナIDを指定して、下記コマンドにより、コンテナ内に入ることができます

docker exec -it --user root {コンテナID} /bin/sh

以下のように、対象コンテナの中を参照することができます

さいごに

今回は、KUSANAGI Runs on Dockerを紹介しました。Kusanagiは開発環境としてはもちろん、AWSをはじめ多くのサーバーで使用できます。Dockerを使うと手軽にローカル環境にKusanagiの開発環境を構築することができます。是非一度ご自身のPCに環境を構築してみてはいかがでしょうか。

参考資料

KUSANAGI がDockerに正式対応!を解説!(穂苅智哉氏) | 株式会社デジタル・ヒュージ・テクノロジー
1.はじめにこんにちは!プライム・ストラテジーでマーケッターをしている、穂苅智哉と申します。
PHP/Javascript/WORDPRESS案件全般承ります

この記事についてのご質問またはお困りのことがございましたら、お気軽にお問い合わせください。

タイトルとURLをコピーしました