h2o で docker containers に reverse proxy しつつ Let's Encrypt で TLS 化も自動で行うすごいヤツつくった

読了まで:約1分


※ タイトルにはそれなりの誇張が含まれています。


ここ 2, 3 日前から、微妙に作業してボチボチ作ってたんですが、この度、

Docker Container に h2o 経由で reverse proxy しつつ Let's Encrypt を使って TLS 化も行なう

と言うシロモノを、今日の朝頃に Github に公開致しました。

それがこちらになります:

なお、使い方に関しては、ザックリと README.md に書いたんですが、そこから引用すると、おおよその使い方はこんな感じになります:

# clone this repository
$ git clone https://github.com/nyarla/h2o-proxy-letsencrypt.git
$ cd h2o-proxy-letsencrypt
# build container (replace your EMAIL address for letsencrypt account)
$ make [email protected] AGREEMENT=yes build
# run container or enter the built container (for debug)
$ make run
$ make debug
# stop h2o-proxy-letsencrypt container
$ make stop
# run any container for you'd like to proxies by h2o-proxy-letsencrypt
# for example (witn golang)
# golang server code
$ cat main.go
package main
import (
"net/http"
)
func main() {
http.Handle(`/`, http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) {
w.Header().Set(`Content-Type`, `text/plain; charset=utf-8`)
w.WriteHeader(http.StatusOK)
w.Write([]byte("hello, world!\n"))
}))
http.ListenAndServe(`:9000`, nil)
}
# you should replace your own $DOMAIN.
$ sudo docker run -e VIRTUAL_HOST=$DOMAIN -e VIRTUAL_PORT=9000 -d -v `pwd`:/data/:ro --name golang-example -p 9000 golang:1.5 go-wrapper run run /data/main.go

まあ、Makefile で指定している細かい docker の引数とかについては、ソースを見た方が早いと思われます:


ちなみに今回僕が作ったシロモノ、別に僕が全部フルスクラッチで作ったワケでもなく、ベースのアイディアというか、元の実装として、 id:zchee さんが作られた、

と言う、

Docker containers に対し、 h2o で動的にリバースプロキシする

というツールを 非常に参考 にして作られました。なお上記の h2o-proxyは、

を参考にして作られているようです。


そしてさらに言うと、元々の h2o-proxy-letsencrypt は id:zchee さんの公開されている Docker image である、

を元に作ってたんですが、途中で、

なんか [[Let's Encrypt]] の云々も [[コンテナ]] 内に綴じ込んで、色々と自動化したいぞい!

という、我欲が出てですね、最終的には、

Let's Encrypt が公開している Docker image をベースに、 zchee/docker-h2ozchee/h2o-proxy 相当のコトをしつつ + α する

という、車輪の再開発を含む実装となりました。

まあ、とは言え設定ファイルとか一部のファイルはまるっとコピp……じゃない、MIT-license の元に再利用させて頂いているので、まあ半分ぐらい (かな?) は大本の h2o-proxydocker-h2o からの派生コードですけども。はい。


というコトで今日の朝公開したブツについては以上です。

まー多分、ドキュメントに過不足が有るだろうし、また一部のコードとかもあんまりイケてないっぽい感じがする部分も有り、Proof of Concept で止まってる感も有り、って感じで、その辺りについて実際に作り込む前に力尽きたので、誰か fork するなりして自由に改造してやってください。

なお、本日紹介した、

は、 [[MIT-license]] で提供しておりますので、ライセンス周りも (多分) 安心して使えるかと思います。


というコトで今回は以上です、はい。

にゃるら(カラクリスタ)

『輝かしい青春』なんて失かった人。
次に備えて待機中。

今は趣味でプログラミングをして
生活しています。