---
document_type: "installation_guide"
service: "MOMENTRY_CORE"
title: "Momentry Core API 安裝指南 (本地部署)"
date: "2026-03-23"
version: "V1.0"
status: "active"
owner: "Warren"
created_by: "OpenCode"
tags:
  - "momentry-core"
  - "api-server"
  - "rust"
  - "macos"
ai_query_hints:
  - "如何安裝 Momentry Core API？"
  - "API 伺服器啟動命令為何？"
  - "如何配置 API 環境變數？"
---

# Momentry Core API 安裝指南 (本地部署)

| 項目 | 內容 |
|------|------|
| 建立者 | OpenCode |
| 建立時間 | 2026-03-23 |
| 文件版本 | V1.0 |

---

## 版本歷史

| 版本 | 日期 | 目的 | 操作人 | 工具/模型 |
|------|------|------|--------|-----------|
| V1.0 | 2026-03-23 | 創建文件 | OpenCode | - |

---

## 概述

本文檔說明如何在 macOS 上安裝 Momentry Core API 服務，配置為本地部署，並設定開機自動啟動。

Momentry Core API 是一個 Rust 編寫的數位資產管理 API 服務，提供：
- 影片搜尋 API (`/api/v1/search`)
- n8n 整合 API (`/api/v1/n8n/search`)
- 健康檢查端點 (`/health`)
- 影片註冊與處理功能

---

## 當前狀態

| 項目 | 狀態 |
|------|------|
| Momentry Core API | ✅ 已安裝 v0.1.0 |
| Binary | `/Users/accusys/momentry_core_0.1/target/release/momentry` |
| Port | 3002 |
| 反向代理 | Caddy (`api.momentry.ddns.net`) |
| 數據庫 | PostgreSQL (momentry) |
| 向量庫 | Qdrant |
| Cache | Redis |
| launchd plist | ✅ 已建立 (/Library/LaunchDaemons/com.momentry.api.plist) |

---

## 系統需求

### 必要服務

| 服務 | 版本 | 用途 |
|------|------|------|
| PostgreSQL | 16+ | 主數據庫 |
| Redis | 1.0+ | 快取與佇列 |
| Qdrant | 1.7+ | 向量搜尋 |
| Ollama | 最新 | LLM 與 Embedding |

### Rust 環境

```bash
# 檢查 Rust 版本
rustc --version
cargo --version

# 如需安裝 Rust
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
```

---

## 安裝步驟

### Step 1: 編譯 Momentry Core

```bash
# 進入專案目錄
cd /Users/accusys/momentry_core_0.1

# 編譯 release 版本
cargo build --release

# 驗證編譯結果
ls -la target/release/momentry
```

---

### Step 2: 設定環境變數

建立環境變數檔案：

```bash
# 建立執行目錄
mkdir -p /Users/accusys/momentry_core_0.1/momentry_runtime/env

# 建立環境變數檔案
cat > /Users/accusys/momentry_core_0.1/momentry_runtime/env/momentry.env << 'EOF'
# Database Configuration
DATABASE_URL=postgres://accusys@localhost:5432/momentry

# Redis Configuration
REDIS_URL=redis://:accusys@localhost:6379
REDIS_PASSWORD=accusys

# API Server
API_HOST=127.0.0.1
API_PORT=3002

# Ollama (LLM)
OLLAMA_HOST=http://localhost:11434

# Qdrant (Vector Database)
QDRANT_URL=http://localhost:6333
QDRANT_COLLECTION=momentry_chunks
EOF
```

---

### Step 3: 手動啟動服務

```bash
# 啟動 API 服務
cd /Users/accusys/momentry_core_0.1
./target/release/momentry server --port 3002

# 驗證服務
curl http://localhost:3002/health
# {"status":"ok","version":"0.1.0","uptime_ms":1234}
```

---

### Step 4: 設定 Caddy 反向代理

在 `/Users/accusys/momentry/etc/Caddyfile` 中新增：

```caddy
# Momentry Core API
api.momentry.ddns.net {
    reverse_proxy localhost:3002
    import common_log momentry_api_access
}
```

重新載入 Caddy：

```bash
# 重新載入配置
caddy reload --config /Users/accusys/momentry/etc/Caddyfile

# 驗證
curl -sk https://api.momentry.ddns.net/health
```

---

