初投稿です。
今さら需要があるのかは謎ですが、docker-compose一発でHTTPSなWordPressを立ち上げたいと思ったら自分の環境でベストっぽいのが見当たらなかったので書いてみました。
docker初心者なので問題あれば指摘いただけると幸いです。
ざっくり説明
WordPressの前にリバースプロキシ(nginx-proxy)を置いてSSL化。
Virtual Hostで切ってやればホスト名でアクセス先を制御できるので、複数のサービスをぶら下げることもできる。
letsencrypt-nginx-proxy-companionはLet's Encryptの証明書を取得してくれて、しかも1時間に1回自動で確認して必要であれば更新してくれる。
神イメージたちに感謝。
前提
- 80/443 portにインターネット側からアクセス可能。(Let's Encryptでhttp-01チャレンジが必要なので80も必須)
- 使うドメインが動かす環境に名前解決ができる状態になっている
- docker/docker-composeが使える
実行例
###サンプルファイル
DBのパスワードとかドメイン名とかは自分の環境に応じてお好きにどうぞ。
基本これで動くはず。/home/webは作らないとだめかも。
ファイル永続化の場所が気に入らないなら変えてどうぞ。
version: '2'
services:
db:
image: mysql:5.7
restart: always
volumes:
- /home/web/db:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: #######
MYSQL_DATABASE: #######
MYSQL_USER: #######
MYSQL_PASSWORD: #######
wordpress:
depends_on:
- db
image: wordpress:latest
restart: always
volumes:
- /home/web/wordpress:/var/www/html
links:
- db
expose:
- 80
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: #######
WORDPRESS_DB_PASSWORD: #######
VIRTUAL_HOST: test1.example.com
LETSENCRYPT_HOST: test1.example.com
LETSENCRYPT_EMAIL: test1@example.com
nginx-proxy:
image: jwilder/nginx-proxy:latest
restart: always
ports:
- 80:80
- 443:443
volumes:
- /home/web/certs:/etc/nginx/certs:ro
- /home/web/wordpress/htpasswd:/etc/nginx/htpasswd
- /etc/nginx/vhost.d
- /usr/share/nginx/html
- /var/run/docker.sock:/tmp/docker.sock:ro
letsencrypt:
image: jrcs/letsencrypt-nginx-proxy-companion:latest
restart: always
volumes:
- /home/web/certs:/etc/nginx/certs:rw
- /var/run/docker.sock:/var/run/docker.sock:ro
volumes_from:
- nginx-proxy
###起動
docker-compose up -d
#その他Tips
###他のOSSやMyAppをぶら下げたい
wordpress:の項目と同じように書いて
- VIRTUAL_HOST
- LETSENCRYPT_HOST
を書き換えればOK。
###docker-compose.ymlのファイルを分けたい
プロキシとアプリでdocer-compose.ymlファイルを分けたい場合などは、ネットワークを共有する必要があるので
取りあえずネットワーク名(今回はshare)を指定して作成。
docker network create --driver bridge share
各ファイル最下あたりに↓を記述してネットワーク指定してやればOK。
networks:
default:
external:
name: share
###ドメインも固定IPもないんだが?
無料ドメイン+DDNSでいいと思うよ。
###docker楽しい
ほんまにね。