セルフホスト

自前のマシンで Docker Compose を使って Tablize を運用 — クラウドと同じバイナリ、データはネットワークを離れない。

更新 2026-04-17

Tablize Cloud は速い経路。ただし時に自前インフラで必要なときも — 規制されたデータ、エアギャップネットワーク、スケール時の長期低コスト、または単にスタックを所有したい好み。

セルフホスト Tablize はクラウドと同じバイナリ。同じ機能、同じ Agent、同じドメイン。異なるライセンスモデルと、初期に少し多めの Ops 作業。

ここでの「セルフホスト」とは

自前の Docker 環境で Tablize を運用します。単一の compose ファイルを出荷し、立ち上がるのは:

  • Tablize — メインバイナリ(Agent ランタイム + Web サーバー + 全ドメイン)。
  • Postgres(TimescaleDB 拡張付き) — あなたのデータ。
  • MinIO — Media ファイル用オブジェクトストレージ。
  • EMQX — IoT 用 MQTT ブローカー。
  • Python サンドボックス — Python ツール用の隔離コンテナ。

総リソースフットプリント: 4 コア、8 GB RAM、50 GB ディスクで小チーム向け。データと同時ユーザーに比例して拡張。

システム要件

  • OS — Linux(Ubuntu 22.04+ または同等)。macOS は dev で動作。本番非推奨。
  • Docker — 24.0+ と Compose v2。
  • RAM — 最小 8 GB、推奨 16 GB。
  • ディスク — システム用 50 GB、加えてデータと Media ストレージ。
  • ネットワーク — LLM プロバイダ(Anthropic / OpenAI / OpenRouter / GLM など)への送信 HTTPS。ユーザーがインターネット越しに接続する場合は受信ポート 443。

古いホストの Docker 19.03 では seccomp=unconfined が必要(tokio の clone3 の癖)。デプロイスクリプトが自動で処理。

インストール

# 1. デプロイバンドルをクローン
git clone https://github.com/tablize-ai/deploy.git
cd deploy

# 2. env テンプレートをコピーして編集
cp .env.example .env
# .env を編集して設定:
#   - LLM_API_KEY=sk-...          (プロバイダキー)
#   - LLM_PROVIDER=anthropic       (または openai / glm / openrouter)
#   - TABLIZE_DOMAIN=tablize.yourco.internal
#   - ADMIN_EMAIL=you@yourco.com

# 3. すべて起動
./start.sh

初回起動はイメージを pull、データベーススキーマを初期化、admin アカウントをシード。典型的なホストで 2〜5 分かかります。

https://<TABLIZE_DOMAIN> を訪問し、ADMIN_EMAIL でサインイン。設定した SMTP(下記参照)経由でマジックリンクが届きます。

環境変数

合理的なデフォルトを持つ完全リスト:

# LLM
LLM_PROVIDER=anthropic            # anthropic | openai | glm | openrouter
LLM_API_KEY=sk-...                # プロバイダキー
LLM_DEFAULT_MODEL=claude-opus-4-7 # プロバイダごとのデフォルトを上書き

# ドメイン
TABLIZE_DOMAIN=tablize.yourco.internal
TABLIZE_PUBLIC_URL=https://tablize.yourco.internal

# Admin
ADMIN_EMAIL=you@yourco.com

# SMTP(マジックリンクと通知用)
SMTP_HOST=smtp.postmarkapp.com
SMTP_PORT=587
SMTP_USER=...
SMTP_PASS=...
SMTP_FROM="Tablize <no-reply@yourco.com>"

# データベース(外部 PG を使う場合に上書き)
DATABASE_URL=postgres://tablize:...@postgres:5432/tablize

# Media / S3(外部 S3 を使う場合に上書き)
S3_ENDPOINT=http://minio:9000
S3_BUCKET=tablize
S3_ACCESS_KEY=...
S3_SECRET_KEY=...

# MQTT
MQTT_HOST=emqx
MQTT_PORT=1883

# シークレット
TABLIZE_SECRET=...                # JWT 署名用のランダム 64 バイト

start スクリプトは初回実行で TABLIZE_SECRET と他のランダム認証情報を生成 — これらをコミットしないでください。.env.production に住みます。

LLM への接続

Tablize は Agent を動かすために LLM が必要。デフォルトで 4 つのプロバイダをサポート:

プロバイダLLM_PROVIDER備考
AnthropicanthropicClaude Opus / Sonnet / Haiku。
OpenAIopenaiGPT-4、GPT-4o。
GLMglmZhipu AI の GLM シリーズ。
OpenRouteropenrouter上記のいずれかにルーティング、さらに多数。

キーはすべての Agent リクエストに使用。コストはプロバイダに直接支払い — セルフホストでは Tablize 側でのトークンメータリングはありません。

