ov-server-operate について
本番環境で OpenViking サーバーをデプロイ、管理、保守するための運用ガイドです。設定、起動と停止、データのクリーンアップ、ヘルスチェック、トラブルシューティングの手順を説明します。
主な機能
- 01サーバーと CLI の設定ファイル作成
- 02uv による Python 環境の準備
- 03サーバーの起動と停止
- 04サーバーデータの安全な削除
- 05ヘルスチェックと問題の調査
活用シーン
- 01OpenViking の本番サーバーの準備
- 02サービスの再起動や停止
- 03起動や API キーのエラー調査
- 04サーバーの初期化やストレージ回収
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ volcengine/ openviking --skill ov-server-operateインストール後、Claude Code で/ov-server-operateを入力して読み込まれたか確認します。
詳細
OpenViking サーバーの運用
このガイドでは、本番環境で OpenViking サーバーをデプロイ、管理、保守するための標準的な運用手順を説明します。
目次
- サービスの設定
- uv を使った環境構築
- nohup を使ったサーバーの起動
- サーバーの停止
- データのクリーンアップ手順
- 検証とトラブルシューティング
サービスの設定
デフォルトのパスと構成
OpenViking は ~/.openviking/ 以下に、次の標準ディレクトリ構成を使用します。
~/.openviking/
├── ov.conf # Server configuration (required)
├── ovcli.conf # CLI client configuration
├── ov-venv/ # Virtual environment (created by uv)
├── log/ # Server log directory
│ ├── openviking-server.log # server stdout log
│ └── openviking.log # server log
└── data/ # Workspace data (configured in ov.conf)
├── ...
└── ...
設定ファイル
1. サーバー設定(~/.openviking/ov.conf)
最低限、次の設定を含む設定ファイルを作成します。 注 1:api-key をご自身の api-key に置き換えてください。お持ちでない場合は、ユーザーに取得を依頼してください(Volcengine Ark プラットフォームのガイドに従ってください)。 注 2:root_api_key をご自身の root-api-key に置き換えてください。ユーザーに設定を依頼してください。これは、CLI がサーバーに接続する際の認証に使用されます。
{
"server": {
"host": "0.0.0.0",
"port": 1933,
"root_api_key": "your-root-api-key"
},
"storage": {
"workspace": "~/.openviking/data/"
},
"parsers": {
"code": {
"gitlab_domains": ["code.byted.org"],
"azure_devops_domains": ["ssh.dev.azure.com", "vs-ssh.visualstudio.com"]
}
},
"embedding": {
"dense": {
"model": "doubao-embedding-vision-251215",
"api_key": "your-volcengine-api-key",
"api_base": "https://ark.cn-beijing.volces.com/api/v3",
"dimension": 1024,
"input": "multimodal",
"provider": "volcengine"
}
},
"vlm": {
"model": "doubao-seed-1-8-251228",
"api_key": "your-volcengine-api-key",
"api_base": "https://ark.cn-beijing.volces.com/api/v3",
"temperature": 0.0,
"max_retries": 2,
"provider": "volcengine",
"thinking": false
},
"log": {
"level": "INFO",
"output": "file",
"rotation": true,
"rotation_days": 3,
"rotation_interval": "midnight"
}
}
2. CLI 設定(~/.openviking/ovcli.conf)
localhost からクライアント接続する場合:
{
"url": "http://localhost:1933",
"api_key": "your-root-api-key"
}
リモート接続の場合は、url にリモートサーバーのアドレス(サーバーの EIP など)を設定します。
uv を使った環境構築
手順 1:uv をインストールする(未インストールの場合)
# macOS/Linux
curl -LsSf https://astral.sh/uv/install.sh | sh
# Verify installation
uv --version
手順 2:仮想環境を作成する
~/.openviking/ov-venv に専用の仮想環境を作成します。
# Create venv with Python 3.10+
cd ~/.openviking
uv venv --python 3.12 ov-venv
手順 3:OpenViking を有効化してインストールする
# Activate the virtual environment
source ~/.openviking/ov-venv/bin/activate
# Install or upgrade to latest openviking
uv pip install --upgrade openviking --force-reinstall
# Verify installation
which openviking-server
openviking-server --version
openviking-server --help
手順 4:ログディレクトリを作成する
mkdir -p ~/.openviking/log
nohup を使ったサーバーの起動
標準的な起動手順
# 1. Activate the virtual environment
source ~/.openviking/ov-venv/bin/activate
# 2. Ensure log directory exists
mkdir -p ~/.openviking/log
# 3. Start server with nohup
nohup openviking-server \
> ~/.openviking/log/openviking-server.log 2>&1 &
# 4. Save PID for later reference
echo $! > ~/.openviking/server.pid
# 5. Verify startup after 10 secs
sleep 10
curl -s http://localhost:1933/health
サーバーの稼働を確認する
# Method 1: Check health endpoint
curl http://localhost:1933/health
# Expected: {"status": "ok"}
# Method 2: Check readiness (includes storage checks)
curl http://localhost:1933/ready
# Method 3: Check process
ps aux | grep openviking-server | grep -v grep
# Method 4: Check log output
tail -10 ~/.openviking/log/openviking-server.log
tail -50 ~/.openviking/log/openviking.log
サーバーの停止
安全に停止する手順
# 1. Find the server process
ps aux | grep openviking-server | grep -v grep
# 2. Send SIGTERM for graceful shutdown
# Option A: Using saved PID
if [ -f ~/.openviking/server.pid ]; then
kill $(cat ~/.openviking/server.pid)
rm ~/.openviking/server.pid
fi
# Option B: Using pgrep
pkill -f openviking-server
# 3. Wait for process to stop
sleep 3
# 4. Verify it stopped
ps aux | grep openviking-server | grep -v grep || echo "Server stopped successfully"
# 5. If still running, force kill
if pgrep -f openviking-server > /dev/null; then
echo "Force killing server..."
pkill -9 -f openviking-server
fi
データのクリーンアップ手順
この手順を使用するタイミング
次のような場合は、データを完全にクリーンアップしてください。
- データ形式に互換性のないバージョンへアップグレードする場合
- データが破損している、または一貫性がない場合
- 初期状態にリセットする必要がある場合
- ストレージ領域を確保する場合
標準的なクリーンアップのワークフロー
重要:データを削除する前に、必ずバックアップしてください
# ==========================================
# STEP 1: STOP THE SERVER FIRST
# ==========================================
echo "Step 1: Stopping OpenViking Server..."
if pgrep -f openviking-server > /dev/null; then
pkill -f openviking-server
sleep 3
if pgrep -f openviking-server > /dev/null; then
pkill -9 -f openviking-server
sleep 1
fi
fi
# Verify server is stopped
if pgrep -f openviking-server > /dev/null; then
echo "ERROR: Server still running! Cannot proceed."
exit 1
fi
echo "✓ Server stopped"
# ==========================================
# STEP 2: CREATE BACKUP (REQUIRED)
# ==========================================
echo ""
echo "Step 2: Creating backup..."
BACKUP_DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR=~/.openviking/backup_${BACKUP_DATE}
mkdir -p ${BACKUP_DIR}
# Backup config files
cp ~/.openviking/ov.conf ${BACKUP_DIR}/ 2>/dev/null || true
cp ~/.openviking/ovcli.conf ${BACKUP_DIR}/ 2>/dev/null || true
# Backup workspace (if exists)
WORKSPACE=$(python3 -c '
import json
import os
config_path = os.path.expanduser("~/.openviking/ov.conf")
if os.path.exists(config_path):
with open(config_path) as f:
cfg = json.load(f)
ws = cfg.get("storage", {}).get("workspace", "./data")
print(os.path.expanduser(ws))
' 2>/dev/null || echo "~/.openviking/data")
if [ -d "${WORKSPACE}" ]; then
echo "Backing up workspace: ${WORKSPACE}"
tar -czf ${BACKUP_DIR}/workspace_backup.tar.gz -C $(dirname ${WORKSPACE}) $(basename ${WORKSPACE})
fi
# Backup log
if [ -d ~/.openviking/log ]; then
cp -r ~/.openviking/log ${BACKUP_DIR}/ 2>/dev/null || true
fi
echo "✓ Backup created at: ${BACKUP_DIR}"
ls -lh ${BACKUP_DIR}/
# ==========================================
# STEP 3: CONFIRM DELETION
# ==========================================
echo ""
echo "=========================================="
echo "WARNING: ABOUT TO DELETE ALL DATA!"
echo "=========================================="
echo "Workspace to delete: ${WORKSPACE}"
echo "Backup location: ${BACKUP_DIR}"
echo ""
read -p "Type 'DELETE' to confirm data removal: " CONFIRM
if [ "${CONFIRM}" != "DELETE" ]; then
echo "Cleanup cancelled. Backup preserved at ${BACKUP_DIR}"
exit 0
fi
# ==========================================
# STEP 4: DELETE DATA
# ==========================================
echo ""
echo "Step 4: Deleting data..."
# Delete workspace
if [ -d "${WORKSPACE}" ]; then
echo "Deleting workspace: ${WORKSPACE}"
rm -rf "${WORKSPACE}"
fi
# Optional: Delete old log (uncomment if needed)
# echo "Deleting old log..."
# rm -rf ~/.openviking/log/*
# Cleanup any temporary files
rm -f ~/.openviking/server.pid
echo "✓ Data deleted successfully"
# ==========================================
# STEP 5: COMPLETION
# ==========================================
echo ""
echo "=========================================="
echo "Cleanup Complete!"
echo "=========================================="
echo "Backup preserved at: ${BACKUP_DIR}"
echo ""
echo "Next steps:"
echo "1. Reconfigure ov.conf if needed"
echo "2. Start the server: openviking-server"
echo "3. Verify with: curl http://localhost:1933/health"
echo ""
echo "To restore from backup:"
echo " tar -xzf ${BACKUP_DIR}/workspace_backup.tar.gz -C $(dirname ${WORKSPACE})"
簡易クリーンアップ(開発時のみ)
# WARNING: Only use in development!
# No backup created - data loss guaranteed!
# 1. Stop server
pkill -f openviking-server
sleep 2
pkill -9 -f openviking-server 2>/dev/null || true
# 2. Delete workspace (adjust path as needed)
rm -rf ~/.openviking/data
# 3. Cleanup PID and temp files
rm -f ~/.openviking/server.pid
echo "Quick cleanup complete"
検証とトラブルシューティング
ヘルスチェックの検証
# Basic health check (always available)
curl http://localhost:1933/health
# Expected: {"status": "ok"}
# Readiness check (verifies all components)
curl http://localhost:1933/ready
# Expected: {"status": "ready", "checks": {"agfs": "ok", "vectordb": "ok", "api_key_manager": "ok"}}
# System status via CLI (~/.openviking/ovcli.conf should be configured)
ov status
よくある問題と解決策
問題:サーバーが起動しない
確認事項:
# 1. Check if port is in use
lsof -i :1933
netstat -tulpn | grep 1933
# 2. Check log for errors
tail -10 ~/.openviking/log/openviking-server.log
tail -100 ~/.openviking/log/openviking.log
# 3. Verify config file is valid JSON
python3 -c 'import json, os; json.load(open(os.path.expanduser("~/.openviking/ov.conf"))); print("Config is valid")'
# 4. Verify virtual environment
source ~/.openviking/ov-venv/bin/activate
which openviking-server
pip list | grep openviking
解決策:
# If port conflict: kill the process or use different port
lsof -ti :1933 | xargs kill -9 2>/dev/null || true
# Or start on different port
nohup openviking-server --port 1934 > ~/.openviking/log/openviking-server.log 2>&1 &
問題:API キーのエラー
確認事項:
# Verify API keys in config
python3 -c '
import json, os
cfg = json.load(open(os.path.expanduser("~/.openviking/ov.conf")))
print("Embedding provider:", cfg.get("embedding", {}).get("dense", {}).get("provider"))
print("VLM provider:", cfg.get("vlm", {}).get("provider"))
print("API keys set:", bool(cfg.get("embedding", {}).get("dense", {}).get("api_key")), bool(cfg.get("vlm", {}).get("api_key")))
'
解決策: API キーが正しく、必要な権限を持っていることを確認します。モデルプロバイダーのエンドポイントへのネットワーク接続を確認します。API キーの有効期限が切れていないことを確認します。
前提条件
- Python 3.10+ がインストールされていること
- uv パッケージマネージャーが利用可能であること
- ワークスペースとログに十分なディスク領域があること
- 埋め込みモデルと VLM モデル用の API キーが設定されていること
- モデルプロバイダーへのネットワークアクセスがあること(クラウドモデルを使用する場合)