docker-compose
moka-1 スタックの Docker Compose 操作と compose.yaml の書き方。ワンキック起動・開発ループ・ヘルスチェック・開発機(iGPU/Vulkan)固有設定・トラブルシュート。
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
moka-1 スタックの Docker Compose 操作と compose.yaml の書き方。ワンキック起動・開発ループ・ヘルスチェック・開発機(iGPU/Vulkan)固有設定・トラブルシュート。
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
Rust ベストプラクティス(Plecto WASM フィルタ向け、Edition 2024)。plecto:filter WIT コントラクトを実装する WASM Component Model フィルタの規約とツールチェーン。
Grilling session that challenges your plan against moka-1's documented design decisions (tenets, ADRs) and domain model, sharpens terminology, and updates documentation (CONTEXT.md, ADRs) inline as decisions crystallise. Use when the user wants to stress-test a plan against the project's language and documented decisions, or says 「設計を詰めて」「用語を固めて」「ドキュメントと突き合わせて」.
クリーンアーキテクチャの依存ルールを moka-1 のミニマリズム制約下で適用する指針。レイヤ分割・interface 設計・依存方向の判断基準と、過剰抽象化を避けるガードレールを提供する。
Web調査の方法論。一次ソース(RFC・公式仕様・公式ドキュメント・原論文・ソースコード)を最優先し、検索クエリの多角化・横断的検証(lateral reading)・独立ソースでの三角測量を経て、出典付きで報告する手順。
Go ベストプラクティス(moka-core 向け、Go 1.26+)。常駐エージェントループ・LLM クライアント・フィード取得を含む moka-core の実装規約。
Python ベストプラクティス(eval/ 専用、Python 3.14 + uv + Pyrefly + Ruff)。モデル A/B・プロンプト評価スクリプトの規約と再現性の作法。
docker compose up -d 一発で全部が上がるのが moka-1 の存在理由(tenets §2-1)。
マイグレーション・モデル DL・初期設定を「手動手順」として増やす変更は設計違反。起動シーケンス内に自動化して入れる。
ワンキックの検証は docker compose up -d --wait(全 healthcheck が通るまで待って exit code で返る)で行う。
docker compose up -d --wait # ワンキック起動 + healthy まで待機
docker compose ps # 状態確認
docker compose logs <service> -f # ログ追尾
docker compose down # 停止(named volume は保持)
docker compose down -v # データも消す(要確認: 記事 DB が飛ぶ)
docker compose up -d --build moka-core # コード変更後の再ビルド
docker compose watch # 開発ループ(develop.watch 設定時)
version: キーは書かない(廃止済み)。トップレベルに name: mokadepends_on:
db:
condition: service_healthy
restart: true # db が再作成されたら自分も再起動
ただし moka-core → llm は depends_on に入れない(fail-soft: llm 無しでも起動する。tenets §2-6)healthcheck:
test: ["CMD", "curl", "-sf", "http://localhost:8080/healthz"]
interval: 30s
start_period: 60s
start_interval: 2s
llm はモデルロードが遅いので start_period を長めに(数分)migrate は除く — restart: "no")develop.watch(sync + rebuild)を書き、docker compose watch で回すsecrets/ — gitignore 済み、初回手順は secrets/README.md)。compose.yaml・.env への直書きをしない。コンテナ側は *_FILE 系(例 POSTGRES_PASSWORD_FILE=/run/secrets/postgres_password)で受ける| サービス | 役割 | 依存 |
|---|---|---|
plecto | エッジ: TLS 終端、ルーティング、WASM フィルタ | moka-core, moka-web (upstream) |
moka-core | API + 常駐エージェントループ (Go) | migrate(completed)、db(healthy)、llm(soft — depends_on 禁止) |
moka-web | UI (SvelteKit SSR) | moka-core |
db | PostgreSQL 17 + pgvector | — |
llm | llama.cpp server (Vulkan / RADV) | — |
migrate | one-shot: Atlas マイグレーション適用(ADR00001) | db(healthy)。実行後 exit 0 — 常駐上限 5 には数えない |
migrate:
image: arigaio/atlas:<PINNED> # latest 禁止
command: migrate apply --url "$DATABASE_URL" --dir file:///migrations
volumes:
- ./db/migrations:/migrations:ro
depends_on:
db:
condition: service_healthy
restart: "no" # one-shot。unless-stopped にしない
depends_on: migrate: condition: service_completed_successfullydb/schema.sql 編集 → atlas migrate diff → atlas migrate lint → commit(atlas.sum 更新は atlas migrate hash)llm:
image: ghcr.io/ggml-org/llama.cpp:server-vulkan-<PINNED> # b6709 以上に pin。latest 禁止
devices:
- /dev/dri:/dev/dri # iGPU (gfx1150) パススルー
group_add:
- video
- render
volumes:
- ./models:/models
llama-server -hf <org>/<repo>:<quant> で初回起動時に HF から取得可能。entrypoint スクリプトで賄えない要件が出るまでこれを使う-np 並列スロット: MoA 提案層の 3 ペルソナ同時デコード用。KV キャッシュ消費が乗るので VRAM 収支(tenets §3.3、~26GB/32GB)を崩さない範囲で--model 別ポート追加は VRAM 収支を再計算してから)docker compose ps --format 'table {{.Name}}\t{{.Status}}'
curl -sf http://localhost:8080/healthz # moka-core(直)
curl -sf http://localhost:8081/health # llama.cpp server
curl -sfk https://localhost/ # Plecto 経由(エッジ確認)
docker stats --no-stream # メモリ / CPU 収支
| 症状 | 確認 | 対処 |
|---|---|---|
| llm が unhealthy | logs llm で Vulkan デバイス検出(ggml_vulkan: Found 1 Vulkan devices)を確認 | /dev/dri マウント・group_add・BIOS の iGPU 32GB 割り当てを確認。moka-core は fail-soft で動き続けるのが正常 — 濃縮だけ止まる |
llm のロードで missing tensor | イメージのビルド番号 | b6709 未満は lfm2moe 非対応(tenets §9)。pin を上げる |
| 生成が異常に遅い | logs llm で GPU オフロード層数、docker stats で RAM スワップ | -ngl 指定漏れ / VRAM 溢れで CPU フォールバックしていないか。モデル常駐合計を tenets §3.3 の収支表と突き合わせ |
| moka-core が起動しない | logs migrate → logs moka-core の順 | migrate が exit 0 か(docker compose ps -a)、db の service_healthy 条件、.env の DSN を確認 |
| migrate が失敗する | logs migrate のエラー、atlas.sum 不整合 | checksum エラーなら atlas migrate hash の掛け忘れ。SQL エラーなら前進修正(新マイグレーション追加)。適用済みファイルを書き換えない |
| フィード取得が遅い | 仕様かも | グローバルレートリミッタ(外部リクエスト ≥5s)。フィード数 × 5s が周回時間の下限 |
| Plecto がリクエストを落とす | logs plecto で short-circuit 理由 | フィルタの fail-closed 動作なら設計通り。Plecto 側の問題なら回避せず issue 起票(ドッグフーディング) |
| ポート競合 | ss -tlnp | 旧 Ollama(停止済みのはず)等の残骸を確認 |
| ディスク肥大 | docker system df | models/ の古い GGUF、docker image prune。named volume(db)は消さない |
docs/tenets/moka-tenets.md — 本スキルの「tenets §N」参照はこの文書の節番号