コンテンツにスキップ
use-cases / twelve-saas-from-one-box / hero
コンテナ · ポートフォリオ経済学

12 個のマイクロ SaaS。ベアメタル 1 台。

ポートフォリオを出荷します。2 製品が収益を生み、10 製品はおとなしいまま。アプリ単位のクラウドなら 12 個全部に支払います。Hoody なら、$49 サーバー 1 台に 50 個のコンテナを積み、おとなしい 10 製品はすでに払っている家賃に上乗せでほぼ無コスト。

Containers API ドキュメント
use-cases / twelve-saas-from-one-box / mechanism

12 製品が 1 台に収まる仕組み

製品はサーバーではなく、おおよそ 4 つのコンテナです — フロントエンド、バックエンド、データベース、ワーカー。12 製品で 50 コンテナ。退屈な部分はカーネルが重複排除するので、ボックスは気付きません。

  1. 01
    01 · 形

    製品ごとに 4 コンテナ

    各アプリは小さなスタックです。Next.js のフロント、小さな API、Postgres または SQLite、ワーカー。/api/v1/projects/[id]/containers に 4 つコンテナを POST し、製品名に対応する project_alias を付ければ完了です。12 製品で 50 コンテナと予備が少々。

  2. 02
    02 · 密度

    計算はカーネルが行う

    Hoody はコンテナを VM ではなく LXC で動かします。Kernel Samepage Merging が同じ Debian ベースで動くコンテナ間で同一 RAM ページを見つけ、glibc の 50 コピーを 1 つにします。BTRFS のコピーオンライトはディスクで同様のことを行います。アイドルなコンテナはベースからの差分のみを消費し、丸ごと 1 ボックスにはなりません。

  3. 03
    03 · ホスト

    マーケットプレイスサーバー 1 台

    サーバーマーケットプレイスから Hetzner AX52 か同等品を選びます — 本物のベアメタル、64 GB RAM、1 TB NVMe、月額約 $49。それが請求額です。51 番目のコンテナは追加コストゼロです。

Containers API によると、すべてのコンテナは /api/v1/containers/[id]/stats で自身の CPU、メモリ、ディスク、ネットワークを報告します。マーケティング上の事実は、こうした stats エンドポイント 50 個が単一ホスト上で苦もなく動き続けるということです。

use-cases / twelve-saas-from-one-box / powers

ポートフォリオモデルが解き放つもの

アイドル製品が本当に無料のときだけ意味をなす 3 つのこと。

アイドル · 無料

おとなしい製品はコストにならない

停止中のコンテナは CPU と RAM をゼロ消費 — ファイルシステムは BTRFS 上に差分コストでただ存在します。ユーザー 12 人の水槽ログアプリは何も燃やしていません。良心の呵責を覚えるために殺さなくても済みます。

分離 · OS

各製品は独自の OS

コンテナは Linux 名前空間であり、コントロールプレーン上の共有テナントではありません。mortgage-calc-pro のバグが chord-finder のデータベースを覗くことはできません。tenant_id 列も、共有スキーマも、「あのテナントが暴走した」インシデントもありません。分離はカーネルが担います。

スケール · その場で

勝者を移行せずに昇格

11 番目の製品が伸びたら、再プラットフォーム化はしません。コンテナのリソースを PATCH してコアを増やし、/copy 経由でレプリカを追加するだけ。トラフィックが来た場所で既に動いているので、ダイヤルを開けるだけです。

use-cases / twelve-saas-from-one-box / economics

1 つのサーバー。12 個のコンテナ。1 つの請求。

請求単位はサーバー — コンテナではなく、製品でもなく。12 番目の製品を追加しても請求額は変わりません。チャートは相対的なリソースフットプリント — コスト列はすべて同じ数字です。なぜなら請求単位がサーバーだから。

PER-APP MODEL · BEFOREPer-app billing
  • Notion Team$40/mo
  • Linear Standard$60/mo
  • Slack Pro$36/mo
  • GitHub Team$20/mo
  • Figma Professional$30/mo
  • Loom Business$37/mo
  • Airtable Team$40/mo
  • Intercom Starter$78/mo
  • Retool Team$30/mo
  • Datadog Pro$15/mo
  • Sentry Developer$26/mo
  • Vercel Pro$20/mo
TOTAL · 12 TOOLS$432/mo
HOODY FLAT-RATE · AFTEROne bare-metal server
  • Server · mid-tier (e.g. AX52)$49/mo
  • Containers inside · 50included
  • Bandwidth + storageincluded
  • Idle containersfree (KSM dedup)
  • 13th app added$0 added
TOTAL · FLAT RATE$49/mo
SAVES $383/MO VS PER-APP STACK

数値は Hetzner AX52 クラスホストの説明用です。サーバーが請求単位 — より多くのコンテナを追加しても請求項目は増えません。より大きいボックスへのアップグレードはコストが増えます。ボックス内のコンテナ追加はコストが増えません。

use-cases / twelve-saas-from-one-box / punchline

ポートフォリオモデルはかつて請求書のスプレッドシートでした。今は明細 1 行です。

以前 · 請求書フォルダ以後 · ひとつの家賃
毎月 12 通の請求書
  • Heroku × 12 · $84/月
  • Render web service × 12 · $84/月
  • Railway addons × 12 · $60/月
  • Vercel Pro per project × 12 · $240/月
  • Postgres add-on × 12 · $108/月
  • Worker dyno × 12 · $84/月
12 通の請求書 · 12 件の更新日 · 12 回のクレジットカードの不意打ち
1 つの家賃、1 度の支払い
Hoody サーバー · AX52$49.00 / 月
上に 50 コンテナが乗る — 13 個目を出荷しても明細は動かない
Containers API を読む
use-cases / twelve-saas-from-one-box / replaces

これが置き換えるもの

これらは単一製品をひとつのビジネスのように価格付けします。12 製品のポートフォリオはアプリ単位の料金を 12 倍払うことになります。ベアメタルモデルは 1 度だけ請求します。

  • Heroku ($7+/月 × 12)アプリ単位の dyno とアドオン単位の Postgres を、製品ごとに掛け算
  • 複数の VPS プロバイダ製品ごとに droplet 1 個で家賃が線形に積み上がる
  • Render web serviceサービス単位、データベース単位、ワーカー単位の価格設定
  • Railway プロジェクト単位プロジェクトごとのリソース価格 — 12 プロジェクトで 12 のメーター
  • Fly.io 製品ごとのアプリ便利だが、ポートフォリオでは結局アプリ単位の請求
  • Vercel Pro プロジェクト単位function や帯域幅の課金前に、プロジェクトごとに月 $20
use-cases / twelve-saas-from-one-box / cta

アイドルが無料なら、次のアイデアは予算の議論ではなく POST です。

use-cases / twelve-saas-from-one-box / related

他のユースケースを読む