Files
Pre_Seg_Server/doc/10-installation.md
admin c8c59f7ede feat: 完善分割工作区传播与交互闭环
功能增加:新增后端传播任务执行器,支持异步自动传播、传播进度、结果统计、取消/重试状态同步。

功能增加:传播请求支持指定 SAM2.1 tiny/small/base+/large 权重,并记录 seed mask、source annotation 和传播范围。

功能增加:传播逻辑增加 seed 签名,未变化的 mask 二次传播会跳过,已变化的 mask 会先清理旧自动传播结果再重新生成,避免重复重叠。

功能增加:工作区增加传播范围二次选择、传播进度提示、人工/AI 标注帧红色标识、自动传播帧蓝色标识和当前帧双层边框。

功能增加:新增临时提示组件,让工具操作提示自动消失且不阻塞后续操作。

功能增加:补充项目删除、模板删除、任务失败详情、任务取消/重试等前后端联动状态。

功能增加:新增安装部署文档,补充当前需求冻结、设计冻结、接口契约、测试计划和 AGENTS/README 项目说明。

Bugfix:修复自动传播接口 404、传播后看不到任务进度、传播结果重复堆叠和已编辑帧提示不清晰的问题。

Bugfix:修复 AI 分割框选/点选交互、单候选 mask、删除选点、工作区保存与候选 mask 推送相关问题。

Bugfix:修复 Canvas 多边形顶点拖动告警、工具栏提示缺失、项目库 FPS 展示和若干 UI 文案/可用性问题。

测试:补充 AI 分割、Canvas、Dashboard、FrameTimeline、ProjectLibrary、TemplateRegistry、ToolsPalette、VideoWorkspace、API 和后端任务/AI/dashboard 测试。

验证:npm run lint;npm run test:run;python -m pytest backend/tests -q。
2026-05-02 05:17:18 +08:00

491 lines
9.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Installation / 部署安装指南
本文件记录当前仓库的真实安装和部署方式。它面向一台新的 Linux 机器,目标是跑起完整系统:
- React 前端:默认 `http://localhost:3000`
- FastAPI 后端:默认 `http://localhost:8000`
- PostgreSQL项目、帧、模板、标注、任务元数据
- RedisCelery broker/result backend 与进度 pub/sub
- MinIO视频、DICOM、拆帧图片等对象存储
- Celery worker执行视频/DICOM 拆帧等后台任务
- SAM 2.1:当前产品启用 tiny/small/base+/largeSAM 3 源码保留但产品入口禁用,正常部署不需要安装 SAM 3
---
## 1. 前置条件
推荐环境:
| 项 | 建议 |
|----|------|
| OS | Ubuntu 22.04 LTS 或相近 Linux |
| Python | 3.11 |
| Node.js | 22.x |
| 数据库 | PostgreSQL 14+ |
| 缓存/队列 | Redis 6+ |
| 对象存储 | MinIO |
| 视频处理 | FFmpeg |
| GPU | NVIDIA GPU + CUDA用于 SAM 2.1 推理;无 GPU 时可 CPU 运行但会很慢 |
安装系统依赖:
```bash
sudo apt update
sudo apt install -y \
postgresql postgresql-contrib \
redis-server \
ffmpeg \
libpq-dev build-essential curl ca-certificates gnupg wget
```
安装 MinIO
```bash
cd /tmp
wget https://dl.min.io/server/minio/release/linux-amd64/minio
chmod +x minio
sudo mv minio /usr/local/bin/
mkdir -p ~/minio_data
```
---
## 2. 获取代码
```bash
cd ~/Desktop
git clone <your-gitea-or-git-url> Seg_Server
cd Seg_Server
```
如果已经有仓库,进入项目根目录即可:
```bash
cd /home/wkmgc/Desktop/Seg_Server
```
后续命令默认在项目根目录执行,除非特别说明。
---
## 3. 配置 PostgreSQL
默认后端配置来自 `backend/config.py`
```text
postgresql://seguser:segpass123@localhost:5432/segserver
```
创建数据库和用户:
```bash
sudo systemctl start postgresql
sudo -u postgres psql -c "CREATE DATABASE segserver;"
sudo -u postgres psql -c "CREATE USER seguser WITH PASSWORD 'segpass123';"
sudo -u postgres psql -c "GRANT ALL PRIVILEGES ON DATABASE segserver TO seguser;"
sudo -u postgres psql -d segserver -c "GRANT ALL ON SCHEMA public TO seguser;"
sudo -u postgres psql -c "ALTER DATABASE segserver OWNER TO seguser;"
```
验收:
```bash
pg_isready
psql "postgresql://seguser:segpass123@localhost:5432/segserver" -c "select 1;"
```
---
## 4. 启动 Redis 和 MinIO
Redis
```bash
sudo systemctl start redis-server
redis-cli ping
```
MinIO
```bash
nohup minio server ~/minio_data --console-address :9001 > /tmp/minio.log 2>&1 &
curl http://localhost:9000/minio/health/live
```
默认 MinIO 账号密码是:
```text
minioadmin / minioadmin
```
后端启动时会检查并创建 bucket
```text
seg-media
```
---
## 5. 安装后端 Python 环境
推荐使用 Conda
```bash
conda create -n seg_server python=3.11 -y
conda activate seg_server
```
安装 PyTorch。根据机器 CUDA 版本选择合适 wheel。示例
```bash
# CUDA 12.4 示例
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu124
# 无 GPU / CPU 示例
# pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu
```
安装后端依赖:
```bash
cd backend
pip install -r requirements.txt
cd ..
```
确认关键包:
```bash
python - <<'PY'
import fastapi, sqlalchemy, redis, celery, minio, torch
print("torch:", torch.__version__, "cuda:", torch.cuda.is_available())
PY
```
---
## 6. 配置后端环境变量
后端从 `backend/.env` 读取配置;该文件被 `.gitignore` 忽略,不要提交真实密码或本机路径。
创建 `backend/.env`
```bash
cat > backend/.env <<'EOF'
db_url=postgresql://seguser:segpass123@localhost:5432/segserver
redis_url=redis://localhost:6379/0
minio_endpoint=localhost:9000
minio_access_key=minioadmin
minio_secret_key=minioadmin
minio_secure=false
sam_default_model=sam2.1_hiera_tiny
sam_model_path=/home/wkmgc/Desktop/Seg_Server/models/sam2.1_hiera_tiny.pt
sam_model_config=configs/sam2.1/sam2.1_hiera_t.yaml
app_env=development
cors_origins=["http://localhost:3000","http://127.0.0.1:3000"]
EOF
```
如果前端通过局域网 IP 访问,例如 `http://192.168.3.11:3000`,需要把该地址加入 `cors_origins`,同时前端也要配置 API 地址。
---
## 7. 准备 SAM 2.1 权重
当前产品入口只暴露 SAM 2.1 变体:
- `sam2.1_hiera_tiny`
- `sam2.1_hiera_small`
- `sam2.1_hiera_base_plus`
- `sam2.1_hiera_large`
下载脚本:
```bash
cd backend
python download_sam2.py
cd ..
```
脚本默认下载到:
```text
/home/wkmgc/Desktop/Seg_Server/models/
```
推荐文件名:
```text
models/sam2.1_hiera_tiny.pt
models/sam2.1_hiera_small.pt
models/sam2.1_hiera_base_plus.pt
models/sam2.1_hiera_large.pt
```
可以只部署 tiny前端会显示四个选项但只有本地存在 checkpoint 的模型会显示可用。
注意SAM 3 相关脚本和源码是历史保留。当前前端入口隐藏 SAM 3后端 registry 不暴露 `sam3`,正常部署不需要下载 SAM 3 权重,也不要把 Hugging Face token 写进项目文件。
---
## 8. 安装前端依赖
```bash
npm install
```
如需指定前端访问的后端地址,在项目根目录创建 `.env`
```bash
cat > .env <<'EOF'
VITE_API_BASE_URL=http://localhost:8000
VITE_WS_PROGRESS_URL=ws://localhost:8000/ws/progress
EOF
```
如果不设置,前端会按当前浏览器 hostname 推导:
```text
http://<browser-host>:8000
ws://<browser-host>:8000/ws/progress
```
---
## 9. 手动启动所有服务
开 4 个终端分别启动。
终端 AFastAPI 后端
```bash
conda activate seg_server
cd /home/wkmgc/Desktop/Seg_Server/backend
uvicorn main:app --host 0.0.0.0 --port 8000 --reload
```
终端 BCelery worker
```bash
conda activate seg_server
cd /home/wkmgc/Desktop/Seg_Server/backend
celery -A celery_app:celery_app worker --loglevel=info --concurrency=1
```
终端 C前端开发服务
```bash
cd /home/wkmgc/Desktop/Seg_Server
npm run dev
```
终端 D确认基础设施
```bash
pg_isready
redis-cli ping
curl http://localhost:9000/minio/health/live
```
访问:
| 服务 | 地址 |
|------|------|
| 前端 | `http://localhost:3000` |
| FastAPI Docs | `http://localhost:8000/docs` |
| Health | `http://localhost:8000/health` |
| MinIO Console | `http://localhost:9001` |
默认开发登录:
```text
admin / 123456
```
---
## 10. 一键启动脚本
项目根目录有 `start_services.sh`
```bash
chmod +x start_services.sh
./start_services.sh
```
脚本会检查/启动:
```text
PostgreSQL -> Redis -> MinIO -> FastAPI -> Celery worker -> 前端
```
使用前必须检查脚本里的本机路径和 sudo 逻辑:
- `PROJECT_DIR="/home/wkmgc/Desktop/Seg_Server"`
- `CONDA_ENV="seg_server"`
- MinIO 数据目录 `/home/wkmgc/minio_data`
- 脚本里包含本机 sudo 密码写法,迁移机器时应移除或改成安全的 systemd/service 管理方式
---
## 11. 生产构建方式
前端构建:
```bash
npm run build
```
生产模式启动前端静态服务:
```bash
NODE_ENV=production npm start
```
后端生产启动示例:
```bash
cd backend
uvicorn main:app --host 0.0.0.0 --port 8000
```
Celery worker 仍需要单独启动:
```bash
cd backend
celery -A celery_app:celery_app worker --loglevel=info --concurrency=1
```
实际生产建议用 systemd、supervisor 或容器编排托管 FastAPI、Celery、前端静态服务、MinIO、Redis、PostgreSQL。
---
## 12. 部署验收 Checklist
基础服务:
```bash
pg_isready
redis-cli ping
curl http://localhost:9000/minio/health/live
curl http://localhost:8000/health
```
后端模型状态:
```bash
curl http://localhost:8000/api/ai/models/status
```
前端质量检查:
```bash
npm run lint
npm run test:run
npm run build
```
后端测试:
```bash
conda activate seg_server
python -m pytest backend/tests
```
手工业务验收:
1. 打开 `http://localhost:3000`
2. 使用 `admin / 123456` 登录。
3. 创建项目或上传视频。
4. 在项目库点击“生成帧”,选择 FPS。
5. Dashboard 中应看到任务进度Celery 日志应显示拆帧任务。
6. 进入分割工作区,能看到帧、时间轴和画布。
7. 手工画一个多边形 mask点击“结构化归档保存”。
8. 刷新工作区后,已保存标注应回显。
9. AI 智能分割中选择可用 SAM 2.1 模型,放置点或框,执行分割。
10. 导出 JSON 或 PNG Mask ZIP。
---
## 13. 常见问题
### 前端打不开或请求后端失败
检查:
```bash
curl http://localhost:8000/health
cat .env
```
如果通过局域网 IP 访问前端,确保:
- `.env``VITE_API_BASE_URL` 是浏览器可访问的后端地址。
- `backend/.env``cors_origins` 包含前端地址。
### Dashboard WebSocket 经常断开
检查:
```bash
redis-cli ping
curl http://localhost:8000/health
```
同时确认前端 `VITE_WS_PROGRESS_URL` 指向真实可访问的:
```text
ws://<host>:8000/ws/progress
```
### 生成帧没有进度
检查 Celery worker 是否启动:
```bash
ps aux | grep celery
tail -f /tmp/celery.log
```
检查 Redis
```bash
redis-cli ping
```
### MinIO 上传失败
检查:
```bash
curl http://localhost:9000/minio/health/live
tail -f /tmp/minio.log
```
如果磁盘空间不足MinIO 可能拒绝写入。清理 `~/minio_data`、旧日志、旧模型权重或迁移数据目录。
### SAM 2 模型不可用
检查:
```bash
ls -lh models/
curl http://localhost:8000/api/ai/models/status
```
常见原因:
- checkpoint 文件不存在。
- `backend/.env``sam_model_path` 指向旧文件名。
- `sam2` Python 包未正确安装。
- PyTorch/CUDA 不匹配。
### 不需要 SAM 3
当前版本不用 SAM 3。不要为了正常部署执行 `backend/setup_sam3_env.sh`,也不要在项目里保存 Hugging Face token。