最近、サークル(?)でWordPressを作った物の紹介に使おうぜと提案があったので作った際の覚え書きです。
とりあえずdocker-composeでWordPressを建てます。
version: '2'
services:
db:
image: mysql:5.7
volumes:
- /home/core/wordpress/data/db:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: wordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
wordpress:
depends_on:
- db
image: wordpress:latest
volumes:
- /home/core/wordpress/wp-content:/var/www/html/wp-content
links:
- db
ports:
- 80:80
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_PASSWORD: wordpress
良い感じのフォルダに用意してフォルダ内から docker-compose up -d
よし、建った。やったぜ。
ですが、これだけだとhttpのみでのアクセスしかできない…。httpsでアクセスしたくない?したい。
最近はhttpsで接続できないとGoogleさんの検索結果にも影響するらしいので断然しておきたい。
のでSSL対応をDockerらしくします。使用しているOSもcoreosなのでSSL対応用のコンテナを立てます。
最初はイメージを作ろうかとしたのですがこの辺りは本業でやっている訳でもなく、いつもはゲームを作っているのでgithubやらdockerhubで強い人が作ったイメージを使う事にしました。
「JrCs/docker-letsencrypt-nginx-proxy-companion」
このイメージは簡単に言うとDocker.sockを監視してホスト名とメールアドレスからLet's Encryptを使用してSSL証明書を取ってきてくれる感じの奴です。
しかも更新作業も自動でやってくれます。なんと素晴らしい。
本当ならこれを良い感じに設定すれば終わりですが、他のコンテナが増えた際に対応するのが面倒なのでもう一つイメージを追加します。
「jwilder/nginx-proxy」
このイメージも簡単に言うとDocker.sockを監視して、指定されたパラメータが入っているコンテナへ自動で接続してくれるものです。中身はNginxです。フロント用にしておくことで他のバック用のコンテナにbasic認証とかが簡単にかけられます。あと、SSLのリダイレクトも自動でする(?)
そして、この二つを追加してSSLの対応を行います。
version: '2'
services:
db:
image: mysql:5.7
volumes:
- /home/core/wordpress/data/db:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: wordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
wordpress:
depends_on:
- db
image: wordpress:latest
volumes:
- /home/core/wordpress/wp-content:/var/www/html/wp-content
links:
- db
expose:
- 80
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_PASSWORD: wordpress
VIRTUAL_HOST: www.hoge.jp
LETSENCRYPT_HOST: www.hoge.jp
LETSENCRYPT_EMAIL: hoge@mail.com
nginx-proxy:
image: jwilder/nginx-proxy
ports:
- 80:80
- 443:443
volumes:
- /home/core/wordpress/certs:/etc/nginx/certs:ro
- /home/core/wordpress/htpasswd:/etc/nginx/htpasswd
- /etc/nginx/vhost.d
- /usr/share/nginx/html
- /var/run/docker.sock:/tmp/docker.sock:ro
letsencrypt-nginx-proxy-companion:
image: jrcs/letsencrypt-nginx-proxy-companion
volumes:
- /home/core/wordpress/certs:/etc/nginx/certs:rw
- /var/run/docker.sock:/var/run/docker.sock:ro
volumes_from:
- nginx-proxy
networks:
default:
external:
name: ssl-proxy
これで起動してから少し待つとSSL対応完了です。認証書が発行されるのに少しかかります。
VIRTUAL_HOST: www.hoge.jp
LETSENCRYPT_HOST: www.hoge.jp
LETSENCRYPT_EMAIL: hoge@mail.com
上記のパラメータが肝で、これらが良い感じに先程紹介したイメージのコンテナが見つけて自動で接続の設定をしてくれます。
あと、一つ気をつけておかないといけないのがdockerのネットワークが同じでないと見つけて貰えないのでその辺りはきちんと設定しましょう。完全に忘れていてあーだこーだしているうちに土日がなくなります。
web系に疎くても簡単にセキュリティが比較的高い物作れるのがdockerの良いところですよねー。更新もpullすれば良いわけですし。メンテナンスも楽ですなー。