対応アプリと制約
Keelson は、Python・Node.js・Go の Web アプリ、静的サイト、定期実行ジョブに対応しています。 フレームワークやデータの保存方法によっては、コードや設定の変更が必要です。以下の表で対応状況を確認してください。
Dockerfile は不要です。アプリに含まれていても、Keelson のビルドには使用されません。
アプリの対応状況
Section titled “アプリの対応状況”| アプリ | 対応状況 | 補足 |
|---|---|---|
| Python の Web アプリ(FastAPI、Flask など) | 対応 | 環境変数 PORT で指定されたポートで起動。Flask は gunicorn を使用 |
| Node.js の Web アプリ(Express、Hono、Next.js など) | 対応 | 環境変数 PORT で指定されたポートで起動。Next.js は next start |
| Go の Web アプリ(net/http、Gin など) | 対応 | Keelson がビルドして ./app で起動 |
| ビルド済みの静的サイト / SPA(React、Vue、Svelte など) | 対応 | assets にビルド出力を指定 |
| フロントエンド(静的)+ バックエンド API | 対応 | hybrid 構成。assets.api で API のパスを指定 |
| 定期実行だけ(Web UI なし) | 対応 | crons だけを定義 |
| 外部の PostgreSQL / MySQL / libSQL に接続する | 対応 | db.mode: none。接続情報はシークレットで渡す |
| 外部 API(OpenAI、Slack、Google Sheets など)を呼ぶ | 対応 | 外部通信は制限なし |
ファイル SQLite を使っている(sqlite3、better-sqlite3 など) | 変更が必要 | libSQL クライアントに置き換えて db.mode: libsql |
| ローカルファイルにデータを保存している | 変更が必要 | Managed SQLite か Files SDK / Media SDK へ。ローカルディスクは再起動で消える |
| アプリ内でタイマーやバックグラウンドスレッドを動かしている | 変更が必要 | リクエスト処理中に完了させるか、定期実行ジョブに移す(アプリが動くタイミング) |
| Django | 現在未対応 | Keelson の Managed SQLite(libSQL)と Django ORM の互換性に制約があるため、現在は対応していません |
| Streamlit | 未対応 | WebSocket が必須のため、現在は動きません(フレームワーク別の注意点) |
| Gradio | 検証中 | 4 以上を検証中。現時点では動作を保証しません |
| Ruby / PHP / Java / Rust / .NET / Elixir | 未対応 | 対応ランタイムは Python / Node.js / Go のみ |
| Dockerfile で apt パッケージを追加している | 未対応 | root 権限なし。画像・動画系は -media ランタイムで代替できる場合あり |
| 常駐プロセス・デーモン・WebSocket サーバー前提 | 未対応 | アイドル時に停止する実行モデルと合わない |
| Redis / Kafka / DB サーバーを自前で起動する | 未対応 | 外部サービスとして接続するのは可 |
| GPU が必要 | 未対応 |
「変更が必要」のアプリは、コードや設定を変更して対応できる場合があります。AI エージェントに確認を依頼すると、必要な変更を提案します。
他のツールで作ったアプリ(Lovable、Bolt、v0 など)をデプロイする手順は持ち込みガイドにあります。
keelson.yaml の runtime で選びます。迷ったら -slim から始め、画像・動画・PDF 処理のライブラリ(Pillow、sharp、ffmpeg など)が必要になったら -media に切り替えます。
| ランタイム | 言語バージョン | ビルド時の処理 |
|---|---|---|
python-slim / python-media | Python 3.12 | requirements.txt または pyproject.toml から自動インストール |
node-slim / node-media | Node.js 24 | package.json と package-lock.json から依存を自動インストール。npm run build があれば実行 |
go-slim / go-media | Go 1.26 | go.mod から go build し、./app として起動 |
Go のバージョンは、ビルドに使用するツールチェーンのバージョンです。依存パッケージはビルド時にインストールされます。command には起動コマンドだけを書きます。
- Node.js: ビルドには npm を使います。
pnpm-lock.yaml/yarn.lockのみの構成は対応していないため、package-lock.jsonを用意してください。 - Go:
CGO_ENABLED=0でビルドします。cgo に依存するライブラリは使用できません。
依存ファイルの要件やビルドの制約は、keelson.yaml リファレンスを参照してください。
実行環境の制約
Section titled “実行環境の制約”| 項目 | 内容 |
|---|---|
| OS / CPU | Linux / x86_64 |
| 権限・システムパッケージ | 非 root で動作します。sudo や apt-get は使えません |
| Web サーバーの起動 | 0.0.0.0 と環境変数 PORT で指定されたポートで待ち受けます |
| データの保存 | ローカルファイルは永続保存されません。残したいデータには Managed SQLite や Files / Media SDK を使います |
| 処理の実行 | リクエスト処理と定期実行ジョブに対応します。詳しくはアプリが動くタイミングを参照してください |
実行時間やアプリ数などの上限はプランと制限を参照してください。
Python(FastAPI)の例です。keelson.yaml と requirements.txt と app.py の 3 ファイルでデプロイできます。
slug: my-appruntime: python-slimcommand: "python app.py"db: mode: nonefastapiuvicornimport osfrom fastapi import FastAPIimport uvicorn
app = FastAPI()
@app.get("/")def index(): return {"message": "Hello from Keelson"}
if __name__ == "__main__": uvicorn.run(app, host="0.0.0.0", port=int(os.environ["PORT"]))通常は AI エージェントが keelson.yaml を書くので、自分で作る必要はありません。
- keelson.yaml の設定 — 設定ファイルの入門
- データベース(Managed SQLite)
- ファイルとメディア — Files / Media SDK
- 定期実行ジョブ
- Keelson Deploy Spec — AI エージェント向けの正本