Dockerを使ってHTTPS環境を構築

# Dockerを使ってHTTPS環境を構築
Dockerを使ってHTTPS環境を構築出来ないかと調べていたら[HTTPS-PORTAL](https://github.com/SteveLTN/https-portal)という便利なものがあったので、試しにローカルでHTTPS接続できる環境を構築してみました。

## HTTPS-PORTALとは？
> HTTPS-PORTAL is a fully automated HTTPS server powered by Nginx, Let's Encrypt and Docker. By using it, you can run any existing web application over HTTPS, with only one extra line of configuration.

> The SSL certificates are obtained, and renewed from Let's Encrypt automatically.

要するに自動でHTTPSサーバを作ってくれるDockerコンテナです。

## 前提
VirtualBox（仮想OS）に以下の環境を構築。

- OS: `CentOS7`
- Docker: `v19.03.10`
- Docker-compose: `v1.25.25`

## やること
ゲストOSのdocker上に起動した[Metabase](https://www.metabase.com)にホストOSのブラウザからHTTPSで接続する
※今回はサンプルとしてMetabase（データ分析用のWebアプリ）を使用する

## 手順
1. dockerをインストールする ※関連リンクを参照
2. docker-composeをインストールする ※関連リンクを参照
3. docker-compose.ymlを作成する
4. docker-composeでコンテナを起動する
5. VirtualBoxのネットワーク設定を行う
6. ブラウザからHTTPSで接続する

### docker-compose.ymlを作成する
CentOS7上の適当なディレクトリに_docker-compose.yml_を作成してください。
※今回は _/var/lib/docker_ 直下にファイル作成しました

```docker-compose.yml
https-portal:
  image: steveltn/https-portal:1
  ports:
    - '80:80'
    - '443:443'
  links:
    - metabase
  restart: always
  environment:
    STAGE: local
    DOMAINS: 'localhost -> http://metabase:3000'
metabase:
  image: metabase/metabase
  volumes:
    - ~/metabase-data:/metabase-data
  environment:
    - MB_DB_FILE=/metabase-data/metabase.db
```

https-portalを経由してmetabaseに接続するようなイメージです。
設定内容は以下の情報を元にしています。

- [HTTPS-PORTAL > Test Locally](https://github.com/SteveLTN/https-portal#test-locally)
- [Metabase > Mounting a mapped file storage volume](https://www.metabase.com/docs/latest/operations-guide/running-metabase-on-docker.html#mounting-a-mapped-file-storage-volume)

### docker-composeでコンテナを起動する
_dokcer-compose.yml_のあるディレクトリにて以下のコマンドを実行してください。

```shell
# docker-composeでコンテナを起動
docker-compose up -d
```
以下のコマンドでhttps-portalとmetabaseのコンテナが起動していることを確認できます。

```shell
# dockerの起動しているコンテナを確認
docker ps
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112941/a54669b5-01ae-8285-f878-ffe588f83659.png)

コンテナを停止したい場合は以下のコマンドです。

```shell
# docker-composeでコンテナを停止
docker-compose stop
```
### VirtualBoxのネットワーク設定を行う
ホストOSのブラウザからゲストOSのWebアプリに接続する為にVirtualBoxの設定をします。
ネットワーク設定にて、NATでホストOSの80, 443ポートをゲストOSの80, 443にフォワード設定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112941/b73baa61-6887-04eb-8d22-f5fdba65c3dd.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112941/442a39d3-0692-9280-b5f8-b04bfbfbdf0f.png)

### ブラウザからHTTPSで接続する
ブラウザにて `https://localhost` を表示する 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112941/c3ca851b-b305-2a19-84ed-c67285cb5bcd.png)
※オレオレ証明書なので上記の警告画面がでます。


以下のMetabaseの初期画面が表示されていれば成功です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112941/cea5f012-89c7-8ea3-7ec4-8ed691608291.png)

## あとがき
今回はお試しということでローカル用に環境構築してみました。
（未検証ですが）設定を切り替えれば[Let's Encrypt](https://letsencrypt.org)から取得した証明書を使うようなので社内ツールなどをHTTPS化したい場合に手軽に出来て良さそうです。
## 関連リンク
以下、環境構築の際に参考にしたサイトです

- [VirtualBox (Windows) 上に CentOS 7 をインストールする](https://qiita.com/100/items/80a899fbaeb1e82b3f67)
- [Install Docker on CentOS 7](https://qiita.com/ymasaoka/items/b6c3ffea060bcd237478)
- [Docker ＆ Docker Composeのインストール(CentOS7.4)](https://qiita.com/subretu/items/549bc720165004bca3c3)