読者です 読者をやめる 読者になる 読者になる

カラクリサイクル

『輝かしい青春』なんて無かった人の雑記

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

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


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

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

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

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

github.com

なお、使い方に関しては、ザックリと 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=account@example.com 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 さんが作られた、

github.com

と言う、

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

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

github.com

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


そしてさらに言うと、元々の h2o-proxy-letsencryptid: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 するなりして自由に改造してやってください。

なお、本日紹介した、

github.com

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


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