1
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

VultrでKUSANAGI Runs on Dockerが動くまで(その2)

前回のおさらい

前回の記事『VultrでKUSANAGI Runs on Dockerが動くまで(その1)』ではVPC環境であるVultrにKUSANAGI RoDをインストールするところまで確認しました。
今回はWordpressを運用しやすくするため、Dockerコンテナの設定を少し変えていきたいと思います。

動作環境など

  • Ubuntu 20.04
  • docker 19.03.12
  • docker-compose 1.26.2
$ 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ボリュームを永続化
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の標準ログ出力に変更
  2. PHPのファイルアップロード設定を追加
  3. 不要なコンテナ(certbot)を停止

変更点1

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

$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を追加します。

$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

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:

コンテナの再作成

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

$ 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のアクセスログが出力されることを確認します。

$ 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コマンドでコンテナへのファイルコピーができます。

$HOME/content/DocumentRoot/test.php
<?php
    phpinfo()
?>
$ cd $HOME/kusanagi01
$ kusanagi-docker config push
chown: unknown user/group kusanagi:www
ERROR: Failed.

ブラウザでtest.phpにアクセスしてuploads.iniが反映されていることを確認しておきましょう。確認が終わったらtest.phpの削除も忘れずに。
img06.JPG

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
1
Help us understand the problem. What are the problem?