• このエントリーをはてなブックマークに追加

dockerでWebサービスを構築するに当たり、リバースプロキシとしてNginxをDocker Composeで立ち上げます。昨今はhttps化が推奨される流れですのでLet’s EncryptでTLS/SSLを使用できるようにします。

一からDocker Imageを作らなくてもDocker HubにはNginxのリバースプロキシとしてnginx-proxyが、またこのnginx-proxyと合わせて使用することでhttps化できサーバ証明書の更新も自動化してくれるletsencrypt-nginx-proxy-companionがありますのでこれを使います。

またDockerコンテナのビルド&起動にはDocker Composeを使用しますのでdocker-compose.ymlファイルを作成してdocker-compose up -dコマンドを実行するだけでリバースプロキシが可動します。便利な世の中です。

Docker Composeファイルの作成

まずはdocker-compose.ymlファイルを適当なディレクトリに作成します。ここでは/var/docker/proxyに作成します。

$ mkdir -p /var/docker/proxy
$ cd /var/docker/proxy

次にdocker-compose.ymlファイルを作成。

version: '3'

services:
  nginx-proxy:
    image: jwilder/nginx-proxy
    restart: on-failure
    labels:
      - com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy=jwilder/nginx-proxy
    ports:
      - 80:80
      - 443:443
    volumes:
      - proxy:/etc/nginx/vhost.d
      - proxy:/usr/share/nginx/html
      - /var/run/docker.sock:/tmp/docker.sock:ro
      - ./certs:/etc/nginx/certs:ro
    network_mode: bridge

  letsencrypt:
    image: jrcs/letsencrypt-nginx-proxy-companion
    restart: on-failure
    depends_on:
      - nginx-proxy
    volumes:
      - proxy:/etc/nginx/vhost.d
      - proxy:/usr/share/nginx/html
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - ./certs:/etc/nginx/certs:rw
    network_mode: bridge

volumes:
  proxy:

Docker の起動

ファイルを作成したらdocker-composeコマンドを実行します。

$ docker-compose up -d

これでリバースプロキシの準備&起動が完了です。とても簡単。 あとはWEBサービスをdockerで起動する際に下記の環境変数を設定すればリバースプロキシがリクエストをWEBサービスにフォワードしてくれます。またLet’s Encryptでサーバ証明書を自動的に取得されるのでhttpsでのリクエストももちろん可能。

なお環境変数VIRTUAL_HOST, LETSENCRYPT_HOSTのFQDNは事前にDNSに登録している必要があります。

VIRTUAL_HOST: www.example.com
VIRTUAL_PORT: 3000
LETSENCRYPT_HOST: www.example.com
LETSENCRYPT_EMAIL: hostmaster@example.com

ひとつ注意点。WEBサービスのdocker起動の際はnginx-proxyと同じネットワークに接続されている必要があるのでnetwork_modeは下記設定が必要。

network_mode: bridge
  • このエントリーをはてなブックマークに追加