docs: 新增 README + 更新 Deploy.md + 整理 .gitignore

- 新增 README.md 完整项目概览(架构、功能、快速开始)
- 更新 Deploy.md 修正过时的服务状态和端口信息
- 整理 .gitignore 补充缺失规则并移除无效项

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
2026-05-22 19:59:47 +08:00
parent e83f28d646
commit 8c19b79a02
5 changed files with 349 additions and 328 deletions
+45 -33
View File
@@ -1,29 +1,17 @@
# ========== 依赖 ==========
node_modules/
# ========== 构建产物 ==========
dist/
.env
backend/.env
*.log
data/
docs/
.DS_Store
dev_must_read.md
scripts/tunnel.sh
.debug/
*.exe
# Test scripts
test/
# DevTools
devtools/node_modules/
devtools/logs/
devtools/package-lock.json
# Go 编译二进制 (模块根 + cmd/ 内产出)
# ========== Go 编译二进制 ==========
backend/ai-core/main
backend/ai-core/cmd/main
backend/ai-core/ai-core
backend/gateway/main
backend/gateway/cmd/main
backend/gateway/cmd/gateway
backend/gateway/gateway
backend/iot-debug-service/main
backend/iot-debug-service/cmd/main
@@ -32,25 +20,49 @@ backend/memory-service/main
backend/memory-service/cmd/main
backend/memory-service/memory-service
backend/tool-engine/main
backend/tool-engine/cmd/main
backend/tool-engine/cmd/tool-engine
backend/tool-engine/tool-engine
backend/voice-service/voice-service
backend/voice-service/cmd/voice-service
# Compiled binaries (voice-service)
backend/voice-service/main
backend/voice-service/main2
backend/voice-service/voice-svc-new
backend/voice-service/cmd/main
backend/voice-service/cmd/voice-service
backend/voice-service/voice-service
backend/cmd/
# Compiled binaries (gateway)
backend/gateway/cmd/gateway
# Stale build artifact (legacy)
backend/cmd
# 用户上传文件
# ========== 运行时数据 ==========
logs/
*.log
*.pid
uploads/
backend/gateway/uploads/
data/
# Voice Service 外部依赖 (C++编译产物 / 模型文件)
# ========== 环境与敏感配置 ==========
.env
backend/.env
.claude/
# ========== 文档 (项目规范:docs/ 不纳入版本管理) ==========
docs/
# ========== 调试临时文件 (项目规范:debug/cache/ 为临时脚本目录) ==========
debug/cache/
debug/logs/
# ========== DevTools 运行时 ==========
devtools/node_modules/
devtools/logs/
devtools/package-lock.json
# ========== 语音服务外部依赖 (C++ 编译产物 / 模型文件) ==========
backend/voice-service/whisper.cpp/
backend/voice-service/models/
backend/voice-service/models/
# ========== 打包归档 ==========
*.tar.gz
*.zip
# ========== 平台杂项 ==========
.DS_Store
Thumbs.db
scripts/tunnel.sh
+130 -52
View File
@@ -1,106 +1,184 @@
# Cyrene 部署指南
## 环境要求
- Go 1.21+
- Node.js 20+
- Docker & Docker Compose
## 快速启动
### 1. 启动基础设施
基础设施包括 PostgreSQL (pgvector)、Redis、Qdrant (向量数据库)、MinIO (对象存储) 和 NATS (消息队列)。
### 1. 环境变量配置
```bash
docker-compose -f docker-compose.dev.db.yml up -d
cp backend/.env.example backend/.env
# 编辑 backend/.env,至少配置 LLM_API_KEY
```
### 2. 编译并启动后端服务
### 2. 启动基础设施
```bash
# AI-Core (LLM 推理服务)
docker compose -f docker-compose.dev.db.yml up -d
```
此命令启动以下服务:
| 服务 | 端口 | 用途 |
|------|------|------|
| PostgreSQL + pgvector | 5432 | 关系数据库与向量检索 |
| Redis | 6379 | 缓存与会话 |
| Qdrant | 6333 (HTTP) / 6334 (gRPC) | 向量数据库 |
| MinIO | 9000 (API) / 9001 (Console) | 对象存储 |
| NATS | 4222 / 8222 (Monitoring) | 消息队列 |
### 3. 启动后端服务
推荐使用 DevTools 一键管理:
```bash
./devtools.sh start all # 编译并顺序启动所有后端 + 前端
./devtools.sh status # 查看各服务运行状态
./devtools.sh restart gateway # 单独重启某个服务
```
或手动逐服务启动(每个在新终端中):
```bash
# 1) 记忆服务
cd backend/memory-service && go build -o main ./cmd/main.go && ./main
# 2) 工具引擎
cd backend/tool-engine && go build -o main ./cmd/main.go && ./main
# 3) IoT 调试服务 (模拟智能家居设备)
cd backend/iot-debug-service && go build -o main ./cmd/main.go && ./main
# 4) 语音服务 (可选,需安装 whisper.cpp)
cd backend/voice-service && go build -o main ./cmd/main.go && ./main
# 5) AI-Core (LLM 推理与对话编排)
cd backend/ai-core && go build -o main ./cmd/main.go && ./main
# Gateway (API 网关)
# 6) Gateway (API 网关,最后启动)
cd backend/gateway && go build -o main ./cmd/main.go && ./main
```
### 3. 安装依赖并启动前端
### 4. 启动前端
```bash
cd frontend/web && npm install && npm run dev
```
### 4. 启动 DevTools (可选)
访问 `http://localhost:5173`
### 5. 启动 DevTools 管理面板 (可选)
```bash
cd devtools && npm install && npm start
```
访问 `http://localhost:9090`
## 使用 Docker Compose 完整启动
```bash
docker-compose -f docker-compose.dev.yml up -d
```
此命令将启动所有基础设施服务以及 AI-Core 和 Gateway 后端服务。
## 生产环境部署
### 开发环境
```bash
docker-compose -f docker-compose.yml up -d
docker compose -f docker-compose.dev.yml up -d
```
生产环境额外包含 Caddy 反向代理(自动 TLS)
启动所有基础设施 + 6 个后端服务(AI-Core、Gateway、Memory Service、Tool Engine、Voice Service、IoT Debug Service),前端仍需本地启动
## 环境变量
### 生产环境
参考 `backend/.env.example` 配置以下变量:
```bash
docker compose up -d
```
| 变量 | 说明 |
|------|------|
| `ENV` | 运行环境 (`development` / `production`) |
| `LLM_API_URL` | LLM API 地址 |
| `LLM_API_KEY` | LLM API 密钥 |
| `LLM_MODEL` | 主模型 (默认 `gpt-4o`) |
| `LLM_FALLBACK_MODEL` | 回退模型 (默认 `gpt-4o-mini`) |
| `POSTGRES_HOST` / `POSTGRES_PORT` / `POSTGRES_USER` / `POSTGRES_PASSWORD` / `POSTGRES_DB` | PostgreSQL 连接信息 |
| `REDIS_HOST` / `REDIS_PORT` / `REDIS_PASSWORD` | Redis 连接信息 |
| `JWT_SECRET` | JWT 签名密钥 |
| `JWT_EXPIRY_HOURS` | JWT 过期时间 (默认 720 小时) |
| `MINIO_ENDPOINT` / `MINIO_ACCESS_KEY` / `MINIO_SECRET_KEY` / `MINIO_BUCKET` | MinIO 对象存储配置 |
| `VECTOR_DB_URL` / `VECTOR_DB_COLLECTION` | Qdrant 向量数据库配置 |
| `ADMIN_USERNAME` / `ADMIN_PASSWORD` | 管理员账户 (开发阶段) |
| `TTS_PROVIDER` / `TTS_VOICE` | TTS 语音合成配置 |
| `ASR_PROVIDER` / `ASR_MODEL` | ASR 语音识别配置 |
额外包含 Caddy 反向代理(自动 TLS),前端静态文件由 Gateway 直接托管。
## 项目
## 项目
```
Cyrene/
├── frontend/web/ # React 前端 (Vite + TypeScript)
├── backend/ai-core/ # AI 推理核心 (LLM 对话、记忆、人设)
├── backend/gateway/ # API 网关 (路由、鉴权、WebSocket)
├── backend/memory-service/ # 记忆服务 (规划中)
├── backend/tool-engine/ # 工具引擎 (规划中)
├── backend/voice-service/ # 语音服务 (规划中)
├── backend/proto/ # Protobuf 定义 (规划中)
├── devtools/ # 管理面板
└── scripts/ # 辅助脚本
├── frontend/web/ # React 前端 (Vite + TypeScript + Tailwind + Zustand)
├── backend/
│ ├── ai-core/ # AI 推理核心 (LLM 对话编排、人设注入、工具调用、后台思考)
│ ├── gateway/ # API 网关 (JWT 认证、路由、限流、WebSocket Hub)
│ ├── memory-service/ # 记忆服务 (CRUD、语义检索、LLM 提取)
│ ├── tool-engine/ # 工具引擎 (12+ 内置工具:计算器、HTTP、IoT、文件等)
│ ├── voice-service/ # 语音服务 (Edge-TTS + Whisper STT)
│ ├── iot-debug-service/ # IoT 调试服务 (8 个模拟设备:灯/空调/窗帘/传感器/门锁)
│ └── proto/ # Protobuf 定义 (预留)
├── devtools/ # 开发管理面板 (Express)
├── scripts/ # 辅助脚本
├── test/ # E2E 测试 (CDP/Chromium)
├── docs/ # 文档与调试记录
├── debug/ # 诊断脚本
├── docker-compose.dev.db.yml # 开发基础设施 (仅 DB)
├── docker-compose.dev.yml # 开发环境 (DB + 后端服务)
├── docker-compose.yml # 生产环境 (DB + 后端 + Caddy)
└── Caddyfile # 反向代理配置
```
## 端口
## 服务端口
| 端口 | 服务 |
|------|------|
| 5173 | 前端开发服务器 (Vite) |
| 5173 | 前端 (Vite) |
| 8080 | Gateway API |
| 8081 | AI-Core API |
| 3001 | DevTools 管理面板 |
| 8083 | IoT 调试服务 |
| 8091 | 记忆服务 |
| 8092 | 工具引擎 |
| 8093 | 语音服务 |
| 9090 | DevTools 管理面板 |
| 5432 | PostgreSQL |
| 6379 | Redis |
| 6333 | Qdrant HTTP API |
| 6334 | Qdrant gRPC API |
| 9000 | MinIO S3 API |
| 6333 | Qdrant HTTP |
| 6334 | Qdrant gRPC |
| 9000 | MinIO S3 |
| 9001 | MinIO Console |
| 4222 | NATS |
| 8222 | NATS HTTP Monitoring |
| 8222 | NATS Monitoring |
## 环境变量
参考 `backend/.env.example`
| 变量 | 说明 | 默认值 |
|------|------|--------|
| `ENV` | 运行环境 | `development` |
| `LLM_API_URL` | LLM API 地址 | `https://api.openai.com/v1` |
| `LLM_API_KEY` | LLM API 密钥 | — |
| `LLM_MODEL` | 主模型 | `gpt-4o` |
| `LLM_FALLBACK_MODEL` | 回退模型 | `gpt-4o-mini` |
| `POSTGRES_HOST` | PostgreSQL 主机 | `localhost` |
| `POSTGRES_PORT` | PostgreSQL 端口 | `5432` |
| `POSTGRES_USER` | PostgreSQL 用户 | `cyrene` |
| `POSTGRES_PASSWORD` | PostgreSQL 密码 | — |
| `POSTGRES_DB` | PostgreSQL 库名 | `cyrene_ai` |
| `REDIS_HOST` | Redis 主机 | `localhost` |
| `REDIS_PORT` | Redis 端口 | `6379` |
| `JWT_SECRET` | JWT 签名密钥 | — |
| `JWT_EXPIRY_HOURS` | JWT 过期时间 | `720` |
| `MINIO_ENDPOINT` | MinIO 地址 | `localhost:9000` |
| `MINIO_ACCESS_KEY` | MinIO Access Key | — |
| `MINIO_SECRET_KEY` | MinIO Secret Key | — |
| `VECTOR_DB_URL` | Qdrant 地址 | `http://localhost:6333` |
| `ADMIN_USERNAME` | 管理员账户 | `admin` |
| `ADMIN_PASSWORD` | 管理员密码 | — |
| `ADMIN_NICKNAME` | 昔涟对管理员的称呼 | `管理员` |
| `REGISTRATION_ENABLED` | 开放注册 | `true` |
| `ENABLE_BACKGROUND_THINKING` | 后台思考 | `true` |
| `INTERNAL_SERVICE_TOKEN` | 内部服务通信 Token | — |
| `WEBHOOK_API_KEY` | Webhook API Key | — |
| `IOT_SERVICE_URL` | IoT 服务地址 | `http://localhost:8083` |
| `TTS_PROVIDER` | TTS 引擎 | `edge-tts` |
| `TTS_VOICE` | TTS 语音 | `zh-CN-XiaoxiaoNeural` |
| `ASR_PROVIDER` | ASR 引擎 | `faster-whisper` |
| `ASR_MODEL` | ASR 模型 | `medium` |
## 平台迁移
从 Linux 迁移到 Windows 的详细指南见 [Migration.md](Migration.md)。
+173
View File
@@ -0,0 +1,173 @@
# Cyrene (昔涟) — AI 伙伴平台
昔涟是一个开源的 AI 伙伴平台,提供多人格对话、IoT 设备操控、记忆管理、自动化规则、知识库、语音交互等功能。
## 架构
```
┌─────────────────────────────────────────────────────────┐
│ Frontend (React + Vite) │
│ localhost:5173 │
└─────────────────────┬───────────────────────────────────┘
│ HTTP + WebSocket
┌─────────────────────▼───────────────────────────────────┐
│ Gateway (Go/Gin) │
│ localhost:8080 │
│ JWT Auth · Rate Limit · WS Hub · API 路由 │
└──┬────────┬────────┬────────┬────────┬────────┬────────┘
│ │ │ │ │ │
▼ ▼ ▼ ▼ ▼ ▼
┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐ ┌──────────┐
│ AI │ │Memory│ │Tool │ │Voice │ │ IoT │ │ Infra │
│ Core │ │Svc │ │Engine│ │Svc │ │Debug │ │ │
│:8081 │ │:8091 │ │:8092 │ │:8093 │ │:8083 │ │ PG:5432 │
│ │ │ │ │ │ │ │ │ │ │ Redis │
│ LLM │ │CRUD │ │执行 │ │STT/ │ │模拟 │ │ :6379 │
│ 编排 │ │检索 │ │工具 │ │TTS │ │设备 │ │ Qdrant │
│ 人设 │ │ │ │调用 │ │ │ │管理 │ │ :6333 │
│ 工具 │ │ │ │ │ │ │ │ │ │ MinIO │
│ 后台 │ │ │ │ │ │ │ │ │ │ :9000 │
│ 思考 │ │ │ │ │ │ │ │ │ │ NATS │
└──────┘ └──────┘ └──────┘ └──────┘ └──────┘ └──────────┘
```
## 功能
- **多人格对话** — 可配置的角色扮演系统,带上下文构建和子会话路由
- **IoT 操控** — 模拟智能家居设备(灯、空调、窗帘、传感器、门锁),支持语音/文本控制
- **记忆管理** — LLM 驱动的长期记忆提取、存储和检索(PostgreSQL + pgvector
- **自动化** — 规则引擎 + 场景执行(定时、条件触发、Webhook)
- **每日简报** — 定时生成当日汇总
- **提醒** — 创建/管理定时提醒,到期 WebSocket 推送
- **知识库** — 文档管理 + 向量检索
- **文件管理** — 上传、下载、缩略图、图片 AI 分析
- **语音交互** — 浏览器端 STTWeb Speech API+ TTS,服务端支持 Whisper
- **WebSocket** — 实时消息推送、IoT 状态广播、通知
- **PWA** — 可安装为桌面/移动应用,离线支持
- **后台思考** — AI 在对话间隙自主进行反思和记忆整理
- **Webhook 接入** — 支持 Discord、通用 Webhook 第三方平台接入
## 项目结构
```
Cyrene/
├── frontend/
│ ├── web/ # React 前端 (Vite + TypeScript + Tailwind)
│ └── packages/shared/ # 共享类型/工具
├── backend/
│ ├── ai-core/ # AI 推理核心 (LLM 编排、人设注入、工具调用、后台思考)
│ ├── gateway/ # API 网关 (JWT 认证、路由、限流、WebSocket Hub)
│ ├── memory-service/ # 记忆服务 (CRUD、检索、LLM 提取)
│ ├── tool-engine/ # 工具引擎 (计算器、HTTP、IoT、文件操作等)
│ ├── voice-service/ # 语音服务 (TTS/STT,基于 Edge-TTS + Whisper)
│ ├── iot-debug-service/# IoT 调试服务 (模拟智能家居设备)
│ └── proto/ # Protobuf 定义 (预留)
├── devtools/ # 开发管理面板 (Express,服务管理/日志/性能)
├── scripts/ # 辅助脚本 (Whisper 安装、SSH 隧道、数据迁移)
├── test/ # E2E 测试脚本 (CDP/Chromium)
├── docs/ # 项目文档与调试记录
├── debug/ # 诊断与缓存脚本
├── docker-compose.dev.db.yml # 开发环境基础设施 (仅 DB)
├── docker-compose.dev.yml # 开发环境一键启动
├── docker-compose.yml # 生产环境 (含 Caddy)
└── Caddyfile # 反向代理配置
```
## 快速开始
### 前提条件
- Go 1.21+
- Node.js 20+
- Docker & Docker Compose
### 1. 启动基础设施
```bash
docker compose -f docker-compose.dev.db.yml up -d
```
启动 PostgreSQL (pgvector)、Redis、Qdrant、MinIO、NATS。
### 2. 启动后端服务
使用 DevTools 一键管理:
```bash
./devtools.sh start all # 编译并启动所有后端 + 前端
./devtools.sh status # 查看服务状态
./devtools.sh logs ai-core # 查看 AI-Core 日志
```
或手动逐个启动:
```bash
# 编译并运行各服务
cd backend/memory-service && go run ./cmd/main.go &
cd backend/tool-engine && go run ./cmd/main.go &
cd backend/iot-debug-service && go run ./cmd/main.go &
cd backend/voice-service && go run ./cmd/main.go &
cd backend/ai-core && go run ./cmd/main.go &
cd backend/gateway && go run ./cmd/main.go &
```
### 3. 启动前端
```bash
cd frontend/web && npm install && npm run dev
```
访问 `http://localhost:5173`,默认管理员账户 `admin` / `cyrene-dev-admin`
### 4. 配置环境变量
```bash
cp backend/.env.example backend/.env
# 编辑 backend/.env,填入 LLM API Key 等必要配置
```
## 服务端口
| 端口 | 服务 |
|------|------|
| 5173 | 前端 (Vite dev server) |
| 8080 | Gateway API |
| 8081 | AI-Core (LLM 推理) |
| 8083 | IoT 调试服务 |
| 8091 | 记忆服务 |
| 8092 | 工具引擎 |
| 8093 | 语音服务 |
| 9090 | DevTools 管理面板 |
| 5432 | PostgreSQL |
| 6379 | Redis |
| 6333 | Qdrant HTTP |
| 6334 | Qdrant gRPC |
| 9000 | MinIO S3 |
| 9001 | MinIO Console |
| 4222 | NATS |
| 8222 | NATS Monitoring |
## 技术栈
| 层 | 技术 |
|----|------|
| 前端 | React 18, TypeScript, Vite, Tailwind CSS, Zustand |
| 后端 | Go, Gin, net/http |
| 数据库 | PostgreSQL + pgvector |
| 缓存 | Redis |
| 向量库 | Qdrant |
| 对象存储 | MinIO |
| 消息队列 | NATS |
| 反向代理 | Caddy (生产环境) |
| 语音 | Edge-TTS / Whisper.cpp |
## 部署
- 开发环境:`docker compose -f docker-compose.dev.yml up -d`
- 生产环境:`docker compose up -d`(含 Caddy 反向代理 + 自动 TLS
详见 [Deploy.md](Deploy.md) 和 [Migration.md](Migration.md)Linux → Windows 迁移指南)。
## License
MIT
-242
View File
@@ -1,242 +0,0 @@
#!/bin/bash
# ==================== 配置 ====================
ROOT_HOST="${CHROMIUM_MANAGER_HOST:-127.0.0.1}"
ROOT_PORT="${CHROMIUM_MANAGER_PORT:-19520}"
BASE_URL="http://$ROOT_HOST:$ROOT_PORT"
# ==================== 颜色 ====================
GREEN='\033[0;32m'
RED='\033[0;31m'
YELLOW='\033[1;33m'
CYAN='\033[0;36m'
NC='\033[0m'
# ==================== 帮助 ====================
show_help() {
cat << EOF
${CYAN}Chromium 调试管理器${NC}
用法: ./chromium_debugging.sh <命令> [选项]
${GREEN}命令:${NC}
start 启动 Chromium(带 GUI,显示在 root 桌面)
stop 停止 Chromium
restart 重启 Chromium
status 查看 Chromium 状态
debug-url 获取 WebSocket 调试地址(给 VS Code 插件用)
log 查看 Chromium 日志(默认最近 50 行)
log -f 实时跟踪日志
help 显示此帮助
${YELLOW}环境变量:${NC}
CHROMIUM_MANAGER_HOST 管理服务地址(默认 127.0.0.1)
CHROMIUM_MANAGER_PORT 管理服务端口(默认 19520)
${CYAN}示例:${NC}
./chromium_debugging.sh start # 启动 Chromium
./chromium_debugging.sh status # 查看状态
./chromium_debugging.sh debug-url # 获取调试地址
EOF
}
# ==================== API 调用 ====================
call_api() {
local ENDPOINT="$1"
local RESULT
local HTTP_CODE
RESULT=$(curl -s -w "\n%{http_code}" -X GET "$BASE_URL$ENDPOINT" 2>/dev/null)
HTTP_CODE=$(echo "$RESULT" | tail -1)
RESULT=$(echo "$RESULT" | sed '$d')
if [ "$HTTP_CODE" != "200" ]; then
echo "{\"status\":\"error\",\"message\":\"连接管理服务失败 ($HTTP_CODE),请确认 root 上已运行 chromium-manager.sh\"}"
return 1
fi
echo "$RESULT"
return 0
}
# ==================== 命令实现 ====================
cmd_start() {
echo -e "${YELLOW}🚀 请求启动 Chromium...${NC}"
local RESULT=$(call_api "/start")
local STATUS=$(echo "$RESULT" | python3 -c "import sys,json;print(json.load(sys.stdin).get('status','unknown'))" 2>/dev/null)
if [ "$STATUS" = "ok" ]; then
local PID=$(echo "$RESULT" | python3 -c "import sys,json;print(json.load(sys.stdin).get('pid',''))" 2>/dev/null)
echo -e "${GREEN}✅ Chromium 已启动 (PID: $PID)${NC}"
echo -e " 调试地址: ${CYAN}http://$ROOT_HOST:9222${NC}"
elif [ "$STATUS" = "error" ]; then
local MSG=$(echo "$RESULT" | python3 -c "import sys,json;print(json.load(sys.stdin).get('message','未知错误'))" 2>/dev/null)
echo -e "${RED}$MSG${NC}"
else
echo -e "${RED}❌ 请求失败${NC}"
echo "$RESULT"
fi
}
cmd_stop() {
echo -e "${YELLOW}🛑 请求停止 Chromium...${NC}"
local RESULT=$(call_api "/stop")
local STATUS=$(echo "$RESULT" | python3 -c "import sys,json;print(json.load(sys.stdin).get('status','unknown'))" 2>/dev/null)
if [ "$STATUS" = "ok" ]; then
echo -e "${GREEN}✅ Chromium 已停止${NC}"
else
local MSG=$(echo "$RESULT" | python3 -c "import sys,json;print(json.load(sys.stdin).get('message','未知错误'))" 2>/dev/null)
echo -e "${YELLOW}⚠️ $MSG${NC}"
fi
}
cmd_restart() {
echo -e "${YELLOW}🔄 请求重启 Chromium...${NC}"
local RESULT=$(call_api "/restart")
local STATUS=$(echo "$RESULT" | python3 -c "import sys,json;print(json.load(sys.stdin).get('status','unknown'))" 2>/dev/null)
if [ "$STATUS" = "ok" ]; then
local PID=$(echo "$RESULT" | python3 -c "import sys,json;print(json.load(sys.stdin).get('pid',''))" 2>/dev/null)
echo -e "${GREEN}✅ Chromium 已重启 (PID: $PID)${NC}"
else
local MSG=$(echo "$RESULT" | python3 -c "import sys,json;print(json.load(sys.stdin).get('message','未知错误'))" 2>/dev/null)
echo -e "${RED}$MSG${NC}"
fi
}
cmd_status() {
local RESULT=$(call_api "/status")
if [ $? -ne 0 ]; then
echo -e "${RED}❌ 无法连接管理服务${NC}"
return 1
fi
local STATUS=$(echo "$RESULT" | python3 -c "import sys,json;print(json.load(sys.stdin).get('status','unknown'))" 2>/dev/null)
if [ "$STATUS" = "running" ]; then
local PID=$(echo "$RESULT" | python3 -c "import sys,json;print(json.load(sys.stdin).get('pid',''))" 2>/dev/null)
echo -e "${GREEN}✅ Chromium 运行中${NC}"
echo -e " PID: ${CYAN}$PID${NC}"
echo -e " 调试端口: ${CYAN}$ROOT_HOST:9222${NC}"
local BROWSER=$(echo "$RESULT" | python3 -c "
import sys,json
data = json.load(sys.stdin)
info = data.get('browser_info', {})
if isinstance(info, dict):
print(f\" 浏览器: {info.get('Browser', '未知')}\")
ua = info.get('User-Agent', '')
if ua:
print(f\" 用户代理: {ua[:80]}...\")
" 2>/dev/null)
echo -e "$BROWSER"
else
echo -e "${YELLOW}⏹️ Chromium 未运行${NC}"
fi
}
cmd_debug_url() {
local RESULT=$(call_api "/status")
if [ $? -ne 0 ]; then return 1; fi
local STATUS=$(echo "$RESULT" | python3 -c "import sys,json;print(json.load(sys.stdin).get('status','unknown'))" 2>/dev/null)
if [ "$STATUS" != "running" ]; then
echo -e "${RED}❌ Chromium 未运行,请先执行 start${NC}"
return 1
fi
# 获取 WebSocket 调试地址
local WS_URL=$(curl -s "http://$ROOT_HOST:9222/json/version" 2>/dev/null | python3 -c "
import sys,json
try:
data = json.load(sys.stdin)
print(data.get('webSocketDebuggerUrl', ''))
except:
print('')
" 2>/dev/null)
local PAGE_WS=$(curl -s "http://$ROOT_HOST:9222/json" 2>/dev/null | python3 -c "
import sys,json
try:
pages = json.load(sys.stdin)
if pages:
print(pages[0].get('webSocketDebuggerUrl', ''))
else:
print('')
except:
print('')
" 2>/dev/null)
if [ -n "$WS_URL" ]; then
echo -e "${GREEN}🔗 调试地址:${NC}"
echo -e " 浏览器: ${CYAN}$WS_URL${NC}"
if [ -n "$PAGE_WS" ]; then
echo -e " 当前页面: ${CYAN}$PAGE_WS${NC}"
fi
echo ""
echo -e "${YELLOW}💡 VS Code 插件配置示例:${NC}"
echo " {"
echo " \"type\": \"chrome\","
echo " \"request\": \"attach\","
echo " \"name\": \"Attach to Chromium\","
echo " \"port\": 9222,"
echo " \"host\": \"$ROOT_HOST\""
echo " }"
else
echo -e "${RED}❌ 无法获取调试地址${NC}"
fi
}
cmd_log() {
# 先看看管理服务能不能返回日志路径
local LOG_PATH=$(curl -s "http://$ROOT_HOST:9222/json/version" 2>/dev/null | python3 -c "
import sys,json
print('ok')
" 2>/dev/null)
if [ $? -ne 0 ] || [ -z "$LOG_PATH" ]; then
echo -e "${YELLOW}⚠️ 无法直接访问日志文件${NC}"
echo " root 上的日志目录: ~/debug/logs/chromium/"
echo " 可以在 root 上用 cat/tail 查看"
return 1
fi
# 通过 Chromium 的 API 简单确认它在运行
echo -e "${YELLOW}📄 日志文件在 root 上: ~/debug/logs/chromium/${NC}"
echo -e " 请在 root 终端查看,或使用 ssh root@localhost 'tail -f ~/debug/logs/chromium/chromium-*.log'"
}
# ==================== 主入口 ====================
case "${1:-help}" in
start)
cmd_start
;;
stop)
cmd_stop
;;
restart)
cmd_restart
;;
status)
cmd_status
;;
debug-url|debug_url|url)
cmd_debug_url
;;
log)
shift
cmd_log "$@"
;;
help|--help|-h)
show_help
;;
*)
echo -e "${RED}未知命令: $1${NC}"
show_help
exit 1
;;
esac
+1 -1
View File
@@ -9,7 +9,7 @@ services:
container_name: cyrene_postgres
environment:
POSTGRES_USER: cyrene
POSTGRES_PASSWORD: change_me
POSTGRES_PASSWORD: cyrene_pass
POSTGRES_DB: cyrene_ai
ports:
- "5432:5432"