けんちゃんくんさんの Web日記

Web日記のDocker化とhttps化

このWeb日記は kenchan/tdnm: tdnm is simple weblog tool という自作のRailsアプリで、さすがにそろそろhttps化しないと恥ずかしいのでついでにDocker化もしてみた。

Docker化する

RailsアプリのDocker化については、jokerさんのQiita が参考になると思う。

最初は開発環境もDockerにしようかと思っていたのだけど、Gemfile にpath指定したいときに困る&Dockerの旨味がなくなると感じたので、開発はローカルでやることにした。(2017年をキャッチアップする 三種の神器 / ghq_gem-src_and_bundler // Speaker Deck)

本番環境のイメージについては、静的ファイルの扱いを一旦おいておいて、bundle installrails assets:precompileをしたイメージを作ることにした。

ベースのイメージは ruby:2.4-alpine にして、必要な依存関係をとかをバシバシいれていく。

  • nativeビルドで必要なものは事前に入れておく
  • bundle install --deployment オプション便利
  • bundle installとgccやmake等のインストールをワンラインでやるとイメージは小さくなるが、nativeビルドに失敗した時にやり直しに時間かかる

というあたりが発見だろうか。

現時点で最終的なイメージが130MBくらい。

kenchan/tdnm - Docker Hub

https-portalでhttps化する

https化は docker で全自動 Let's encrypt - Qiita がめちゃくちゃ便利だった。

特に何も考えなくてもローカルでのオレオレ証明書での検証と、本番でのLet's encryptでの運用ができる。

一回ハマったのは、FORCE_RENEWオプションをつけたまま本番で何回かビルドしなおしたせいでLet's encrypt側の制限で証明書の取得が失敗するようになってしまったところ。たまたま過去のコンテナを雑に消したあとだったのでめっちゃ困った…結局、Railsを80番で直接出すことで1週間ほどをしのいだ。

docker-composeとデプロイ

ここはめっちゃ雑にやっている。dockerだけをインストールしたVMをConoHaに立てていて、その中に本番用のdocker-compose.ymlがある。

デプロイは、瞬断しても困らないのでイメージをpullしてrestartという感じ。

Docker Cloud使ってみたかったんだけど、母艦をArch Linuxで立ててしまったのでサポート外だと言われて使えなかった…Ubuntuで作り直そうかな…

バックアップとか

まだ特に何もやってないので、今壊れると何日か分のWeb日記消失することになる。これから考える。

まとめ

先月から少しずつDocker化、Ruby2.4化、https化を進めてみた。モダンな感じには程遠いが、実際自分で試してみると辛いポイントや工夫のしどころがわかって勉強になった。

このエントリーをはてなブックマークに追加