Dockerを使えば、WordPress高速化界隈で有名なKUSANAGI(プライム・ストラテジーさん開発)をローカル環境に構築できるということでチャレンジしてみました。
⇩ Docker環境がない方は下記サイトが参考になると思います。
・Docker Toolboxを使ってWindows10 HomeでDocker環境を構築する - write ahead log
⇩ gitが使える環境も用意しといたほうが良いかと。
・私家版 Git For Windowsのインストール手順 | OPC Diary
自分の環境は、 Windows 10 Home(64bit版)
docker -v Docker version 17.05.0-ce, build 89658be
VBoxManage -v 5.1.18r114002
git --version git version 2.13.0.windows.1
という感じです。
仮想マシン作成でエラー
何なんでしょうね、今回もハマりにハマっていく未来が見えてきますね。
KUSANAGI Runs on Docker – KUSANAGI のコマンドを実行。
docker-machine create --driver virtualbox --virtualbox-memory=8192 --virtualbox-cpu-count=2 kusanagi-machine
そして、エラー。
Error creating machine: Error in driver during machine creation: Unable to start the VM: C:\Program Files\Oracle\VirtualBox\VBoxManage.exe startvm kusanagi-machine --type headless failed: VBoxManage.exe: error: The virtual machine 'kusanagi-machine' has terminated unexpectedly during startup with exit code 1 (0x1). More details may be available in 'C:\Users\Toshinobu\.docker\machine\machines\kusanagi-machine\kusanagi-machine\Logs\VBoxHardening.log' VBoxManage.exe: error: Details: code E_FAIL (0x80004005), component MachineWrap, interface IMachine
『C:\Users\ユーザー名\.docker\machine\machines\kusanagi-machine\kusanagi-machine\Logs\VBoxHardening.log』の VBoxHardening.logに詳しいこと書いてあるよ、らしいので見ました。
Driver is probably stuck stopping/starting. Try 'sc.exe query vboxdrv' to get more information about its state. Rebooting may actually help. 2ab8.1660: supR3HardenedWinCheckChild: enmRequest=2 rc=-101 enmWhat=3 supR3HardenedWinReSpawn: NtCreateFile(\Device\VBoxDrvStub) failed: 0xc0000034 STATUS_OBJECT_NAME_NOT_FOUND (0 retries) Driver is probably stuck stopping/starting. Try 'sc.exe query vboxdrv' to get more information about its state. Rebooting may actually help. 2ab8.1660: Error -101 in supR3HardenedWinReSpawn! (enmWhat=3) 2ab8.1660: NtCreateFile(\Device\VBoxDrvStub) failed: 0xc0000034 STATUS_OBJECT_NAME_NOT_FOUND (0 retries)
『Try 'sc.exe query vboxdrv'』コマンドを実行してみて、ってあるんで実行。
⇩ sc(sc.exe)コマンドなんて知らなんだ
Tech TIPS:scコマンドでWindows OSのサービスを確認/一覧/開始/停止する - @IT
で、vboxdrvなんて無いらしい、駄目じゃん...。
⇩ WindowsでのVirtualBoxの不具合解消法は下記サイトへ
⇩ 下のサイトは仮想マシンに入れてからの話なのかな?
・【Virtualbox】vboxdrv setupエラー | わいのメモ帳 Steamとか
で、C:¥Program Files¥Oracle¥VirtualBox¥drivers¥USB¥filter¥VBoxUSBMon.inf ファイルを右クリックで『インストール』。
『OK』を選択。
C:¥Program Files¥Oracle¥VirtualBox¥drivers¥vboxdrv¥VBoxDrv.inf ファイルを右クリックで『インストール』。
『OK』。
再び、『sc.exe query vboxdrv』コマンド実行。KERNEL_DRIVERって仮想マシンのコア的なものでは...それがインストールされてなかったって致命的な気が...。
止まってるのは分かったけど、どうやって起動させていいのか分からない。
⇩ 下記サイトにありました、ありがとうございます。
・Docker 1.10.2 (Windows) インストール備忘録 - ナチュラル @rch850
sc start vboxdrv
エラー。
アクセス権ないらしい。
・sc.exe でサービスのスタートアップの種類を変更する - 日々是笑心
どうやら、git bashを管理者権限で実行してないとまずかったみたいです。
ConEmuのタブ(git bash)上で右クリックし「Restart or duplicate」>「Restart as Admin」を選択。
管理者権限で実行
sc start vboxdrv
動き出しました。今度は仮想マシンを起動!
『docker-machine env』コマンドを実行しろ、ということですかね。
docker-machine env kusanagi-machine
また、エラー!
⇩ 下記サイトによると、TLS証明書を再度作成すればOKのようです。
いざいざ、
docker-machine regenerate-certs kusanagi-machine
docker-machine env kusanagi-machine
おお~!なんか仮想マシンの起動準備ができたっぽいですぞ。
そいじゃ、『Run this command to configure your shell:』って言ってるので、コマンドを実行してみましょう。
$ eval $("C:\Program Files\Docker Toolbox\docker-machine.exe" env kusanagi-machine)
結果は?
$ docker-machine ls NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS kusanagi-machine * virtualbox Running tcp://192.168.99.100:2376 v17.05.0-ce
仮想マシン、動きました!
Docker-compose で KUSANAGI RoD 構築
ようやく、KUSANAGIを構築するところまできましたね。
とりあえず、仮想マシン内に入りますか。(仮想マシン内に入る必要はないので、このへんの手順は飛ばしちゃってください。)
docker-machine ssh kusanagi-machine
CoreOSというものが存在するらしい..知らんかった。
cat /etc/os-release
Windows上で動かすためのLinux仮想マシンに入ってるわけですね。まだ、CentOSやUbuntuといったOSが入ってない状態ってことですかね?
とりあえず、一旦、仮想マシンの外に退避。
exit
ホスト側で良いのか分からんけど、KUSANAGIを構築するための設定ファイルを持ってくる。
git clone https://github.com/prime-strategy/kusanagi-docker.git cd kusanagi-docker ls -A
C:¥Users¥ユーザー名¥kusanagi-docker ができるみたい。
によると、docker-compose.ymlの『kusanagi-engine』の項目の「FQDN」の部分をlocalhostに変更しました。で、docker-compose.ymlの設定を適応させます。
eval $(docker-machine env kusanagi-machine)
そして、docker-compose.yml を使用して、docker-machine で dockerを起動。
docker-compose -p kusanagi-machine up
実行すると、またエラー。MariaDBの処理で止まる。
『 [Warning] 'proxies_priv' entry '@% root@b8166aa4b8bf' ignored in --skip-name-resolve mode.』
で調べてると、skip-name-resolveを使うとホスト名の解決を行わなくなるらしいのですが、「FQDN」の部分をlocalhostに変更しちゃってるんでした。ただ、Macでやってる人は、localhostでいけてるみたいなんですよね。
・skip-name-resolveを書くとDBに接続できない場合 – netcreates. blog
とりあえず、Ctrl + Cで処理を中断するしかない状態に。
いままでの流れイメージ図
docker-compose.ymlのkusanagi-nginx:のenvironment:のFQDNに何を指定すればいいのか
そもそも、FQDNの設定が、すごい曖昧なんですよね、本番環境だと本番側のサーバで用意されているものを設定すれば良いみたいなんですが、ローカル環境の場合の設定が分かりづらいですね。
で、仮想マシン内の、/etc/hostsファイルにURLが記述してあると下記サイトにあり、
・virtualboxのIPアドレスを変更する - Qiita
Dockerの公式サイトっぽいところでは、
DOCKER_HOST
のアドレスはローカルホストのアドレス(0.0.0.0)ではないためです。そのかわり Docker 仮想マシンのアドレスを使います。
default
VM のアドレスを取得します。
$ docker-machine ip default
ってなっていて、 /etc/hosts ファイルとVMのアドレスのIPが異なるという...どうすりゃいいっちゅうねん!
/etc/hosts
VM のアドレス
⇩ 下記サイトによると、/etc/hostsファイルにホスト追加でいけるとか
・mog project: Docker: Pull From the Private Registry Failed with I/O Timeout
原因は...
間際らしいんですが、 『 [Warning] 'proxies_priv' entry '@% root@b8166aa4b8bf' ignored in --skip-name-resolve mode.』が出ていても問題なかったようです。
この状態で、別のgit bashを起ち上げて、
docker ps
普通に各々のdockerコンテナがインストールされて動いてました。
で、ブラウザ側でアクセスするときに、仮想マシンのIPでアクセスします。なので仮想マシンのIPを確認しときます。
docker-machine ip kusanagi-machine
ブラウザで『http://192.168.99.100/』にアクセスしたところ無事いつものインストール画面が表示されました。localhost/、localhost:80/、localhost:443/はともにアクセスできなかったですね。
ここからは、プライム・ストラテジーさんの
KUSANAGI Runs on Docker – KUSANAGI に記述してる『WordPress 設定』の通りに進めていけばでいけます。
このへんはWordPressのログイン情報ですね。
インストールしちゃいましょう。
インストール後、ログインすると、いつもの管理画面に。
ただ、速度計みたいなものが設置されてますね。プライム・ストラテジーさんがKUSANAGIの技術に自信を持っている様子が伺えますね、素晴らしい!
サイトのアドレスも仮想マシンのIPアドレスになっちゃってますが、ドンマイ!
なんとか、Windowsのローカル環境にKUSANAGIをインストールはできましたが、仮想マシンのIPアドレスでのアクセスになってしまっているので、Macの人がやってたみたいにlocalhostでインストールしたかったですね。
一応、今回自分が使った最終的なdocke-compose.ymlの情報です。
version: '2' services: kusanagi-data: container_name: kusanagi-data image: busybox restart: always stdin_open: true tty: true volumes: - /var/lib/mysql - /etc/nginx/conf.d - /etc/httpd/conf.d - /etc/kusanagi.d - /home/kusanagi command: /bin/sh kusanagi-nginx: container_name: kusanagi-nginx image: primestrategy/kusanagi-nginx:1.10.0-1 environment: PROFILE: kusanagi FQDN: localhost WPLANG: ja BCACHE: "off" FCACHE: "off" volumes_from: - kusanagi-data links: - kusanagi-php7:php - kusanagi-mariadb:mysql ports: - "80:80" - "443:443" kusanagi-mariadb: container_name: kusanagi-mariadb image: mariadb:10.0.24 environment: MYSQL_ROOT_PASSWORD: my-secret-pw MYSQL_USER: user MYSQL_PASSWORD: password MYSQL_DATABASE: wordpress volumes_from: - kusanagi-data kusanagi-php7: container_name: kusanagi-php7 image: primestrategy/kusanagi-php7:7.0.6-1 links: - kusanagi-mariadb:mysql volumes_from: - kusanagi-data
FQNDをlocalhostにしてるのに、仮想マシンのIPアドレスでしかアクセスできませんでしたが...
今回もハマりにハマって無駄な時間ばかりかかってしまいましたが、Windowsのローカル環境にKUSANAGIをインストールするとこまでできてよかったです。
インストールが簡単なWordPressでここまで苦戦するのも残念無念ですが...。
今回はこのへんで。