個人的な実験用にDigitalOcean でサーバを借りています。せっかくなので一台のサーバにいろんなソフトウェアをインストールして有効活用したいので以下のような仕組みを考案しました。
構成
traefik というリバースプロキシを使って、リクエストされたURLに応じてサービスのDockerコンテナに振り分けます。さらに、オレオレ証明書ではなく、Let’sEncryptで証明書を無料で取得してSSLも実現します。
以下説明のためのプロジェクトをgithubにあげてあるので取得してください。
$ git clone https://github.com/tumf/traefik-webrouter
Cloudflare DNS
Cloudflare のDNSは無料で使える上に、UIも使いやすいのでおすすめです。ドメインレジストラの設定で、CloudflareにDNSを移管します。LetsEncrypt の証明書発行時にCloudFlareのAPIキーが必要ですので発行をしておきます。 Cloudflareのダッシュボードの右下にGet your API token と言うリンクがありますのでここから
APIキーのパミッションを設定できるので、ZONE.DNS EDITを設定します。
発行したAPIキーは、.env
の中に書いておきます。
CLOUDFLARE_DNS_API_TOKEN=トークンをここにペースト
traefikの設定
traefik.yml
内部のemailを修正します。
|
|
ネットワークの作成
Dockern内部でtraefikからコンテナへリクエストを振り分けるネットワークをfront
という名前で作成します。
$ docker create network front
traefikの起動
以下のようにしてtraefikを起動します。
$ docker-compose up -d
サービスを追加する
ここまで出来たらあとはメモリの上限までサービスを増やせます。例としてwhoami
と言うサービスを作ってみます。https://whoami.example.com
にアクセスすることでwhoami
を返答します。
traefikは各コンテナに振られているlabel
をみてルーティングを決定します。サービスを増やすにあたって、traefikの設定を変えたり、再起動する必要がありません。便利でしょ?!