LoginSignup
21
32

More than 5 years have passed since last update.

Dockerで簡単にマルチドメインかつSSL証明(自動更新) nginx-proxyとLetsEncrypt

Last updated at Posted at 2017-08-09

はじめに

Dockerの説明は割愛します。
はてなよりもQiitaにあげたほうがいい気がするのでこちらで共有させていただきます。

同一サーバー上に二つのDockerコンテナー
dockerA dockerB にそれぞれ a.com / b.com というドメインを割り当てることを前提として話を進めます。

 使うもの

・Docker - 当たり前
・nginx-proxy コンテナーをプロキシしてくれる神

・letsencrypt-nginx-proxy-companion SSL証明(自動更新)してくれる神

やり方

適当なディレクトリで docker-compose.yml を作成
docker-compose.yml :基本的にはコピペでおk

nginx-proxy:
image: jwilder/nginx-proxy
container_name: nginx-proxy
privileged: true
ports:
- 80:80
- 443:443
volumes:
- ./docker-compose.d/certs:/etc/nginx/certs:ro
- ./docker-compose.d/htpasswd:/etc/nginx/htpasswd
- /etc/nginx/vhost.d
- /usr/share/nginx/html
- /var/run/docker.sock:/tmp/docker.sock:ro
restart: always

letsencrypt-nginx:
image: jrcs/letsencrypt-nginx-proxy-companion
container_name: letsencrypt-nginx
privileged: true
volumes:
- ./docker-compose.d/certs:/etc/nginx/certs:rw
- /var/run/docker.sock:/var/run/docker.sock:ro
volumes_from:
- nginx-proxy
restart: always

はい。同じディレクトリ上で
$docker-compose up -d

これで nginx-proxy と nginx-proxy-companion をrunできました。

あとは dockerAとdockerBをrunするときに下記の3つの環境変数を設定してあげることで勝手にproxyかつSSLしてくれます。
・VIRTUAL_HOST    nginx-proxyのために必要。割り当てるドメイン名を設定する
・LETSENCRYPT_HOST letsencrypt-nginx-proxy-companionに必要。SSL証明書取得のためのドメイン名を設定する
・LETSENCRYPT_EMAIL letsencrypt-nginx-proxy-companionに必要。SSL証明書取得のためのメールアドレスを設定する

実際にコンテナーをrunしてみる

dockerAコンテナをrun
$ docker run -e VIRTUAL_HOST=a.com -e LETSENCRYPT_HOST=a.com -e LETSENCRYPT_EMAIL=アドレス [dockerAのimageID]

dockerBコンテナをrun
以下省略

簡単にマルチドメインかつSSL証明できたよ^ ^!!

なおSSL証明書は docker-composeしたディレクトリ/docker-compose.d/certs にあります

21
32
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
32