29
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

posted at

updated at

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

はじめに

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 にあります

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
29
Help us understand the problem. What are the problem?