#やった事
前に記事で公開したQiitaタグ自動ジェネレータをWebアプリとして手軽に試せる様に公開しました。
ついでにGitHubでソースも晒しています。
※Freeプランなので30分間アクセスがないと休眠してしまいます。少し時間がかかる時があるのはご愛嬌という事で...
#全体図
Webアプリを公開するにあたりHerokuを使いました。GitHubとも連携させたのでこんな感じです。
GitHubにソースをpushすると自動的にHerokuでビルドが走りDockerコンテナのデプロイまでやってくれます。仕事での開発だと今時CI/CDなんて当たり前だと思いますが、個人でお金をかけずに環境作ってみたという感じです。
#Herokuって?
アプリケーションの開発から実行、運用までのすべてをクラウドで完結できるPaaSです。(公式サイトより)
結構前からあるサービスで知名度も高く知っている人も多いと思います。
以下を魅力に感じ今回使いました。
- 無料でWebアプリを公開することが出来る ※稼働時間など一部制約あり
- GitHub連携できる
- Docker対応している(Heroku dyno)
#GitHub連携するには?
Herokuの画面から設定するだけ、すごく簡単。Automatic deploys
を有効にするだけで、GitHubにpushされたらHerokuにアプリをデプロイするところまでやってくれます。
#Dockerビルドするには?
連携したGitHubにDockerfileはもちろんですが、heroku.yml
という設定ファイルが必要になります。
今回用意したheroku.ymlはこちら。
build:
docker:
web: Dockerfile
色々出来るらしいですが、単純にDockerfileからビルドするだけなのでシンプルな内容となってます。
詳細な書き方は公式ドキュメントを見てみてください。
ちなみにDokerfileはこちら。
PythonのWebアプリケーションフレームワークであるflask
を使いました。
FROM python:3-alpine
WORKDIR /work
RUN wget http://gensen.dl.itc.u-tokyo.ac.jp/soft/pytermextract-0_01.zip
RUN unzip pytermextract-0_01.zip
RUN cd pytermextract-0_01 && python setup.py install
RUN apk update
RUN apk --no-cache add git gcc libc-dev libxml2-dev libxslt-dev
RUN git clone https://github.com/fukumasa/auto-create-qiita-tags
WORKDIR /work/auto-create-qiita-tags
RUN pip install -r requirements.txt
ENV FLASK_APP /work/auto-create-qiita-tags/app.py
CMD flask run -h 0.0.0.0 -p $PORT
Herokuでは起動時のポートがPORTという環境変数に格納されているため、flaskアプリケーション起動時に$PORT
でポート指定しています。
これでコンテナがビルドされるとCMD
の内容が実行されます。
起動したDockerアプリには80ポートでアクセスするため、おそらくですが、コンテナ内部の$PORT
ポートとコンテナが稼働しているサーバの80ポートが自動的にフォワーディングされていると思われます。
Dockerコンテナをdocker run
で実行する際は、通常-p 80:5000
のようにポートフォワーディングを明示的に行う事が多いと思いますが、Herokuではこの辺りはあまり意識しなくても良さそうです。
#まとめ
Herokuを使ってDockerアプリを公開してみました。
GitHubを使えば、既存のソース+heroku.ymlで手軽に連携することが出来ます。
そもそもHerokuの使い方とかより詳細なコマンドとかは以下の参考ページを見てみてください。
#参考ページ