docker-composeを使って複数サービスをSSLで手軽にホスティングする

やりたいこと

仮に example.com というドメインを取得していたとする。そのドメインに対してサブドメインを発行して、 hoge.example.com というドメインhoge サービスを配信。また fuga.example.com というサブドメインを発行し、fuga サービスを配信。

このご時世なので、各サブドメインに対してSSL証明書も発行して、SSLで配信できるようにしたい、Let's Encrypt で発行するにしても、面倒なので自動で発行でできるようにしたい。

使うもの

上記の要件を満たせるものが、下記だ。

jwilder/nginx-proxy

github.com

これはコンテナと同じネットワークに存在するコンテナを監視し環境変数からドメインを取得しそのドメインにプロキシしてくれるものだ。 ベース技術としてdocker-genという設定ファイルをテンプレートから生成してくれるものを使っている。

※上記イメージはホストの/var/run/docker.sock をマウントして使用するため、不正利用の危険がありえます。使用する際には自己判断のもと自己責任でお願いします。

jrcs/letsencrypt-nginx-proxy-companion

github.com

こちらは、上記の nginx-proxy と連携して Let's Encrypt からSSL証明書を発行してくれるものだ。

また、環境は以下の通りだ。

$ docker version
Client:
 Version:      18.05.0-ce
 API version:  1.37
 Go version:   go1.9.5
 Git commit:   f150324
 Built:        Wed May  9 22:14:54 2018
 OS/Arch:      linux/amd64
 Experimental: false
 Orchestrator: swarm

Server:
 Engine:
  Version:      18.05.0-ce
  API version:  1.37 (minimum version 1.12)
  Go version:   go1.9.5
  Git commit:   f150324
  Built:        Wed May  9 22:18:36 2018
  OS/Arch:      linux/amd64
  Experimental: false

$ docker-compose version
docker-compose version 1.21.2, build a133471
docker-py version: 3.3.0
CPython version: 3.6.5
OpenSSL version: OpenSSL 1.0.1t  3 May 2016

構成

まずホストの 80, 443 で LISTENするサービスとして docker-proxy (上記の nginx-proxy, letsencrypt-nginx-proxy-companion を立ち上げてくれる) docker-compose を作成。

github.com

この docker-compose でプロキシ用のコンテナと、SSL証明書の自動発行コンテナが作成される。また、プロキシしたいサービスはこのネットワークに属している必要があるので、名前をつけて指定しやすいようにしている。(ただしこれはcompose バージョン 3.5から使用可能なので注意)

ここまでで準備はおおよそ完了で、今度はプロキシして配信したいサービスの方の設定だ。

こちらはそんなに難しいことはない。 docker-compose.yml にnetworks にexternal に先ほどの docker-proxy で作成したネットワークの名前を指定する。 次にコンテナに環境変数を設定する。

  • VIRTUAL_HOST
    • プロキシする際の vhost に当たるもの、この名前でプロキシされるので任意のサブドメインを割り当てる。
  • VIRTUAL_PORT
    • プロキシする際のコンテナ側のポート。
  • LETSENCRYPT_HOST
    • Let's Encrypt で自動更新するホスト名。基本的には VIRTUAL_HOST と同じになるはずだ。
  • LETSENCRYPT_EMAIL
    • Let's Encrypt の更新時に使用するメールアドレスだ。

github.com

まとめ

これで、無事サービスが複数に増えても簡単にSSLホスティングすることができそうです。 途中で、docker-composeのファイルバージョンの違いによる書き方の違いや、非推奨になっていたりとで少し手間取りました。

参考

qiita.com

a-lab.biz

peeeeron.hatenablog.com

poyo.hatenablog.jp

はてなブログプロにして独自ドメインにしてみる

ブログを定期的に書くようになってきたので、モチベーションをあげる意図を含めて、独自ドメインをブログに設定しようと思う。

はてなブログをプロにする

はてなブログ独自ドメインはプロ版にしないと設定できないのでプロ版にアップグレードする。 プロへのアップグレードは下記から申請できる。

hatenablog.com

30日間は無料なので迷ってる方は一旦あげてみるのもいいかもしれない。

DNSにCNAMEを登録

はてなブログ独自ドメインのヘルプに沿って自分の所有するDNSにCNAMEを登録する。自分の場合はCONOHAのDNSで運用しているので下記のように登録した。

f:id:zoe302:20180308225124p:plain

はてなブログドメインを設定

自分の独自ドメイン化したいブログの「設定」→「詳細設定」→「独自ドメイン」から自分の使いたいドメインを入力する。

f:id:zoe302:20180308223958p:plain

以上で手順は終了。

ちゃんと設定すると下記のようになる。

f:id:zoe302:20180308225357p:plain

ちなみに、、

間違えて先にはてなブログ独自ドメインの設定を先に変えてしまった場合、そのまま再度保存してもすぐには反映されないようだった。 その場合、一度違うダミーのドメインに設定して保存し、再度ドメインを変えることですぐ反映されることができた。

読んだものメモ 2018/03/07

読んだものメモ

背景とかはこちら

zoe3.hateblo.jp

2018/03/07

サービス開発をしてみた話。自分もプライベートでサービス開発してる身としては、リリースしてからも地道な努力が必要というのがとても共感できました。

qiita.com


型ありと型なしのお話。後半難しくて読むのに少し時間がかかった。。

qiita.com


ペアプロを通して、実感したプログラマの悪習慣をまとめてあるものです。 身に覚えがあるものがあれば解決策もあるので直していくといいですね。

qiita.com


チームにdockerを布教するのにdockerの魅力が伝わる記事を共有しました。やっぱりdocker便利ですよね。

qiita.com


自分がPMすることになったので、勉強に読んでました。炎上させないようにがんばらなきゃ。