エアギャップデプロイ: 独自の LLM を持参(vLLM または Ollama の背後のオープンウェイトモデル)。LLM_PROVIDER=openai を設定し、LLM_ENDPOINT をモデルサーバーに向ける — OpenAI 互換 API 形状を期待。Llama、Qwen、DeepSeek、Mistral — OpenAI completions プロトコルを提供するなら何でも動作。

リバースプロキシ / TLS

Tablize コンテナはポート 3000(HTTP)でリッスン。本番では TLS 終端のため nginx、Caddy、Traefik で前面に。サンプル nginx 設定は deploy/nginx.conf.example に。

内部デプロイには内部 CA を使用。インターネット向けデプロイには Caddy 経由の Let’s Encrypt が 2 行の設定。

アップグレード

アップグレードは pull + 再起動:

./upgrade.sh

裏で:

  • 最新の compose ファイル + env テンプレートを取得。
  • 新イメージを pull。
  • スキーママイグレーションを実行(マイナーバージョン内で後方互換)。
  • Tablize をローリング再起動。Postgres、MinIO、EMQX は稼働継続。

再起動中のダウンタイムは約 10 秒。

メジャーバージョンアップグレード前(v1.x → v2.x)は、リリースノートを読んでください — 時に長くかかる一回限りのマイグレーションを含みます。

バックアップとリストア

バックアップする 3 つ:

  • Postgres — あなたのデータ。pg_dump で動作。デプロイバンドルに日次ダンプをローテートする backup.sh スクリプトが含まれます。
  • MinIO / S3 — Media ファイル。通常は MinIO のビルトインレプリケーション経由で外部オブジェクトストア(AWS S3、Cloudflare R2)にレプリケート。
  • .env.production — 認証情報。シークレットマネージャに暗号化保存。

完全リストア:

./stop.sh
./restore.sh path/to/backup.tar.gz
./start.sh

必要になる前にステージングで少なくとも一度リストアフローをテストしてください。

モニタリング

Tablize コンテナは /metrics で Prometheus メトリクスを公開:

  • セッションごとに消費された Agent トークン。
  • DB クエリレイテンシ p50/p95/p99。
  • WebSocket 接続数。
  • バックグラウンドジョブキュー深度。

標準 Grafana ダッシュボードは deploy/grafana/ に。既存の Prometheus からスクレイプするか、含まれる Prometheus コンテナを使用。

ヘルスチェック: GET /api/health はサービスが準備完了で 200、起動中(ドメイン初期化)で 503、深刻なエラーで 500。ロードバランサーのヘルスプローブとして使用。

ライセンス

セルフホスト Tablize はワークスペースごと、永続ライセンス。買い切りは現バージョンと 1 年間の更新をカバー。更新延長はオプション。希望する数のワークスペース、シート、ノードを運用可能 — ライセンスはインスタンスに、ユーザー数ではありません。

価格: enterprise@tablize.com にお問い合わせ。典型範囲: サポート SLA に応じてインスタンスごと年 $10K〜$50K。

よくある落とし穴

  • 起動後の「503 Service Unavailable」。 ドメインがまだ初期化中。正常 — 10〜30 秒かかります。2 分以上続く場合、docker logs tablize でマイグレーションエラーを確認。
  • Agent が「no LLM configured」を返す。 LLM_API_KEY が空、またはプロバイダがコンテナから到達不能。コンテナ内から curl で確認。
  • MQTT 接続が拒否。 EMQX のデフォルト認証情報がバージョン間で変更。deploy/emqx/passwd で現在のセットを確認。
  • Python ツールがタイムアウト。 サンドボックスコンテナが小さすぎる。docker-compose.yml でメモリ制限を上げる(services.python-sandbox.deploy.resources)。
  • 数ヶ月使用後にデータベースが遅い。 Tablize データベースで VACUUM ANALYZE を実行。IoT データの TimescaleDB チャンクは定期圧縮の恩恵を受けます — timescaledb.enable_compression=on を有効化。

Cloud との違い

セルフホストと Cloud は同じバイナリですが:

  • トークンメータリングなし。 LLM プロバイダに直接支払い。
  • 自動マルチテナンシーなし。 1 Tablize インスタンス = 1 組織。真のマルチテナント SaaS には複数インスタンスを立てる(設定すれば Postgres を共有可能)。
  • 手動アップグレード。 あなたのスケジュールで、当社のではなく。
  • インスタンス間 Federation なし。 Federation は同じインスタンス上のワークスペース間で動作、インスタンス間ではありません。(インスタンス間が欲しければ REST API を使用。)

次のステップ

  • トラブルシューティング — 一般的な運用問題。
  • Enterprise — 商用サポートやカスタムデプロイが欲しい場合。
  • 統合 — セルフホストで追加セットアップが必要なコネクタもあります(例: webhook URL = あなたのドメイン、Tablize ではなく)。