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-h2o zchee/h2o-proxy 相当のコトをしつつ + α する

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

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


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

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

お、本日紹介した、

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


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

アバターアイコン兼ロゴ

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

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

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