paiza.hatenablog.com


ghqが便利らしいという噂をきいてたので使ってみた。

参考にしたサイトとか。

github.com

qiita.com

qiita.com

qiita.com

ちなみに自分はこれ系はdotfilesで管理しており、wgetでインストールしてます。

github.com

読んだものメモ 2018/03/05

読んだものメモ

背景とかはこちら

zoe3.hateblo.jp

2018/03/05

OAuthってたまに聞かれて説明めんどくさいので。。

qiita.com


浮動小数の精度落ちの話

PHP: 浮動小数点数 - Manual


バグって気軽に言われるとつらいよねって話。とてもわかる。

workerexperience.hatenablog.com


カラムの命名規則や設計大切だよね。

qiita.com


いいプロダクトを作るためのコツ

スピードを捨てる: 成長期の個人開発アプリを頓挫させないための戦略 – 週休7日で働きたい


go vet ってコマンドあるの知ってました?自分は知らなかったです!便利なので使っていこう!

tsujitaku50.hatenablog.com


go と unix 哲学とそれからわたし

www.google.co.jp

AWS SQSについて勉強したまとめ

実務でキューイングが向いてそうな処理があったので、AWS SQS を導入したいと考えている。 導入前に調べたことを雑にまとめていく。 実際にサービスで使用しているわけではなく、これから使用するために調査している段階なので、間違っていることなどがあれば教えてください。

SQS ってなにさ

AWS 公式の説明から引用すると「完全マネージド型メッセージキュー」というものらしいです。 完全マネージド、というのは「完全運用保守管理代行」ということであり、ざっくり言ってしまえば裏で何が動いてるか、サーバがどういう状態かなどをいい感じにやってくれるということですね。 そしてメッセージキューとは異なるプログラム間で動作を連携させるための手法の一つであり、送信側はキューと呼ばれるデータ領域にデータを保持し、データを受ける側の処理完了は待たずに次の処理を続けるという方式のものです。

SQS の使い方 - 準備

AWSコンソールにログインしてSQSをクリック。 メッセージをキューイングするための箱であるキューを作成する。 今回はtestというキュー名 (あとで画像はる)

SQS の使い方 - AWS CLIを使う

// test というキュー名に hoge というメッセージを送信
$ aws sqs send-message --queue-url https://sqs.ap-northeast-1.amazonaws.com/XXXXXXXXX/test --message-body hoge
{
    "MD5OfMessageBody": "ea703e7aa1efda0064eaa507d9e8ab7e",
    "MessageId": "a323ade9-e834-436c-90f3-b6cbfae29740"
}

// test というキューのメッセージを取得
$ aws sqs receive-message --queue-url https://sqs.ap-northeast-1.amazonaws.com/XXXXXXXXX/test
{
    "Messages": [
        {
            "Body": "hoge",
            "ReceiptHandle": "AQEB25kImuDLtxBnBPaHZxSb4qr+9yPz3Ws4x2JtHUVKi/Wf7tGKMjd2CdTBuYrA0FtnEjO2y3d8VRvWkmQ/idiZpYupSCUJ+aTZiGgb7+7Udn1WyLb8nFM9Rndel+BjuZZqi3xsbEyfzBIASIcHbkRZ1cXvtoocOVsbONK612t6Nklj38c0UwBz3bY+SP3qMpGayp4Sq1k3VxwgAXflgvtxfqvdKrGFTRBLE7YbTOyb1cHoqJna8t3LMkWuRmcC+s1Ul9HsAjtWEAV3y4z96NjVr3WqSofqj2gy9zAkAN0Ebj4weqSvfPaYCZNBQ76mDUbxMGiof+AX3fWlgm+x5iEYranD3+eyZ4LLAY7bwbC0GLeCroZhgau03wWIPqwKcCEQ2ufQPEwCvF06EjI5yXpKJw==",
            "MD5OfBody": "ea703e7aa1efda0064eaa507d9e8ab7e",
            "MessageId": "a323ade9-e834-436c-90f3-b6cbfae29740"
        }
    ]
}

// キュー削除
$ aws sqs delete-message --queue-url https://sqs.ap-northeast-1.amazonaws.com/XXXXXXXXX/test --receipt-handle AQEB25kImuDLtxBnBPaHZxSb4qr+9yPz3Ws4x2JtHUVKi/Wf7tGKMjd2CdTBuYrA0FtnEjO2y3d8VRvWkmQ/idiZpYupSCUJ+aTZiGgb7+7Udn1WyLb8nFM9Rndel+BjuZZqi3xsbEyfzBIASIcHbkRZ1cXvtoocOVsbONK612t6Nklj38c0UwBz3bY+SP3qMpGayp4Sq1k3VxwgAXflgvtxfqvdKrGFTRBLE7YbTOyb1cHoqJna8t3LMkWuRmcC+s1Ul9HsAjtWEAV3y4z96NjVr3WqSofqj2gy9zAkAN0Ebj4weqSvfPaYCZNBQ76mDUbxMGiof+AX3fWlgm+x5iEYranD3+eyZ4LLAY7bwbC0GLeCroZhgau03wWIPqwKcCEQ2ufQPEwCvF06EjI5yXpKJw==

読んだものメモ 2018/02/27

読んだものメモ

背景とかはこちら

zoe3.hateblo.jp

2018/02/27

意外と知らない人が多そうだったのでぺたり。composerでのバージョン指定の書き方とか

Composerのバージョン指定方法でのチルダ(~)とキャレット(^)の違い — A Day in Serenity (Reloaded) — PHP, FuelPHP, Linux or something


はてなブログのトップに出てたので読んだ。自分自身悪いテックリードとならないように努めようと思う。

tannomizuki.hatenablog.com