Diary

@ssig33

12 Jun 2017 Mon 15:51

Heroku で静的サイト配信 したいみたいなことがたまにあると思うんですけど、 Heroku Container Registry + nginx でやると今は楽ですね。 Heroku で Docker コンテナを動かす場合、 EXPOSE とかはすべて無視されます。 PORT という環境変数経由で公開すべきポート番号がコンテナ側に通報されます。なので _/nginx を使ってあれこれする場合は以下のようにあれこれするとよいかと。

default.conf

server {
    listen       ${PORT};
    server_name  localhost;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

Dockerfile

FROM nginx
COPY contents /usr/share/nginx/html
COPY default.conf /template
RUN rm /etc/nginx/conf.d/default.conf
CMD /bin/bash -c "envsubst < /template > /etc/nginx/conf.d/default.conf && nginx -g 'daemon off;'"

このようにして contents に配信したい静的サイトを入れておけば、

$ heroku container:push -a YOUR_APP_NAME

Heroku のインフラを使って静的サイトを配信できます。というか動かしてるのは単なる nginx なので、一つの Heroku アプリにディレクトリ切って複数アプリデプロイしたいとかそういうときにもこれは使えますね。 PHP でなんかやったりするときは便利かもしれない。