セルフホスト
自前のマシンで Docker Compose を使って Tablize を運用 — クラウドと同じバイナリ、データはネットワークを離れない。
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 値 | 備考 |
|---|---|---|
| Anthropic | anthropic | Claude Opus / Sonnet / Haiku。 |
| OpenAI | openai | GPT-4、GPT-4o。 |
| GLM | glm | Zhipu AI の GLM シリーズ。 |
| OpenRouter | openrouter | 上記のいずれかにルーティング、さらに多数。 |
キーはすべての 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 ではなく)。