概要
なにかかっこいいのでポートフォリオサイトが欲しかったというのと,GCPとDockerまともに触ったことがなかったのでこういう風に公開しました.
これはポートフォリオに限らず,一般的な静的ページなら当てはめられます.
手順
1. ドメインを取得してIPと紐づける
僕はGoogleDomainsで取得して設定しました.
2. Google Compute Engine(GCE) のインスタンスを立てる
OSはdebian9を選択する.
httpとhttpsのportを開放することを忘れずに.
3. GCE 上に Docker をインストールする
$ apt-get install curl
$ curl -fsSL https://get.docker.com -o get-docker.sh
$ sudo sh get-docker.sh
$ systemctl start docker
4. GCE 上に git をインストールする
ローカルのソースコードを GCE 上にコピーします.
$ apt-get install git
$ git clone https://github.com/[Your Account]/[Your Repository].git
プライベートリポジトリなら,Githubに鍵登録をしましょう.
Github以外の方法でソースコードをコピーしても問題ありません.
ディレクトリ構成
.
├── Dockerfile
├── docker-compose.yml
└── src
├── css
├── favicon.ico
├── img
├── index.html
└── js
5. GCE 上に Docker で HTTPS な Nginx を立てる
https-portal
を利用します.
https://github.com/SteveLTN/https-portal
これは普通はproxyとしてHTTPS化するものですが,今回はproxyとしてではなくhttp-portl自体のNginxから静的ファイルを配信します.
git でクローンしたディレクトリに入りイメージをビルドします.
公開したいテンプレートsrc
を/var/www/vhosts/www.[Your Domain].com/
に配置しコンテナにコピーします.
srcを変更した場合、変更がそのまま反映されます.
こうすることで,imageをビルドしなおすことなくページ内容の変更を反映させることができます.
証明書をボリュームにマウントしておき永続化します.
コンテナを立ち上げるため証明書を取得すると発行制限がかかる場合があり,僕は1週間くらい発行することができなくなりました.
$ docker build ./ -t portfolio-https
$ docker run -v {srcへの絶対パス}:/var/www/vhosts/www.[Your Domain].com/ -v /data/ssl_certs:/var/lib/https-portal -p 80:80 -p 443:443 portfolio-https
もしくは
version: "3"
services:
https-portal:
image: steveltn/https-portal:1
container_name: portfolio-https-portal
ports:
- "80:80"
- "443:443"
restart: always
environment:
STAGE: "production"
DOMAINS: >-
www.[Your Domain].com
volumes:
- ./src:/var/www/vhosts/www.[Your Domain].com
- /data/ssl_certs:/var/lib/https-portal
docker-compose up -d
まとめ
以上の手順でページを公開できたと思います.