BloomScheme Blog

株式会社ブルームスキーム公式ブログ

http-portalのすすめ

課題

リリースが近づいてきていよいよ人様に公開するためにhttps化が必要になりました。
必要だけどhttps ssl周りにあまり詳しくないので簡単な方法を探していました。
ピッタリの方法があったのでご紹介します。

https-portalとは

前提知識

  • dockerちょっとわかる

  • docker-composeちょっとわかる

  • let's encryptがなにかわかる

  • ネットワーク周りちょっとわかる

  • nginxちょっとわかる

本文

https-portal は let'encrypt の証明書を自動発行・更新機能のついたnginxプロキシサーバのdocker imageです。 これを使うと既存のサービスにあまり手を入れずにhttps化することができます。

github.com

導入方法

今回はコンテナ化されていないウェブアプリをhttps化した手順についてざっくり解説します。

必要なもの・こと

  • すでに動いているサーバ

  • 取得済みのドメイン

  • ドメインへのIPアドレスの登録

  • docker, docker-composeのインストール
    あとは環境次第

まずdockerとdocker-composeをインストールします。

今回使った環境はubuntuだったのでこんな感じです。

sudo apt install docker.io docker-compose

docker-compose.yamlの用意

version: '3'
services:
  # HTTPS Reverse Proxy
  https-portal:
    image: steveltn/https-portal:1
    container_name: hoge-https-portal
    ports:
      - '80:80'
      - '443:443'
    networks:
      - hoge
    restart: always
    environment:
      STAGE: 'production'
      # STAGE: 'staging'
      # STAGE: 'local'
      DOMAINS: >-
        hoge.com -> http://dockerhost:9999/,
    volumes:
    - hoge-ssl-certs:/var/lib/https-portal
    - hoge-vhosts:/var/www/vhosts
networks:
  hoge:
volumes:
  # SSL証明書
  hoge-ssl-certs:

こんな感じのものを用意しました。詳しくはhttps-portalのgithubを見ると良いと思います。
重要な部分は environment: STAGE:のところと DOMAINS: >-のところです

STAGE: 'local'にすると自己証明書で起動します。
STAGE: 'staging' にすると let'encryptのテスト用証明書が発行されます。
STAGE: 'production' にすると let'encryptの本番証明書が発行されます。

DOMAINS: の左辺で指定したドメインからのアクセスを右辺で指定したホスト上の指定のポートに転送します。
今回の場合は hoge.comへのアクセスをdockerhostの9999ポートに転送します。

サーバ設定変更

nginxを80ポートで起動していました。
このままだとhttps-portalが起動できないので設定を変更しましょう。

server {
    listen       80;

この辺をこんな感じに https-portalのdocker-compose.yamlで指定したポートに変更しておきます。

server {
    listen       9999;

できたらnginxをリロード

sudo nginx -t 
sudo nginx -s reload

サーバのポートを開けておく

httpsリクエストを受け取れるように443ポートを開けておきます。
環境によるので割愛

https-portal起動

作成したdocker-compose.yamlをサーバに配置します。
配置したディレクトリで

sudo docker-compose up -d

これでエラーが出なければhttps-portalが起動しているはずです。
起動しているかの確認は

sudo docker ps 

あとはドメイン指定が必要な設定ファイル等を調整して完了です。