Dewyとは?

Dewy(デューイー)は、Kubernetes以外の環境でアプリケーションを宣言的にデプロイするソフトウェアです。 サーバー上のアプリケーションやデータが常に最新となるようにします。

Dewyは複数のデプロイモードをサポートしています:

  • バイナリデプロイメント: Goアプリケーションを単一のバイナリとしてデプロイ(非コンテナ環境)
  • アセットデプロイメント: 静的ファイル(HTML、CSS、JavaScriptなど)をデプロイ
  • コンテナイメージデプロイメント: ゼロダウンタイムのローリングアップデートでコンテナイメージをデプロイ

背景

Goはコードを各環境に合わせたひとつのバイナリにコンパイルすることができます。 Kubernetesのようなオーケストレーターのある分散システムでは、Goで作られたアプリケーションのデプロイに困ることはないでしょう。 一方で、コンテナではない単一の物理ホストや仮想マシン環境において、Goのバイナリをどうやってデプロイするかの明確な答えはないように思います。 手元からscpやrsyncするshellを書いて使うのか、サーバ構成管理のansibleを使うのか、rubyのcapistranoを使うのか、方法は色々あります。 しかし、複数人のチームで誰がどこにデプロイしたといったオーディットログや情報共有を考えると、そのようなユースケースにマッチするツールがない気がします。

主な機能

  • 宣言的プル型デプロイメント: アプリケーションが自動的に最新の状態に保たれます
  • 複数のデプロイモード: バイナリ、アセット、コンテナイメージに対応
  • ゼロダウンタイムデプロイメント: コンテナイメージのローリングアップデートと自動ヘルスチェック
  • グレースフルリスタート: 接続を切断することなくスムーズなアプリケーション更新
  • 複数のレジストリ対応: GitHub Releases、S3、GCS、Docker Hub、GitHub Container Registry、Google Artifact Registry、AWS ECR
  • デプロイ通知: Slack、メール、その他の通知チャネル
  • 構造化ログ: ログ集約が容易なJSON形式対応
  • オーディットログ: いつ、誰が、何をデプロイしたかを追跡

Dewyが役立つユースケース

Dewyは、様々な環境でアプリケーションの最新バージョンを稼働させ続けるのに最適です:

バイナリデプロイメント

  • 仮想マシンや物理サーバー上でGoアプリケーションを単一のバイナリとしてデプロイ
  • Kubernetesがオーバースペックな非コンテナ環境でのアプリケーション管理
  • 最小限のインフラでシンプルなサーバーアプリケーションを維持

コンテナイメージデプロイメント

  • Kubernetesを使わないコンテナ化されたアプリケーションのゼロダウンタイムデプロイメント
  • Docker/Podman環境でのローリングアップデート
  • OCIレジストリからコンテナイメージの自動更新
  • 単一ホストのDocker環境やシンプルなマルチコンテナセットアップに最適

次のステップ

Dewyを使い始めるには、以下のドキュメントを参照してください: