VultrでKUSANAGI Runs on Dockerが動くまで（その1）

#前回のおさらい
前回の記事[『VultrにDocker環境を作成する』](https://qiita.com/chiruparu/items/9a20f77995ae4c8f3af0)でDockerとDocker-Composeの環境を作りました。今回はDocker上で超高速Wordpress環境であるKUSANAGIを動かしてみたいと思います。

#はじめに
VPC環境で[KUSANAGI Runs on Docker(以下KUSANAGI RoD)](https://kusanagi.tokyo/cloud/kusanagi-runs-on-docker/)を動かします。使用するVPCは[Vultr](https://www.vultr.com/?ref=8632241)ですが他のVPCでもきっと大丈夫です。[Vultr](https://www.vultr.com/?ref=8632241)の初期セットアップは前回の記事[『VultrにDocker環境を作成する』](https://qiita.com/chiruparu/items/9a20f77995ae4c8f3af0)を参照してください。

#はまった点
[KUSANAGI RoD](https://kusanagi.tokyo/cloud/kusanagi-runs-on-docker/)のインストール方法をググると[KAGOYAの記事『第6回 KUSANAGI Runs on Docker を使ってみた』](https://www.kagoya.jp/cloud/vps/tutorial/06.html)が出てくるのですが、KUSANAGI RoDのDockerコンテナを新しくしようとするとエラーでまくりで動きません（泣）

公式サイト眺めながらまともに動くようになるまでを記事にしました。
https://kusanagi.tokyo/cloud/kusanagi-runs-on-docker/

#動作環境など
- Ubuntu 20.04
- docker 19.03.12
- docker-compose 1.26.2

DockerとDocker-Composeのインストールはこちらの記事[『VultrにDocker環境を作成する』](https://qiita.com/chiruparu/items/9a20f77995ae4c8f3af0)を参照してください。

```shell
$ cat /etc/os-release 
NAME="Ubuntu"
VERSION="20.04 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04 LTS"
VERSION_ID="20.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=focal
UBUNTU_CODENAME=focal

$ docker --version
Docker version 19.03.12, build 48a66213fe

$ docker-compose --version
docker-compose version 1.26.2, build eefe0d31
```

#想定している構成
複数のドメインでWordpressを運用したいのでHTTP/HTTPSの振り分けにリバプロとしてDockerコンテナの[https-portal](https://github.com/SteveLTN/https-portal)を使います。
[https-portal](https://github.com/SteveLTN/https-portal)を使うと簡単に複数サイトの振り分け＋Let's Encrypt環境を作ることができますしお勧めです。

```
/home
  └＄USER
        ├https-portal ← リバプロサーバー（マルチサイト＆ Let’s Encrypt対応）
        │ └docker-compose.yml
        │ 
        ├kusanagi01 ← KUSANAGI Runs on Docker（WordPressサイト1つ目）
        │ └docker-compose.yml
        │
        └kusanagi02 ← KUSANAGI Runs on Docker（WordPressサイト2つ目）
          └docker-compose.yml
```


#KUSANAGI RoDのインストール
KUSANAGI RoDのインストール前に[KUSANAGIの公式サイト](https://kusanagi.tokyo/cloud/kusanagi-runs-on-docker/)を眺めておきましょう。
以下のようにコマンドを実行すると、KUSANAGI RoDが$HOME/.kusanagi 以下にインストールされます。

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

インストールが終わったらkusanagiコマンドを実行できるよう.bashrcの最後にPATHを追加しておきます。
kusanagiというアカウントの場合は以下のような感じです。

```bash:$HOME/.bashrc
PATH=/home/kusanagi/.kusanagi/bin:$PATH
```

#KUSANAGI RoDのプロビジョニング
早速プロビジョニング（KUSANAGI RoDの環境を作成）してみます。＄HOMEディレクトリでkusanagi-dockerコマンドを実行します。最低限、以下の引数だけは指定しておいたほうがあとあと楽です。

|オプション|環境変数|説明|
|:--|:--|:--|
|--fqdn(必須)|FQDN|作成するサイトのドメイン名を指定します|
|--wp|（なし）|WordPressの環境を構築します|
|--wplang|ja|WordPressの言語を一つだけ指定します|
|--admin-user|ユーザ名|WordPressの管理者ユーザ名を指定します|
|--admin-pass|パスワード|WordPressの管理者パスワードを指定します|
|--admin-email|メールアドレス|WordPressの管理者メールアドレスを指定します|
|--wp-title|タイトル|WordPressのタイトルを指定します|
|--kusanagi-pass|KUSANAGIパスワード|WordPressでの更新で使用するkusanagiユーザのパスワードを指定します|
|--dbname|DB名|接続するDB名を指定します|
|--dbuser|DBユーザ名|接続するDBユーザ名を指定します|
|--dbpass|DBパスワード|接続するDBパスワードを指定します|
|--http-port|HTTPポート番号|ホストにポートフォワードするhttpポート番号を指定します|
|--tls-port|HTTPSポート番号|ホストにポートフォワードするhttpsポート番号を指定します|


```shell

$ 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=8080 --tls-port=8443 --fqdn ドメイン名 インストールフォルダ名

Creating network "kusanagi01_default" with driver "bridge"
Creating volume "kusanagi01_kusanagi" with default driver
Creating volume "kusanagi01_database" with default driver
Creating kusanagi01_config ... done
Creating kusanagi01_httpd  ... done
Creating kusanagi01_db      ... done
Creating kusanagi01_ftp     ... done
Creating kusanagi01_certbot ... done
Creating kusanagi01_php     ... done
 Waiting MySQL init process..
Provision WordPress
Downloading WordPress 5.4.2 (en_US)...
Warning: Failed to create directory '/.wp-cli/cache/': mkdir(): Permission denied.
md5 hash verified: efcd1980afe80f873dd6b51ef622bf87
Success: WordPress downloaded.
Success: Generated 'wp-config.php' file.
sendmail: can't connect to remote host (127.0.0.1): Connection refused
Success: WordPress installed successfully.
Warning: Failed to create directory '/.wp-cli/cache/': mkdir(): Permission denied.
Downloading translation from https://downloads.wordpress.org/translation/core/5.4.2/ja.zip...
Unpacking the update...
Installing the latest version...
Removing the old version of the translation...
Translation updated successfully.
Language 'ja' installed.
Success: Installed 1 of 1 languages.
Warning: Failed to create directory '/.wp-cli/cache/': mkdir(): Permission denied.
Downloading translation from https://downloads.wordpress.org/translation/plugin/akismet/4.1.5/ja.zip...
Unpacking the update...
Installing the latest version...
Removing the old version of the translation...
Translation updated successfully.
Language 'ja' for 'Akismet Anti-Spam' installed.
Warning: Language 'ja' not available.
Language 'ja' for 'Hello Dolly' not installed.
+---------+--------+---------------+
| name    | locale | status        |
+---------+--------+---------------+
| akismet | ja     | installed     |
| hello   | ja     | not available |
+---------+--------+---------------+
Success: Installed 1 of 2 languages (1 skipped).
Warning: Failed to create directory '/.wp-cli/cache/': mkdir(): Permission denied.
Downloading translation from https://downloads.wordpress.org/translation/theme/twentynineteen/1.5/ja.zip...
Unpacking the update...
Installing the latest version...
Removing the old version of the translation...
Translation updated successfully.
Language 'ja' for 'Twenty Nineteen' installed.
Downloading translation from https://downloads.wordpress.org/translation/theme/twentyseventeen/2.3/ja.zip...
Unpacking the update...
Installing the latest version...
Removing the old version of the translation...
Translation updated successfully.
Language 'ja' for 'Twenty Seventeen' installed.
Downloading translation from https://downloads.wordpress.org/translation/theme/twentytwenty/1.2/ja.zip...
Unpacking the update...
Installing the latest version...
Removing the old version of the translation...
Translation updated successfully.
Language 'ja' for 'Twenty Twenty' installed.
+-----------------+--------+-----------+
| name            | locale | status    |
+-----------------+--------+-----------+
| twentynineteen  | ja     | installed |
| twentyseventeen | ja     | installed |
| twentytwenty    | ja     | installed |
+-----------------+--------+-----------+
Success: Installed 3 of 3 languages.
Success: Language activated.

INFO: Done.


$ ls -al $HOME/kusanagi01
total 64
drwxrwxr-x 7 kusanagi kusanagi 4096 Jul 26 17:52 .
drwxr-xr-x 8 kusanagi kusanagi 4096 Jul 24 00:45 ..
drwxr-xr-x 6 kusanagi kusanagi 4096 Jul 18 22:56 contents
-rw-rw-r-- 1 kusanagi kusanagi 2273 Jul 24 00:41 docker-compose.yml
drwxrwxr-x 8 kusanagi kusanagi 4096 Jul 18 22:56 .git
-rw-rw-r-- 1 kusanagi kusanagi   14 Jul 18 22:56 .gitignore
-rw-rw-r-- 1 kusanagi kusanagi  258 Jul 24 00:13 .kusanagi
-rw-rw-r-- 1 kusanagi kusanagi  100 Jul 18 22:54 .kusanagi.db
-rw-rw-r-- 1 kusanagi kusanagi  572 Jul 18 22:56 .kusanagi.httpd
-rw-rw-r-- 1 kusanagi kusanagi   46 Jul 18 22:54 .kusanagi.mail
-rw-rw-r-- 1 kusanagi kusanagi  259 Jul 18 22:54 .kusanagi.mysql
-rw-rw-r-- 1 kusanagi kusanagi  143 Jul 18 22:54 .kusanagi.php
-rw-rw-r-- 1 kusanagi kusanagi  194 Jul 18 22:54 .kusanagi.wp
drwxrwxr-x 2 kusanagi kusanagi 4096 Jul 18 22:54 wpcli
```

Dockerコンテナが5個起動してることが確認できます。

```shell
$ docker-compose ps
       Name                     Command                 State                          Ports                     
-----------------------------------------------------------------------------------------------------------------
kusanagi01_certbot   certbot --version                Restarting                                                 
kusanagi01_config    docker-entrypoint.sh wp -- ...   Restarting                                                 
kusanagi01_db        docker-entrypoint.sh mysqld      Up                                                         
kusanagi01_ftp       /bin/sh -c /docker-entrypo ...   Up                                                         
kusanagi01_httpd     /docker-entrypoint.sh /usr ...   Up           0.0.0.0:8080->8080/tcp, 0.0.0.0:8443->8443/tcp
kusanagi01_php       /usr/local/bin/docker-entr ...   Up   

```

上記手順ではWordpressのポートを意図的に80/TCP、443/TCPから変更しています。
ブラウザでWordpressのログイン画面にアクセスできたらOKです。
http://FQDN:8080/wp-login.php
https://FQDN:8443/wp-login.php

長くなってきたのでいったんおしまい。
[『VultrでKUSANAGI Runs on Dockerが動くまで（その2）』](https://qiita.com/chiruparu/items/26dc623a089a0eac4aa7)に続きます。