データベース管理
データベース構成
PlantPulse AI は6個のデータベースを使用し、それぞれ異なる目的で活用されます。
| データベース | 用途 | データ種別 |
|---|---|---|
| PostgreSQL | リレーショナルメタデータ | ユーザー情報、チャット履歴、RAGメタ、フィーチャーストア |
| Aster TSDB | 時系列保存 | センサーデータ、コパイロットタスク、推論ヒストリー |
| Neo4j(2インスタンス) | グラフデータ | LightRAG ナレッジグラフ・デジタルスレッドの工場グラフミラー |
| Qdrant | ベクトル保存 | 文書埋め込み、設備フィーチャーベクトル |
| Valkey (Redis) | キャッシュ | セッション、一時データ、検索キャッシュ |
| RustFS | オブジェクト保存 | 文書ファイル、画像、レポート |
PostgreSQL
データベース一覧
AI は自分の PostgreSQL を立ち上げず、プラットフォームの PostgreSQL の中に4つの DB を作って使います
(provision-platform-db.sh がなければ作成し、あれば飛ばします — べき等)。
| データベース | 使用サービス |
|---|---|
pi | AI アプリの DB — アプリごとにスキーマ一つ:co = AI Chat Web(ユーザー・チャット履歴・アプリ・設定)、dt = デジタルスレッド(コネクタレジストリ) |
lightrag | LightRAG の文書処理状態(doc_status) |
rag_ingest | 文書取り込みパイプライン(rag-api)の状態。図面・映像収集を有効にすると、その表(rag_drawing_*・rag_media_*)も起動時にここに作成されます |
litellm | LiteLLM ゲートウェイのキー・使用量 |
接続アカウントはプラットフォーム PG のアカウント(PP_PG_USER)です — AI 専用アカウントは別にありません。
pi の2つのスキーマもこのアカウントで接続します。表を public には置きません。
2026.09 以下から上げると — ch が pi.co へ移されます
2026.09 以下ではコパイロット表が DB ch の public にありました。2026.10 は起動時に
bin/migrate-pg-ch-to-pi.sh が compose より先に 動いてこれを移します — install・up・update・
compose-up がすべて同じ順序を踏むため、別途呼ぶ必要はありません。
- コパイロット・デジタルスレッドコンテナを停止します。
chに残ったセッションを整理します —chに接続されたアプリアカウント(PP_PG_USER)のセッションのみ切断します。- 1つのトランザクションで
publicのオブジェクトを新しいスキーマcoへ移します。 ALTER DATABASE ch RENAME TO pi。
| 状態 | 動作 |
|---|---|
pi のみ存在・両方とも存在しない | 何もしない |
ch のみ存在 | 上記の手順で移行 |
ch と pi が両方存在 | 拒否し、何も変更しません |
ch の public と co の両方にオブジェクトが存在 | 拒否(手動で半分移した痕跡) |
cd /opt/kopens/plantpulse-ai-docker
bin/migrate-pg-ch-to-pi.sh --check # 미리 보기 — 아무것도 바꾸지 않습니다
bin/migrate-pg-ch-to-pi.sh --rollback # 되돌리기 — pi.co → ch.public, 이름을 ch 로
アップグレード前に ch を pg_dump に一度ダンプしておいてください。プラットフォーム PG のディスク・保存はプラットフォームの管轄であり、
このスクリプトが代わりに行うものではありません。ロールバック後は以前のバージョンの compose とコパイロットイメージで立ち上げる必要があります —
新しい compose で立ち上げると、すぐに再度移行されます。
管理
# PostgreSQL 접속 — 코파일럿 스키마
psql -h <플랫폼 PG 호스트> -U <PP_PG_USER> -d pi -c 'SET search_path TO co' -c '\dt'
# 디지털 스레드 스키마
psql -h <플랫폼 PG 호스트> -U <PP_PG_USER> -d pi -c '\dt dt.*'
# 데이터베이스 목록 확인
psql -h <플랫폼 PG 호스트> -U <PP_PG_USER> -c '\l'
Aster TSDB
キースペース
| キースペース | 用途 |
|---|---|
pi | PlantPulse AI メイン(コパイロットタスク、推論ヒストリー) |
管理
# Cassandra CQL 접속
cqlsh 127.0.0.1 9042 -u cassandra -p cassandra
# 키스페이스 목록
DESCRIBE KEYSPACES;
# 테이블 목록
USE pi;
DESCRIBE TABLES;
Aster TSDB キースペースは初回起動時に db/cassandra/support/keyspace-create.sh スクリプトで自動生成されます。
Neo4j
2026.10 から Neo4j が2つ立ち上がります。同じイメージでアカウント(PI_NEO4J_USER・PI_NEO4J_PASSWORD)も同じですが、
格納するものと開かれる場所が異なります。
| コンテナ | 格納するもの | ボリューム | ホストポート |
|---|---|---|---|
plantpulse-neo4j | LightRAG ナレッジグラフ | pi-neo4j-data | 7474・7687 |
plantpulse-digital-thread-neo4j | デジタルスレッドの工場グラフミラー(Dt*) — 参照のみ、本文なし | pi-digital-thread-neo4j-data | なし |
Neo4j Community は DB を追加作成したり役割で権限を分けたりできないため、2つのサービスを確実に分離するために インスタンスを分けました。デジタルスレッド側はデジタルスレッド API のみが compose ネットワーク内で接続し、メモリ上限 (ヒープ 512 MB・ページキャッシュ 256 MB)が設定されています。
bin/passwd.sh が2つのインスタンスを同時に変更しますアカウントが1つなので片方だけ変更しないでください → パスワード・APIキー変更
接続情報 — plantpulse-neo4j
| 項目 | 値 |
|---|---|
| Browser URL | http://<サーバーIP>:7474 |
| Bolt URI | bolt://127.0.0.1:7687 |
| ユーザー | neo4j |
| パスワード | neo4j123 |
管理
Neo4j Browser(http://<サーバーIP>:7474)で Cypher クエリによりグラフを管理します:
// 노드 타입별 카운트
MATCH (n) RETURN labels(n), count(n) ORDER BY count(n) DESC;
// 관계 타입별 카운트
MATCH ()-[r]->() RETURN type(r), count(r) ORDER BY count(r) DESC;
デジタルスレッド側 — plantpulse-digital-thread-neo4j
ポートが開いていないため Browser からは入れません。状態は管理コンソールのデジタルスレッド → グラフミラー 画面(Neo4j 探針・ラベル別ノード数)で確認します。ミラーは原本(プラットフォーム台帳・イベント)から 再生成できるコピーです → デジタルスレッド
Qdrant
接続情報
| 項目 | 値 |
|---|---|
| REST API | http://127.0.0.1:6333 |
| Dashboard | http://127.0.0.1:6333/dashboard |
| API Key | qdrant-key-123 |
コレクション
| コレクション | 用途 |
|---|---|
| (LightRAG 自動生成) | RAG 文書ベクトル(LightRAG が管理) |
RustFS
接続情報
| 項目 | 値 |
|---|---|
| API | http://127.0.0.1:9000 |
| Console | http://127.0.0.1:9001 |
| Access Key | minio |
| Secret Key | minio123! |
バケット
| バケット | 用途 |
|---|---|
plantpulse-rag | rag-api のオブジェクトストレージ1つ。接頭辞で区別します — manual/ 管理コンソールから手動でアップロードした文書原本、drawings/ 図面構造とページプレビュー(図面収集を有効にした場合)、media/ 映像・音声再生版と書き起こし(映像収集を有効にした場合)、migration/ 旧バケット移行完了マーク。バケット名は compose のデフォルト値で、同じプラットフォームを AI インストールが2つ共有する場合のみ、2つ目のインストールにホスト env RAG_S3_BUCKET で別名を与えます → 環境変数設定 |
以前のバージョンは手動アップロードした原本を rag-manual-docs バケットに置いていました。2026.10 の rag-api は起動時に裏でそのオブジェクトを
plantpulse-rag の manual/ の下へコピーします。新しい場所にすでに存在する場合は上書きせず、旧バケットは読み取り専用のため旧イメージに
戻しても引き続き読み取れます。進捗状況は rag-api /api/v1/config の object_store_migration 項目で確認します。
データ保存パス
AI スタックのローカル状態はホストディレクトリではなく、名前付きの docker ボリュームにあります。
ホストでパスを探そうとしないでください — docker volume inspect で確認します。
| ボリューム | 内容 | 失うと |
|---|---|---|
pi-lightrag-inputs | アップロードされた原本文書 | 索引を再生成する方法がない |
pi-lightrag-storage | LightRAG KV キャッシュ(ローカル JSON) | 再生成可能 |
pi-qdrant-data | 文書埋め込みベクトル | 原本から再生成可能 |
pi-neo4j-data | LightRAG ナレッジグラフ | 原本から再生成可能 |
pi-digital-thread-neo4j-data | デジタルスレッドの工場グラフミラー | 原本から再構築可能 — ただしプラットフォームのイベントを再読込する必要があるため復元にはかなり時間がかかる |
pi-ttm-tuned-models | 現場データでインストールごとに学習した時系列モデル | その現場データなしには再作成できない |
pi-pp-proxy-certs | プロキシのTLS 証明書 | 顧客が投入した実際の証明書であれば再取得が必要 |
pi-phoenix-data | LLM 呼び出しトレース | 過去のトレースが失われる |
pi-registry-data | ローカルイメージレジストリ(registry プロファイルを有効にしたノードのみ) | イメージを再投入する必要がある |
pi-asr-audio | 書き起こしサービングが読む音声ライブラリ(映像・音声を有効にしたインストールのみ) | 失うものはない — plantpulse-asr-audio が起動のたびに再生成する |
bin/backup.sh が受け取るもの
compose ファイルに宣言されたボリューム全部を受け取ります — リストを別途記載しません。除外するのは再生成可能な
ログとキャッシュ(copliot-web-logs・insight-api-logs・llm-cache・emb-cache・
rerank-cache・asr-cache)と、起動のたびに再生成される書き起こし音声ライブラリ(asr-audio)のみです。registry-data はそのプロファイルを有効にしたノードにのみ存在するため、あれば受け取り、なければスキップします。
cd /opt/kopens/plantpulse-ai-docker/bin
./backup.sh --list # 볼륨마다 backup · optional · exclude 판정만 찍는다
./backup.sh # 전부 → /data1/pp-backup/YYYYMMDD/<볼륨>.tar.gz
COMPONENT=neo4j-data ./backup.sh # 하나만
| オプション | デフォルト値 | 意味 |
|---|---|---|
BACKUP_ROOT | /data1/pp-backup | バックアップの保存先 |
BACKUP_RETENTION_DAYS | 30 | それより古い日付ディレクトリを削除する — その回がすべて成功したときのみ |
2026.09 以前の backup.sh は手動で指定した4つのボリューム(neo4j-data・qdrant-data・lightrag-storage・
lightrag-inputs)のみを受け取っており、TLS 証明書ボリュームが抜けていました。 現在は compose からリストを抽出するため、
ボリュームが新しくできればデフォルトでバックアップされます。
書き込み途中のコピーになる可能性があります。アップグレード直前のような一貫したバックアップが必要な場合は bin/compose-down.sh
で停止してから実行してください。復元も compose を停止した状態で行います(例は bin/backup.sh の冒頭にあります)。
PostgreSQL・Aster TSDB・Redis・RustFS はプラットフォームのものであるため、このスクリプトは受け取りません — プラットフォームのバックアップ手順に従います。
バックアップ推奨事項
| 対象 | 方法 | 周期 |
|---|---|---|
| PostgreSQL | pg_dump | 日1回 |
| Neo4j | neo4j-admin dump | 日1回 |
| RustFS | rc mirror | 日1回 |
| Qdrant | Snapshot API | 週1回 |
/etc/kopens/plantpulse-ai.env | ファイルコピー — 🔴 PI_LITELLM_SALT_KEY がここにあります | 変更時 |
| AI ローカルボリューム | bin/backup.sh(上記) | 日1回 |