at posts/single.html

このサイトをHTTPS対応させた

そろそろHTTP2時代も本格的に近づいてくることから、このサイトをHTTPSに対応させた。証明書は無料で使えるLet's Encyriptのを利用させてもらった。

このサイトはdockerで動かしている。Let's Encryptから証明書を取得してWebサーバ (nginx) に設定してくれる、 docker-letsencrypt-nginx-proxy-companion という便利なdockerイメージを追加するだけで、HTTPS対応ができた。

docker-compose.yml ファイルに、 companion サービスを追加している。

web:
  image: jwilder/nginx-proxy
  ports:
    - "80:80"
    - "443:443"
  volumes:
    - nginx-certs:/etc/nginx/certs:ro
    - /etc/nginx/vhost.d
    - /usr/share/nginx/html
    - /var/run/docker.sock:/tmp/docker.sock:ro
  restart: always

companion:
  image: alastaircoote/docker-letsencrypt-nginx-proxy-companion
  volumes_from:
    - web
  volumes:
    - nginx-certs:/etc/nginx/certs:rw
    - /var/run/docker.sock:/var/run/docker.sock:ro
  restart: always

あとは、HTTPS対応させたいサービス側に LETSENCRYPT_HOSTLETSENCRYPT_EMAIL 環境変数を設定するだけで、自動的に証明書を取得してくれるようになる。

app:
  build: app
  volumes:
    - tdiary-data:/usr/src/app/data
    - tdiary-public:/usr/src/app/public
  environment:
    - RACK_ENV
    - NEW_RELIC_LICENSE_KEY
  restart: always

web:
  build: web
  links:
    - app
  volumes_from:
    - app
  environment:
    - VIRTUAL_HOST=www.machu.jp
    - LETSENCRYPT_HOST=www.machu.jp
    - LETSENCRYPT_EMAIL=kmachu@gmail.com
  restart: always

dockerで動かすことで、各サービスが分離されるだけでなく、設定をGitHubリポジトリで管理できるようになるのも嬉しいところ。