n0deploy

   
Status accepted

Context

  • アプリケーションのデプロイは検証環境と本番環境を可能な限り近づけるべきである
    • 検証環境で動いても本番環境では動かない、またはその逆が発生する確率が非常に高く、それは開発効率を著しく低下させる
  • VMのデプロイ手法を再現可能な状態で管理するにはまだ課題がある
    • DockerfileでVMにデプロイする場合、VMはミュータブルであるためビルドキャッシュを有効化することが難しく、ゼロから環境を構築するため必要があるため継続的に開発するには遅い
    • AnsibleでVMにデプロイすることが一般的だが記述量が増える傾向にあるため、小さなアプリケーションにはコストがかかりすぎ、大きなアプリケーションは記述量が多すぎてメンテナンスできないという問題があった

Decision

  • Dockerfileを参考に RUNCOPY の機能を実装することで記述量を削減
  • 処理を二つに分割することで、継続的に開発を行うことへの足かせを減らす
    • Bootstrap: IPの設定や周辺サービスなど環境を構築する事前状態を定義する
    • Deploy: 開発しているものを適用する
    • つまり Bootstrap * 1 + Deploy * N を適用することで開発を行い、 Bootstrap * 1 + Deploy * 1 を適用することで本番環境に展開する

文法

BOOTSTRAP # optional
RUN apt update \
 && apt upgrade -y \
 && apt install -y ...

DEPLOY
COPY some_app/ /opt/some_app

Consequences

  • 適宜更新