このサイトの構成 on Google Compute Engine + Docker


現在の構成図

現在は下図のようになっています。

構成の説明

  • マルチドメインのサイトにしたかったので、リバースプロキシを立てました。
  • MySQLはいくつかのコンテナから使いたかったので、独立したコンテナを1つ作りました。(インターネット上でよく説明されているDockerのWordpressでは、専用のMySQLをWordpressコンテナ内に持つ構成となっていると思います。)

具体的な構成

役割コンテナイメージ
リバースプロキシ・jwilder/nginx-proxy
・nginxproxy/acme-companion
※acme-companionは、Let’s EncryptでSSL化するためのイメージです。
beautiful-moon.tokyo(このサイト)・wordpress
archives(静的HTML)・httpd
mysql・mysql
・phpmyadmin

ハマったポイント

WordPressのDBを外部のMySQLに指定するやり方が分からない

docker-compose.ymlのenvironmentの部分に下記を指定すればOKです。

WORDPRESS_DB_HOST: (db_host:3306)
WORDPRESS_DB_USER: (user)
WORDPRESS_DB_PASSWORD: (password)
WORDPRESS_DB_NAME: (wordpress_db)

※( )内の値はサンプルなので、自分の環境の値に書き換えて下さい。
 db_hostは、mysqlコンテナのdocker-compose.ymlにcontainer_nameを指定しておくとその値を指定するだけで良くなるので便利。

コンテナ間通信の設定が分からない

WordPressとMySQLの通信ができなくてハマりました。

2つのことをやればOKです。

  • ネットワークの作成
$ sudo docker network create mynetwork

※mynetworkの部分は好きな名前を付けて下さい。

  • 各コンテナをネットワークへ所属させる
    docker-compose.ymlの最後に下記を追記します。
networks:    
  default:
    name: mynetwork

マルチドメインのやり方が分からない

リバースプロキシを立てたものの、マルチドメインを具体的にどう実現するか分からずにハマりました。公式ドキュメントを読めばすぐに分かりました。

リバースプロキシの後ろに配置されるコンテナのdocker-compose.ymlのenvironmentに下記を指定すればOKです。

VIRTUAL_HOST: (example.com)
LETSENCRYPT_HOST: (example.com)
LETSENCRYPT_EMAIL: (example@example.com)

※( )内の値はサンプルなので、自分の環境の値に書き換えて下さい。

以上です。


コメントを残す

メールアドレスが公開されることはありません。

4 × four =

%d人のブロガーが「いいね」をつけました。