Skip to content
実践ガイド10分

Proxmox LXC内でOpenFaceをDocker ComposeとPostgreSQLにより運用します。

  • proxmox
  • lxc
  • docker
  • postgresql

Proxmox LXCへの配備

検証済み構成では、専用のUbuntu 24.04 privileged LXCを使います。OpenFace 自体はLXC内の1つのDocker Composeプロジェクトとして動き、Proxmoxがリソース 制限、スナップショット、ホスト起動時の自動起動を担当します。

検証済みプロファイル

設定
LXC ID / hostname101 / openface
CPU / memory / swap6 cores / 8 GiB / 4 GiB
root disklocal-lvm 上の80 GiB
networkvmbr0、DHCP
container modeprivileged
featuresnesting=1,keyctl=1
bootonboot=1

OpenFace SpacesはDocker imageとcontainerを動的に作るため、nested Dockerが 必要です。/etc/pve/lxc/<VMID>.conf に次を追加してLXCを再起動します。

ini
features: nesting=1,keyctl=1
lxc.apparmor.profile: unconfined
lxc.cgroup2.devices.allow: a
lxc.cap.drop:

このLXCだけ隔離を緩和します。信頼済みのアプリケーションホストとして扱い、 信頼できないユーザーにSpaceのDockerfileを公開させないでください。

Runtimeの導入

LXC内で実行します。

bash
apt-get update
apt-get install -y ca-certificates curl git openssh-server rsync
curl -fsSL https://get.docker.com | sh
systemctl enable --now docker ssh
docker run --rm alpine echo nested-docker-ok

OpenFaceをcloneして起動します。

bash
git clone https://github.com/Sunwood-ai-labs/OpenFace.git /opt/openface
cd /opt/openface
cp .env.example .env
sed -i 's|^PUBLIC_BASE_URL=.*|PUBLIC_BASE_URL=https://<LXC-IP>:8443|' .env
docker compose up -d --build

https://<LXC-IP>:8443 を開きます。自己署名証明書を受け付けないローカル WebViewでは http://<LXC-IP>:8090 も利用できます。

PostgreSQLによる永続化

既存LXCを更新するときは、先にupgradeとデータ保持のrunbookを 実行してください。このページはdeployment固有のbackup commandを説明する もので、preflight、migration、更新後比較の代わりにはなりません。

ComposeはPostgreSQL 17を1サービス起動し、用途別に3 DBを作成します。 v0.5.0 migrationが終わっていないv0.4.0環境では、pipeline audit/historyとreconcile stateはまだlegacy SQLiteの/data/agents/pipelines/pipeline-audit.dbとして openface_agent-metrics-data volume内に保存され、openface_metrics dumpには含まれません。 OpenFace v0.5.0ではauthoritativeなstateをopenface_metricsopenface_pipeline schemaへ 保存します。upgrade hostで新しいpipeline writeを受け付ける前に、明示的なpipeline移行手順 を実行します。

Database保存内容
forgejorepository、user、Issue、PR、Actions metadata
openface_metricsbrowser/agent view、like、agent identity
openface_maintenancewebhook deliveryとmaintenance job

Git repository本体、LFS object、token、agent credential、runner登録、移行前のlegacy pipeline SQLiteはnamed Docker volumeに残ります。MCP profileを有効にする場合は openface_mcp-stateと、operatorが選択したOPENFACE_MCP_STATE_DIR bind mountも 別にバックアップします。後者はnamed volumeではなくregistryとlifecycle-audit fileを含みます。

bash
backup_dir="${BACKUP_DIR:-/opt/openface-deploy}"
postgres_user="${POSTGRES_USER:-$(sed -n 's/^POSTGRES_USER=//p' .env | head -n 1)}"
postgres_user="${postgres_user:-openface}"
umask 077
mkdir -p "$backup_dir"
docker exec openface-postgres pg_dump -U "$postgres_user" -Fc forgejo \
  > "$backup_dir/forgejo.dump"
docker exec openface-postgres pg_dump -U "$postgres_user" -Fc openface_metrics \
  > "$backup_dir/openface_metrics.dump"
docker exec openface-postgres pg_dump -U "$postgres_user" -Fc openface_maintenance \
  > "$backup_dir/openface_maintenance.dump"

scripts/restore_lxc_deployment.sh は、準備済みcheckoutへ3つのdumpとnamed volume archiveを復元します。OPENFACE_MCP_ENABLED=1ではMCP named volume、 bind archive、保護されたcredential fileを必須として復元し、復元先pathを変える 場合は対応するOPENFACE_MCP_*_FILE変数を渡します。secretはmanifestとGitへ 出しません。

実機検証

移行後にrepository 105件、Issue 53件、repository view 280行、maintenance job 25件を確認しました。QR Code Generator SpaceをLXC内でbuild・起動し、LXCを 完全再起動した後も running へ自動復帰しています。

LAN上のホーム実行中のDocker Space
Proxmox LXCから配信したOpenFaceホームProxmox LXC内で実行中のQR Code Generator

Released under the MIT License. Third-party components retain their own licenses.