DockerでKUSANAGI環境を見直し、WordPress稼働

docker, Wordpress, ブログ・アフィリエイト, プログラミング

Docker上でKUSANAGIを稼働させて、Wordpress

新規でKUSANAGIを立て直そうと思ってDockerfileを書きました。今度はvolumesを出せるように設定してみました。

volumes:
      - ./vol/mysql:/var/lib/mysql
      - ./vol/etc-nginx:/etc/nginx/conf.d
      - ./vol/etc-httpd:/etc/httpd/conf.d
      - ./vol/etc-kusanagi:/etc/kusanagi.d
      - ./vol/home-kusanagi:/home/kusanagi
    command: /bin/sh

で・・・

$ docker-compose up

したのですが…「503 Service Temporarily Unavailable」が出てしまう。

解決!

volumes:
      - ./vol/mysql:/var/lib/mysql
      - ./vol/etc-nginx:/etc/nginx/conf.d
      - ./vol/etc-httpd:/etc/httpd/conf.d
      - ./vol/etc-kusanagi:/etc/kusanagi.d
      - ./vol/home-kusanagi//home/kusanagi
    command: /bin/sh

docker-compose.ymlファイルのvolumesで/home/kusanagiを//でくくってしまったため、必要なファイルができなかったのが原因でした。

volフォルダ以下を削除して、docker-compose up し直したらちゃんとブラウザで表示することができました!

ブラウザからアクセス

ちなみにブラウザからはlocalhostに向けたhostsファイルでドメインを入力すると見れるように設定済みです。

【19/09/24追記】

KUSANAGI Run on Dockerでローカル環境を構築する方法をまとめました。

DockerでKUSANAGIを使ってWordPress環境を構築する方法

 

Godios.の動きがおかしい

Dockerの上で、リバースプロキシ動かしてKUSANAGIにテーマを入れたらだめでした。hostsでexmaple.comを127.0.0.1に当てて、リバースプロキシでもexmaple.comを認識させてやっていたのですが、コンテナ内でphpから呼ぶgetimagesizeのドメイン名が解決できずにエラーを吐いていたみたいです。ブラウザから画像のURLを叩けば、当然ホストのhostsがドメインを解決してくれるのですが、コンテナ内だとそれができないみたいです。

起こった症状

こんな感じに getimagesize でエラーはきます。要はhttp://example.com…をgetimagesizeで呼ぼうとしても、名前が解決できずにコケているのです。

version: '2'

services:
  kusanagi-data-example-com:
    container_name: kusanagi-data-example-com
    image: busybox
    restart: always
    stdin_open: true
    tty: true
    volumes:
      - ./vol/mysql:/var/lib/mysql
      - ./vol/etc-nginx:/etc/nginx/conf.d
      - ./vol/etc-httpd:/etc/httpd/conf.d
      - ./vol/etc-kusanagi:/etc/kusanagi.d
      - ./vol/home-kusanagi:/home/kusanagi
    command: /bin/sh

  kusanagi-nginx-example-com:
    container_name: kusanagi-nginx-example-com
    image: primestrategy/kusanagi-nginx:1.10.0-1
    environment:
      VIRTUAL_HOST: example.com
      LETSENCRYPT_HOST: example.com
      LETSENCRYPT_EMAIL: your.real@email.com
      PROFILE: kusanagi
      FQDN: example.com
      WPLANG: ja
      BCACHE: "off"
      FCACHE: "off"
    volumes_from:
      - kusanagi-data-example-com
    links:
      - kusanagi-php7-example-com:php
    ports:
      - "80"
      - "443"

  kusanagi-mariadb-example-com:
    container_name: kusanagi-mariadb-example-com
    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-example-com

  kusanagi-php7-example-com:
    container_name: kusanagi-php7-example-com
    image: primestrategy/kusanagi-php7:7.0.6-1
    links:
      - kusanagi-mariadb-example-com:mysql
    volumes_from:
      - kusanagi-data-example-com

  kusanagi-php5-example-com:
    container_name: kusanagi-php5-example-com
    image: primestrategy/kusanagi-php5:5.6.20-1
    links:
      - kusanagi-mariadb-example-com:mysql
    volumes_from:
      - kusanagi-data-example-com

networks:
  default:
    external:
      name: nginx-proxy_default

ちなみにこれでKUSANAGIを立ち上げました。これの他に、リバースプロキシのdocker-composeが動いています。

dockerでの名前解決

ホストPCのhostsを書き換えて、ドメイン偽装してローカルホストに接続していたのですが、KUSANAGI経由でwordpressを動かした際に画像をうまく取れない現象が発生。これってコンテナ内でドメインがうまく解決されていないのでは?と思って、いろいろいじり始めたのですが…。うまくいかない。

今までうまく言っていたやつをリバースプロキシ外して動かそうとしたのですが、それでも動かず…。

若干詰み気味です。

Dockerの基礎をもう一度学ぼうかな~と思った次第です。

解決手段

example.comが解決できないため、docker-compose.ymlを次のように書き換えます。

version: '2'

