ローカルでの検証などで、静的なweb系のファイルアクセスをオレオレな証明書で構わないのでHTTPSで行いたいとき、nginxやApacheでやろうとするとダミーのSSL証明書を作成する必要があって若干面倒です。
そんなときはDocker版Caddyの自動HTTPS機能のlocal HTTPSを使えば、Caddyが内蔵しているroot CAを使ってHTTPSを構築できるので、証明書エラーを無視してブラウザのエラーは表示されますが、HTTPSサーバーを簡単に実現できます。
以前まとめたのはインターネット経由前提でLet's Encryptで証明書を使う構成だったので、ローカルの場合についてまとめ。
起動
docker run --rm -d -v $PWD:/srv -p 8443:443 --name web caddy caddy file-server --domain localhost --root /srv --browse
これでローカルで8443/TCPでListenし、カレントディレクトリ($PWD
)にあるファイル群にHTTPSでアクセスできます。
CaddyのDirectoryIndexはちょっとリッチでこんな感じ。
オプション説明
Caddyに対するコマンド・オプションは以下の通り
コマンド/オプション | 説明 |
---|---|
caddy file-server |
Caddyを静的なファイルを返すfile_server として起動 |
--domain localhost |
サーバーのドメインをlocalhost に指定 |
--root /srv |
ルートドキュメントを(コンテナ内の)/srv に指定 |
--browse |
ディレクトリのファイル一覧表示(不要なら付けない) |
Dockerコンテナに対するオプションは以下の通り。
オプション | 説明 |
---|---|
--rm |
終了時に自動でコンテナ削除 |
-d |
バックグラウンド実行 |
-v $PWD:/srv |
docker 実行時のカレントディレクトリをコンテナの/srv にバインド (Caddyのオプションの--root に対応) |
-p 8443:443 |
ホストOSの8443/TCPへのアクセスをコンテナの443/TCPへフォワード |
--name web |
コンテナ名の指定 (停止時のコンテナ名指定用docker stop web ) |
設定ファイルを使う場合
上記のCLIで良ければ不要だけど、何度も実行するならCaddyファイルにしておくと楽。前述のCaddyのオプションをファイルにすると以下の通り。
localhost {
root * /srv
file_server {
browse
}
}
これを使ってデプロイする場合は以下。
(上記のファイルをカレントにCaddyfile
という名前で保存している場合)
docker run --rm -d -v $PWD/Caddyfile:/etc/caddy/Caddyfile -v $PWD:/srv -p 8443:443 --name web caddy
そのほかの細かい設定は、ドキュメントやコンテナ内でcaddy --help
を実行して確認できます。
証明書
こんな感じ。
既存のHTTPサーバーを流用したい場合
すでにHTTPで動いてるサーバーがあってそれを流用しつつ、リバースプロキシ構成でHTTPSアクセスしたいのであればfile_server
でなくreverse_proxy
を使用します。
docker run --rm -d -p 8443:443 --name web caddy caddy reverse-proxy --to <addr>:<port>
インターネット経由でパブリックのドメインを使うパターンは以下参照。