phpサイトの開発でSNS認証が必要になったため、DockerコンテナのSSL化について述べる。
前提
- 開発端末はMac。なので開発環境はDocker for Mac
- docker-composeで開発案件毎にコンテナを用意
- コンテナはWebサーバとDBサーバが基本で必要に応じてキャッシュサーバ
- WebサーバはCentOS7+Apache2+php5.6で独自にイメージを作成
- ローカル環境のみで動作(外部からのアクセスを考慮しない)
- URLはhttp://hoge.localとし、開発端末のhostsファイルに記述
以上から、Let's Encryptは使えないため、オレオレ証明書で行うものとする。
証明書の作成
ローカル環境で使うオレオレ認証局とオレオレ証明書を簡単に作れる mkcert を試した
とか見ると良さげだったので
mkcert
を使用した。
インストールは
$ brew install mkcert
$ brew install nss
で、すんなりできた。
(本当はbrew側の問題で少し苦戦したが。。。)
証明書の作成は
$ mkcert -install
$ mkcert hoge.local
これで、hoge.local.pemとhoge.local-key.pemが作成される
ApacheのSSL設定
ローカルで動けばいいので、今回は簡単に作成。
Listen 443
SSLStrictSNIVHostCheck off
<VirtualHost _default_:443>
DocumentRoot "/var/www/html"
ServerName repo.local:443
ErrorLog logs/ssl_error_log
TransferLog logs/ssl_access_log
LogLevel warn
SSLEngine on
SSLProtocol all -SSLv2
SSLCertificateFile /etc/pki/tls/certs/hoge.local.pem
SSLCertificateKeyFile /etc/pki/tls/certs/hoge.local-key.pem
</VirtualHost>
開発環境構築
いよいよ開発環境構築である。
ディレクトリ構成は下記のようにした。
ROOTDIR/
┝━ SSL #SSL関連ファイル
│ ┝━ ssl.conf
| └━ certs
| ┝━ hoge.local.pem
| └━ hoge.local-key.pem
|
┝━ svr # Webサイトのリソース(中身は省略)
|
└━ docker-compose.yml
docker-compose.ymlは下記のように作成した。
dataHttpLog:
image: busybox
volumes:
- "${DEVELDIR}/HttpLog:/var/log/httpd"
environment:
- DEVELDIR
dataSSL:
image: busybox
volumes:
- ./SSL/certs:/etc/pki/tls/certs
httpsvr:
image: phpsvrpdo:3.0 #<- 独自で構築したwebサーバイメージ名
hostname: 'hoge.local'
volumes_from:
- dataHttpLog
- dataSSL
volumes:
- "./svr:/var/www/html"
- ./SSL/ssl.conf:/etc/httpd/conf.d/ssl.conf
ports:
- "80:80"
- "443:443"
hostnameの指定はなくても動作したかも知れないが念のため。
以上で、docker-compose up -dでコンテナを立ち上げ
https://hoge.local/
でアクセス出来た。
これでSNS側のコールバックの設定に
https://hoge.local/**
を追加しておけば、ローカルでSNS連携の開発・テストが可能になる。