services:
  kusanagi-data-example-com:
    container_name: kusanagi-data-example-com
    image: busybox
    restart: always
    stdin_open: true
    tty: true
    volumes:
      - ./vol/mysql:/var/lib/mysql
      - ./vol/etc-nginx:/etc/nginx/conf.d
      - ./vol/etc-httpd:/etc/httpd/conf.d
      - ./vol/etc-kusanagi:/etc/kusanagi.d
      - ./vol/home-kusanagi:/home/kusanagi
    command: /bin/sh

  kusanagi-nginx-example-com:
    container_name: example.com
    image: primestrategy/kusanagi-nginx:1.10.0-1
    environment:
      VIRTUAL_HOST: example.com
      LETSENCRYPT_HOST: example.com
      LETSENCRYPT_EMAIL: your.real@email.com
      PROFILE: kusanagi
      FQDN: example.com
      WPLANG: ja
      BCACHE: "off"
      FCACHE: "off"
    volumes_from:
      - kusanagi-data-example-com
    links:
      - kusanagi-php7-example-com:php
    ports:
      - "80"
      - "443"

  kusanagi-mariadb-example-com:
    container_name: kusanagi-mariadb-example-com
    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-example-com

  kusanagi-php7-example-com:
    container_name: kusanagi-php7-example-com
    image: primestrategy/kusanagi-php7:7.0.6-1
    links:
      - kusanagi-mariadb-example-com:mysql
    volumes_from:
      - kusanagi-data-example-com

  kusanagi-php5-example-com:
    container_name: kusanagi-php5-example-com
    image: primestrategy/kusanagi-php5:5.6.20-1
    links:
      - kusanagi-mariadb-example-com:mysql
    volumes_from:
      - kusanagi-data-example-com

networks:
  default:
    external:
      name: nginx-proxy_default

何をやったかというと、nginxのコンテナ名をドメイン名に変えました。これにより、phpから名前解決を要求した場合にnginxのIPが割当たるため、エラーなくphpから画像を引くことができます。

こんな感じでエラーが消えました!

ドメイン自由に設定できて、ローカルでテストできるのは楽しいですね~

nginx-proxy + KUSANAGI 環境アップデート

nginx-proxyでSSL対応するやつですが、ちょっと更新してみようと思います。KAGOYAでdocker-compose.yml公開されていたので、それベースにちょっと修正していきます。

KAGOYAの設定のほうがスマートな気がしてきた。

docker-compose.ymlでコンテナ名を全部に設定していたけど、コンテナ名を省略することで勝手に命名されるようにすれば汎用性が上がる気がする。

Let’sEncrypt情報

情報がまとまっていてわかりやすいです。

スタイルシートが読み出せない

新設定で立ち上げてみると、スタイルシートが読みだせず、ちょっと不完全な感じになってしまいました。原因がよくわからないため、明日、追加調査をしていきます。

Ubuntuのターミナルを変更

分割等をしたくなったので、ターミナルソフトを変更してみました。

これを参考に、「terminator」をインストールして、設定しました。

Ctrl+Shift+oで上下に端末画面を分割できます。

昨日のエラー原因

javascriptやcssが表示されなかった原因をChromeの開発者ツールでみたところ、そもそもパスがhttpsではられているのが原因ぽかったです。でも、なぜデフォルトでhttpsなのか?

ローカル環境でLet’sEncrypt

DNSがhostsで設定しただけの状態だと、Let’sEncryptがDNSを認証できないため、証明書が発行できません。

400 Bad Request
The plain HTTP request was sent to HTTPS port

こんなエラーが出ていたのですが、原因は出来もしないポート443へのアクセス(HTTPS接続)でこけておりました。ローカル環境ではHTTPSにならないようにポート80接続するように修正しました。

version: '2'

services:
  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

      - ./vol/etc-nginx:/etc/nginx/conf.d
      - ./vol/etc-httpd:/etc/httpd/conf.d
      - ./vol/etc-kusanagi:/etc/kusanagi.d

      - ./data:/home/kusanagi
      - ./uploads.ini:/usr/local/etc/php/conf.d/uploads.ini
    command: /bin/sh

  kusanagi-nginx:
    image: primestrategy/kusanagi-nginx:1.10.0-1
    container_name: example.com
    environment:
      VIRTUAL_HOST: example.com
      LETSENCRYPT_HOST: example.com
      LETSENCRYPT_EMAIL: gogomouse@live.jp
      LETSENCRYPT_TEST: "true"
      PROFILE: example.com
      FQDN: example.com
      WPLANG: ja
      BCACHE: "on"
      FCACHE: "on"
    volumes_from:
      - kusanagi-data
    links:
      - kusanagi-php7:php
      - kusanagi-mariadb:mysql
    ports:
      - "443"
      - "80"
    restart: always
    networks:
      - common_link

  kusanagi-mariadb:
    image: mariadb:10.1.21
    environment:
      MYSQL_ROOT_PASSWORD: p@ssw0rd
      MYSQL_USER: kagokusa
      MYSQL_PASSWORD: p@ssw0rd
      MYSQL_DATABASE: wordpress
    volumes_from:
      - kusanagi-data
    restart: always
    networks:
      - common_link

  kusanagi-php7:
    image: primestrategy/kusanagi-php7:7.0.6-1
    links:
      - kusanagi-mariadb:mysql
    volumes_from:
      - kusanagi-data
    restart: always
    networks:
      - common_link

networks:
  common_link:
    external: true

KAGOYAさんのdocker-compose.ymlを改変して使うことで、画像サイズのアップロードサイズ制限もなく快適に処理することができました。