### Step 5: 建立 launchd plist (開機自動啟動)

建立 plist 檔案：

```bash
sudo tee /Library/LaunchDaemons/com.momentry.api.plist << 'EOF'
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.momentry.api</string>
    
    <key>UserName</key>
    <string>accusys</string>
    
    <key>GroupName</key>
    <string>staff</string>
    
    <key>WorkingDirectory</key>
    <string>/Users/accusys/momentry_core_0.1</string>
    
    <key>ProgramArguments</key>
    <array>
        <string>/Users/accusys/momentry_core_0.1/target/release/momentry</string>
        <string>server</string>
        <string>--port</string>
        <string>3002</string>
    </array>
    
    <key>EnvironmentVariables</key>
    <dict>
        <key>PATH</key>
        <string>/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin</string>
        
        <key>DATABASE_URL</key>
        <string>postgres://accusys@localhost:5432/momentry</string>
        
        <key>REDIS_URL</key>
        <string>redis://:accusys@localhost:6379</string>
        
        <key>REDIS_PASSWORD</key>
        <string>accusys</string>
        
        <key>OLLAMA_HOST</key>
        <string>http://localhost:11434</string>
        
        <key>QDRANT_URL</key>
        <string>http://localhost:6333</string>
    </dict>
    
    <key>RunAtLoad</key>
    <true/>
    
    <key>KeepAlive</key>
    <true/>
    
    <key>StandardOutPath</key>
    <string>/Users/accusys/momentry/log/momentry_api.log</string>
    
    <key>StandardErrorPath</key>
    <string>/Users/accusys/momentry/log/momentry_api.error.log</string>
</dict>
</plist>
EOF
```

建立日誌檔案：

```bash
# 建立日誌目錄（如不存在）
mkdir -p /Users/accusys/momentry/log

# 建立日誌檔案
touch /Users/accusys/momentry/log/momentry_api.log
touch /Users/accusys/momentry/log/momentry_api.error.log

# 設定權限
chown accusys:staff /Users/accusys/momentry/log/momentry_api.log
chown accusys:staff /Users/accusys/momentry/log/momentry_api.error.log
```

載入服務：

```bash
# 載入服務
sudo launchctl load /Library/LaunchDaemons/com.momentry.api.plist

# 驗證服務
launchctl list | grep momentry.api

# 檢查服務狀態
curl http://localhost:3002/health
```

---

## 卸載步驟

### Step 1: 停止並移除服務

```bash
# 停止服務
sudo launchctl unload /Library/LaunchDaemons/com.momentry.api.plist

# 移除 plist
sudo rm /Library/LaunchDaemons/com.momentry.api.plist
```

### Step 2: 移除 Caddy 配置

從 `/Users/accusys/momentry/etc/Caddyfile` 中移除 `api.momentry.ddns.net` 區塊。

```bash
# 重新載入 Caddy
caddy reload --config /Users/accusys/momentry/etc/Caddyfile
```

---

## 故障排除

### API 返回 502 Bad Gateway

**問題**: `api.momentry.ddns.net` 返回 502 錯誤

**原因**: Momentry Core API 服務未啟動

**解決方案**:

```bash
# 檢查服務狀態
launchctl list | grep momentry.api

# 如服務未啟動，手動啟動
sudo launchctl load /Library/LaunchDaemons/com.momentry.api.plist

# 或手動啟動測試
cd /Users/accusys/momentry_core_0.1
./target/release/momentry server --port 3002
```

---

### API 返回 404 Not Found

**問題**: 端點返回 404

**原因**: Binary 過舊，缺少該端點

**解決方案**:

```bash
# 重新編譯
cd /Users/accusys/momentry_core_0.1
cargo build --release

# 重啟服務
sudo launchctl unload /Library/LaunchDaemons/com.momentry.api.plist
sudo launchctl load /Library/LaunchDaemons/com.momentry.api.plist
```

---

### 服務無法啟動

**問題**: launchd 無法啟動服務

**檢查步驟**:

```bash
# 檢查日誌
tail -50 /Users/accusys/momentry/log/momentry_api.error.log

# 檢查 plist 語法
plutil -lint /Library/LaunchDaemons/com.momentry.api.plist

# 檢查權限
ls -la /Users/accusys/momentry_core_0.1/target/release/momentry

# 手動測試
/Users/accusys/momentry_core_0.1/target/release/momentry server --port 3002
```

