メインコンテンツまでスキップ

サービス運用

AI スタックは**docker compose ひとつ**です。運用コマンドは全部インストール本体の bin/ にあり、 compose を代わりに呼び出してくれます。

cd /opt/kopens/plantpulse-ai-docker/bin

よく使うもの​

やりたいことコマンド備考
立ち上げる./up.sh終了コード 0 なら «準備完了» です
落とす./down.sh
再起動する./restart.sh0 なら再起動後に準備完了
今の状態を見る./status.shcompose スタック状態サマリー
詳しく診断する./health.shサービス別詳細レポート
ログを追う./logs.sh
イメージを新しく取得して上げる./update.sh取得後に再起動まで
終了コードを信じてください

up.sh · restart.sh はコンテナが立ち上がったことではなく使えるようになったことを 0 で 知らせます。スクリプトで自動化するとき、別途待機ループを入れる必要はありません。

何が間違っているのか見極めるとき​

./doctor.sh

🔴 doctor.sh は何も変えません。 読んで判断するだけです。そのため障害中でも 安心して先に実行できます — 直すのは人が決めることです。

env ファイルの行のうち、起動を妨げるものは «bad» として、そのままにしても何も変わらない古い名前・重複行(起動前判定の [warn] — alias · oldname · media-same)は**«old or redundant lines»** として別に表示します。後者は障害原因 ではありません。整理するコマンドは bin/lint-env.sh が示してくれます → 環境変数設定

コンテナを一つだけ扱うとき​

スタック全体を揺らす必要がなければ、スクリプトにサービス名を渡します。

cd /opt/kopens/plantpulse-ai-docker/bin
./status.sh # 무엇이 떠 있나
./restart.sh plantpulse-rag-api # 0 이면 재시작 후 준비됨
./logs.sh plantpulse-lightrag
docker compose を素手で呼ばないでください

compose ファイルは compose/ の下に、設定は /etc/kopens/plantpulse-ai.env にあります。インストールディレクトリで docker compose … をそのまま打つとファイルが見つからないか、見つかっても別の設定で動きます — up の場合は配布した イメージが巻き戻ることがあります。スクリプトは compose ファイルと設定ファイルを明示して呼び出します。

コンテナ名とそれぞれの役割は インストール概要 の表にあります。

コンテナの中に入る必要があれば:

bin/shell.sh plantpulse-rag-api

ログ​

./logs.sh # 스택 전체를 따라 본다
./logs.sh plantpulse-llm # 서비스 하나

コンテナログはDocker がローテーションします(compose に設定済み)。ホストで別途削除すべき ファイルは溜まりません。

コンテナは非rootで動きます​

2026.10 から compose の全サービスが実行ユーザー(user:)を明示し、root で動くのは GPU 指標を 読む plantpulse-dcgm ひとつだけです(GPU プロファイリングフィールドを読むには root と SYS_ADMIN が必要です)。

何実行ユーザー (uid:gid)
自社イメージ — 入口プロキシ・コパイロット・管理コンソール・RAG・時系列インサイト・文書理解・ビジョン・デジタルスレッドなど10001:0
vLLM(plantpulse-llm · -emb · -rerank、映像・音声を有効化したインストールの plantpulse-asr) · plantpulse-asr-audio10001:0
Neo4j 2つ7474:7474
Qdrant1000:1000
Phoenix65532:65532
Docling1001:0
plantpulse-dcgmroot (例外)

入口プロキシ(plantpulse-proxy)も非rootになったことで、コンテナの内側ポートが 8080 · 9443 · 8443 に 変わりました。ホストから見える 80 · 443 · 5960 はそのままです → サービスポートマップ

旧インストールで root 所有として作られた書き込みボリュームは、非rootプロセスが書き込めません。Docker は既存ボリュームの 所有者を変更してくれず、書き込み失敗は大抵静かに起こるか(ログファイルの代わりにコンソールにだけ残る形)即死します(Qdrant は root 所有ストレージで即座に落ちます)。そのため up.sh · restart.sh · update.sh が通る起動スクリプトが compose を上げる前に bin/volumes-nonroot.sh を呼び出します。

サービス合わせる箇所合わせる所有者
plantpulse-copilot-web · plantpulse-timeseries-insight-apiアプリログ10001:0
plantpulse-timeseries-insight-serverアプリログ・インストール別ファインチューニング重み10001:0
plantpulse-lightrag索引ストレージ・入力原本10001:0
vLLM セット(録音 plantpulse-asr はONのインストールのみ)コンパイルキャッシュ10001:0
plantpulse-asr-audio (ONのインストールのみ)音声ライブラリボリューム(pi-asr-audio)10001:0
plantpulse-neo4j · plantpulse-digital-thread-neo4jデータ7474:7474
plantpulse-qdrantベクトルストレージ1000:1000
plantpulse-phoenixデータ65532:65532
plantpulse-proxy証明書(pp-proxy-certs)10001:0
plantpulse-registry (プロファイルをONにしたときのみ)イメージストレージ10001:0

そのサービスのユーザーでないファイルが一つでもあるときだけ変更するため、最初の一回だけ処理して、その後は確認のみ して通過します。合わせられなければ起動を止めます(所有権が間違ったまま上がると書き込みが静かに失敗するため)。

docker compose up を素手で呼ぶとこの段階をスキップします

2026.09 以下で導入したホストは、初回起動を必ず bin/up.sh(または update.sh · restart.sh)で行ってください。

デフォルトでは立ち上がらないもの — compose プロファイル​

プロファイルコンテナ用途
registryplantpulse-registry · plantpulse-registry-ui閉域網ハブノードのローカルイメージストレージ
mediaplantpulse-asr · plantpulse-asr-audio映像・音声録音(音声での問い合わせを含む)。ホスト env の PI_MEDIA_ENABLED=true 一行でONにします — 運用スクリプト(up.sh · restart.sh · status.sh · logs.sh …)がその値を見てプロファイルを付けます → 映像・音声収集

media はプロファイル名を直接渡さず PI_MEDIA_ENABLED でONにしてください — そのスイッチが rag-api・文書理解の値と録音モデル 取得まで一緒に揃えます。ホスト env に COMPOSE_PROFILES を書くと、起動前判定が unknown で起動を止めます。

plantpulse-asr-audio は音声ライブラリをボリュームに移して終わる一回限りのサービスです。status.sh で «Exited (0)» なら正常で、正常として扱われます。0 以外のコードで終わった場合は plantpulse-asr も立ち上がりません。

バックアップとパスワード​

やりたいことコマンドドキュメント
バックアップを取る./backup.sh (何を取得するかは ./backup.sh --list — ログ・キャッシュと録音の音声ライブラリボリュームは除きます)データベース管理
パスワード・キーを変更する./passwd.shパスワード・APIキー変更
インストールを撤去する./remove.sh元に戻せません

データベースはプラットフォームのものを使います​

PostgreSQL · Aster TSDB · Redis(Valkey) · RustFS はAI スタックが立ち上げません。 プラットフォームのインストール分を共用で使います(PP_DATALAKE_ADMIN_URL のホスト)。この4つが落ちると AI も一緒に止まるため、 障害時は サービスポートマップ でどちら側の問題かをまず切り分けてください。

2026.10 からそのアカウント・パスワードは、コンテナが起動するときにプラットフォームから受け取ります。 プラットフォームに届かなければ 受け取る側のコンテナが FATAL で止まり、プラットフォームでパスワードを変えた場合は該当コンテナを再起動するだけで 済みます → 環境変数設定

関連ドキュメント​