カラクリスタ

「輝かしい青春」なんて失かった人のブログ

h2o-proxy-letsencrypt を作り直した

という話。


今回手直ししたモノ

で、これは何か

https://github.com/nyarla/h2o-proxy-letsencrypth2o-proxy-letsencrypt

は、僕が以前に作って、微妙にクリーンではないコードのまま放置していたソフトウェアの一つで、実装の中身としては、

docker container への reverse proxy を h2o でしつつ、 さらに Let's Encrypt で TLS 化する

という代物です。

それで、これの実装には元ネタが有って、一番最初 (だと思われる) 元ネタは、

docker container への reverse proxy を nginx で行なう

という

jwilder/nginx-proxy

で、これの h2o 版として実装された、

zchee/h2o-proxy

が、 h2o-proxy-letsencrypt の元ネタです。まあ、h2o-proxy-letsencrypt はそれの発展形って感じですね。はい。

今回の改善点

んで、話は本題になるんですが、今回 (というか昨日かその前ぐらいに) h2o-proxy-letsencrypt に対し行なった修正点は、主に、

  1. 元のなるコンテナのベースの変更

  2. 公式で紹介されている lkwg82/h2o-http2-server

  3. Let's Encrypt の証明書取得 or 更新スクリプトの修正

  4. これが一番カオスってて、かつコードもスッキリとしていなかった

  5. Let's Encrypt のクライアントを、オフィシャルから bash ベースのモノに変更

  6. lukas2511/letsencrypt.sh + kappataumu/letsencrypt-cloudflare-hook

という感じです。

また、今回の変更に際し、全面的に書き直した Dockerfile の一部のコードを、

から引用しており、また、その Dockerfile が GPLv3 だったため、 今回作り直した ファイルの内、 Dockerfile のみが GPLv3 に成っています。

あと、以前の h2o-proxy-letsencrypthttp-01 の challenge を使う様になっていたのですが、 それだと微妙にテストし辛いという事もあって、今回からは dns-01 challenge を CloudFlare で行なう様になっています。

もっとも、この辺りに関しては、h2o-proxy-letsencrypt が内部的に使っている Let's Encrypt のクライントである、

lukas2511/letsencrypt.sh

の仕組みの中で自由に変更が可能なので、dns-01 challenge を行なう dns provider を変更したい、 という場合には、そちらを参照等すると良いかと思います。

ただ、今回の h2o-proxy-letsencryptDockerfile は cloudflare 向けの hook script を使う前提と成っているので、 その辺りについては Dockerfile に修正を加える必要が有ります。

以上

まあ良かったら良いので、もし使う機会等があれば試してみてください。 という事で今回の話は以上です。終ります。