---

## 檔案位置

| 類型 | 路徑 | 說明 |
|------|------|------|
| Binary | `/Users/accusys/momentry_core_0.1/target/release/momentry` | 執行檔 |
| 環境變數 | `/Users/accusys/momentry_core_0.1/momentry_runtime/env/momentry.env` | 環境設定 |
| launchd plist | `/Library/LaunchDaemons/com.momentry.api.plist` | 開機啟動配置 |
| 日誌 | `/Users/accusys/momentry/log/momentry_api.log` | 標準輸出 |
| 錯誤日誌 | `/Users/accusys/momentry/log/momentry_api.error.log` | 錯誤輸出 |
| Caddy 配置 | `/Users/accusys/momentry/etc/Caddyfile` | 反向代理配置 |

---

## 常用指令

### 服務管理

```bash
# 啟動服務
sudo launchctl load /Library/LaunchDaemons/com.momentry.api.plist

# 停止服務
sudo launchctl unload /Library/LaunchDaemons/com.momentry.api.plist

# 重啟服務
sudo launchctl unload /Library/LaunchDaemons/com.momentry.api.plist
sudo launchctl load /Library/LaunchDaemons/com.momentry.api.plist

# 檢查服務狀態
launchctl list | grep momentry.api
```

### 健康檢查

```bash
# 本地健康檢查
curl http://localhost:3002/health

# 詳細健康檢查
curl http://localhost:3002/health/detailed

# 外部健康檢查
curl -sk https://api.momentry.ddns.net/health
```

### API 測試

```bash
# 搜尋 API
curl -X POST http://localhost:3002/api/v1/search \
  -H "Content-Type: application/json" \
  -d '{"query":"test"}'

# n8n 搜尋 API
curl -X POST http://localhost:3002/api/v1/n8n/search \
  -H "Content-Type: application/json" \
  -d '{"query":"test"}'

# 列出影片
curl http://localhost:3002/api/v1/videos
```

### 日誌查看

```bash
# 查看最近的日誌
tail -50 /Users/accusys/momentry/log/momentry_api.log

# 即時監控日誌
tail -f /Users/accusys/momentry/log/momentry_api.log

# 查看錯誤日誌
tail -50 /Users/accusys/momentry/log/momentry_api.error.log
```

### 重新編譯

```bash
# 編譯 release 版本
cd /Users/accusys/momentry_core_0.1
cargo build --release

# 編譯後重啟服務
sudo launchctl unload /Library/LaunchDaemons/com.momentry.api.plist
sudo launchctl load /Library/LaunchDaemons/com.momentry.api.plist
```

---

## API 端點

完整端點清單請參考 [API_REFERENCE.md](../REFERENCE/API_REFERENCE.md)。

**快速總覽**:

| 類別 | 端點數 | 說明 |
|------|--------|------|
| Health & Stats | 5 | 健康檢查與統計（公開） |
| Core Asset | 6 | 影片註冊、查詢、進度 |
| Processing | 7 | 探針、處理、任務 |
| Search | 7 | 向量、BM25、混合搜索 |
| Visual Chunk | 5 | 視覺分片搜索 |
| Face Recognition | 7 | 人臉識別 |
| Person Identity | 21 | 人物身份管理 |
| Global Identities | 6 | 全局身份 |
| Identity Binding | 6 | 身份綁定 |
| Configuration | 1 | 緩存配置 |
| **Total** | **71** | **可達端點** |

---

## 版本資訊

- 版本: 0.1.0
- 安裝日期: 2026-03-23
- Rust 版本: 1.xx
- 文件更新: 2026-03-23

---

## 相關文件

- `docs_v1.0/REFERENCE/SERVICES.md` - 服務總覽
- `docs_v1.0/REFERENCE/API_REFERENCE.md` - API 參考
- `docs_v1.0/IMPLEMENTATION/INSTALL_POSTGRESQL.md` - PostgreSQL 安裝
- `docs_v1.0/IMPLEMENTATION/INSTALL_REDIS.md` - Redis 安裝
- `docs_v1.0/IMPLEMENTATION/INSTALL_QDRANT.md` - Qdrant 安裝
- `docs_v1.0/REFERENCE/PENDING_ISSUES.md` - 待解決問題
