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

#前回のおさらい
前回の記事[『VultrでKUSANAGI Runs on Dockerが動くまで（その1）』](https://qiita.com/chiruparu/items/33a026c6a41a5e651507)ではVPC環境である[Vultr](https://www.vultr.com/?ref=8632241)にKUSANAGI RoDをインストールするところまで確認しました。
今回はWordpressを運用しやすくするため、Dockerコンテナの設定を少し変えていきたいと思います。

#動作環境など

- Ubuntu 20.04
- docker 19.03.12
- docker-compose 1.26.2

```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   
```

#修正前のdocker-compose.yaml
プロビジョニング直後はこんな感じになっています。
【主な特徴】

- それぞれのコンテナでDocumentRoot含む必要なファイル類を/home/kusanagiにマウント
- kusanagiボリュームとdatabaseボリュームを永続化

```yml:docker-compose.yml
version: '3'

networks:
  default:
    driver: bridge
    driver_opts:
      com.docker.network.driver.mtu: 9000

services:
  httpd:
    container_name: kusanagi01_httpd
    image: primestrategy/kusanagi-nginx:1.17.9-r0
    restart: always
    env_file:
      - .kusanagi
      - .kusanagi.httpd
    volumes:
      - kusanagi:/home/kusanagi
      - kusanagi:/etc/letsencrypt
      - kusanagi:/var/www/html/.well-known
    ports:
      - "8080:8080"
      - "8443:8443"
    extra_hosts:
      - "example.com:127.0.0.1"

  certbot:
    container_name: kusanagi01_certbot
    image: certbot/certbot:v1.6.0
    restart: always
    network_mode: "service:httpd"
    env_file:
      - .kusanagi.httpd
    volumes:
      - kusanagi:/var/www/html/.well-known
      - kusanagi:/etc/letsencrypt
    command:
      - --version

## CONFIG
  config:
    container_name: kusanagi01_config
    restart: always
    build:
        context: ./wpcli
    user: "1000:1001"
    env_file:
      - .kusanagi
      - .kusanagi.wp
      - .kusanagi.db
    volumes:
      - database:/var/run/mysqld
      - kusanagi:/home/kusanagi
    command: wp --version

  php:
    container_name: kusanagi01_php
    image: primestrategy/kusanagi-php:7.4.8-r0
    restart: always
    env_file:
      - .kusanagi
      - .kusanagi.php
      - .kusanagi.mail
    network_mode: "service:httpd"
    volumes:
      - database:/var/run/mysqld
      - kusanagi:/home/kusanagi

## MYSQL 
  db:
    container_name: kusanagi01_db
    image: mariadb:10.5.4-focal
    restart: always
    user: "999:999"
    env_file:
      - .kusanagi.mysql
    network_mode: "service:httpd"
    volumes:
      - database:/var/run/mysqld
      - database:/var/lib/mysql
 
## FTPD
  ftp:
    container_name: kusanagi01_ftp
    image: primestrategy/kusanagi-ftpd:1.0.2-r1
    restart: always
    network_mode: "service:httpd"
    env_file:
      - .kusanagi
      - .kusanagi.wp
    volumes:
      - kusanagi:/home/kusanagi


volumes:
  kusanagi:
  database:
```


#今回の変更点
以下の点を変更します。

1. nginxのログ出力をDockerの標準ログ出力に変更
- PHPのファイルアップロード設定を追加
- 不要なコンテナ（certbot）を停止

##変更点1
nginxのログ出力をDockerの標準ログ出力に変更します。
nginxフォルダの中にnginx.confファイルを作成しhttpdコンテナのnginx.confを書き換えます。nginx.confの変更部分のみ記載しておきます。

```nginx:$HOME/kusanagi01/nginx/nginx.conf
#error_log /var/log/nginx/error.log warn;
error_log /dev/stderr warn;

    #access_log /var/log/nginx/access.log  main;
    access_log /dev/stdout  main;
```

##変更点2
デフォルトだと2MB以上のファイルアップロードができないのでPHPのファイルアップロード設定を追加します。
phpフォルダの中にuploads.iniファイルを作成しphpコンテナにuploads.iniを追加します。

```ini:$HOME/kusanagi01/php/uploads.ini
file_uploads = On
memory_limit = 256M
upload_max_filesize = 64M
post_max_size = 64M
max_execution_time = 600
```


以下のようなフォルダ構成になります。

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

##変更点3
certbotコンテナが実験中で使われていないので起動しないようにします。
こちらはdocker-compose.ymlファイルで該当箇所をコメントアウトしてしまえばOKです。

#修正後のdocker-compose.yml

```yml:docker-compose.yml
version: '3'

networks:
  default:
    driver: bridge
    driver_opts:
      com.docker.network.driver.mtu: 9000

services:
  httpd:
    container_name: kusanagi01_httpd
    image: primestrategy/kusanagi-nginx:1.17.9-r0
    restart: always
    env_file:
      - .kusanagi
      - .kusanagi.httpd
    volumes:
      - kusanagi:/home/kusanagi
      #- kusanagi:/etc/letsencrypt
      - kusanagi:/var/www/html/.well-known
      - ./nginx/nginx.conf:/etc/nginx/nginx.conf                    #※追加
    ports:
      - "8080:8080"
      - "8443:8443"
    extra_hosts:
      - "example.com:127.0.0.1"

        #certbot:
        #container_name: kusanagi01_certbot
        #image: certbot/certbot:v1.6.0
        #restart: always
        #network_mode: "service:httpd"
        #env_file:
        #- .kusanagi.httpd
        #volumes:
        #- kusanagi:/var/www/html/.well-known
        #- kusanagi:/etc/letsencrypt
        #command:
        #- --version

## CONFIG
  config:
    container_name: kusanagi01_config
    restart: always
    build:
        context: ./wpcli
    user: "1000:1001"
    env_file:
      - .kusanagi
      - .kusanagi.wp
      - .kusanagi.db
    volumes:
      - database:/var/run/mysqld
      - kusanagi:/home/kusanagi
    command: wp --version

  php:
    container_name: kusanagi01_php
    image: primestrategy/kusanagi-php:7.4.8-r0
    restart: always
    env_file:
      - .kusanagi
      - .kusanagi.php
      - .kusanagi.mail
    network_mode: "service:httpd"
    volumes:
      - database:/var/run/mysqld
      - kusanagi:/home/kusanagi
      - ./php/uploads.ini:/usr/local/etc/php/conf.d/uploads.ini     #※追加

## MYSQL 
  db:
    container_name: kusanagi01_db
    image: mariadb:10.5.4-focal
    restart: always
    user: "999:999"
    env_file:
      - .kusanagi.mysql
    network_mode: "service:httpd"
    volumes:
      - database:/var/run/mysqld
      - database:/var/lib/mysql
 
## FTPD
  ftp:
    container_name: kusanagi01_ftp
    image: primestrategy/kusanagi-ftpd:1.0.2-r1
    restart: always
    network_mode: "service:httpd"
    env_file:
      - .kusanagi
      - .kusanagi.wp
    volumes:
      - kusanagi:/home/kusanagi


volumes:
  kusanagi:
  database:

```

#コンテナの再作成
構成を変更したのでコンテナを作り直します。エラー無く起動することを確認します。

```shell
$ docker-compose down
Stopping kusanagi01_ftp     ... done
Stopping kusanagi01_config  ... done
Stopping kusanagi01_php     ... done
Stopping kusanagi01_db      ... done
Stopping kusanagi01_certbot ... done
Stopping kusanagi01_httpd   ... done
Removing kusanagi01_ftp     ... done
Removing kusanagi01_config  ... done
Removing kusanagi01_php     ... done
Removing kusanagi01_db      ... done
Removing kusanagi01_certbot ... done
Removing kusanagi01_httpd   ... done

$ docker-compose up -d
Creating network "kusanagi01_default" with driver "bridge"
Creating kusanagi01_httpd  ... done
Creating kusanagi01_config ... done
Creating kusanagi01_php     ... done
Creating kusanagi01_ftp     ... done
Creating kusanagi01_db      ... done

```

#動作確認
変更が反映されているか確認していきます。

##nginxのログ出力先変更
以下のコマンドでDockerのログを表示させWebのアクセスログが出力されることを確認します。

```shell
$ docker logs kusanagi01_httpd -f
0.898 BYPASS BYPASS 172.19.0.4 - - [05/Aug/2020:06:10:36 +0000] "GET / HTTP/1.0" 200 7902 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36 Edg/84.0.522.52" "xxx.xxx.xxx.xxx"

```

##PHPのファイルアップロード設定
phpinfoファイルを作成しコンテナにコピーし動作確認します。コンテナにシェルアクセスして作成してもよいですけどkusanagi-dockerコマンドでコンテナへのファイルコピーができます。

```php:$HOME/content/DocumentRoot/test.php
<?php
    phpinfo()
?>
```

```shell
$ cd $HOME/kusanagi01
$ kusanagi-docker config push
chown: unknown user/group kusanagi:www
ERROR: Failed.
```

ブラウザでtest.phpにアクセスしてuploads.iniが反映されていることを確認しておきましょう。確認が終わったらtest.phpの削除も忘れずに。
![img06.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680666/9ab684bb-6df9-8a63-7b60-3e22b9d43709.jpeg)

VultrでKUSANAGI Runs on Dockerが動くまで（その3）に続きます。