ForeignScan Backend 是一款高性能的工业异物检测系统后端服务。该项目基于 Go 语言构建,提供了 RESTful API 接口,用于管理检测场景、处理图像数据流以及与 AI 推理服务的核心交互。
本项目作为 ForeignScan 系统的核心枢纽,连接了前端桌面应用与底层的 AI 检测引擎。它负责处理图像上传与存储、调度检测任务,并确保在工业环境中对缺陷进行精确记录和可追溯管理。
- 场景管理:定义和管理不同的检测场景,支持参考样本维护。
- 图像处理:高效的图像上传、存储及元数据管理,支持按时间与状态的多维度检索。
- AI 调度:与外部 YOLO 检测服务无缝集成,支持实时单图检测与批量离线任务。
- 任务追踪:全链路追踪检测任务状态,支持进度查询与结果持久化。
- API 文档:内置 Swagger UI,方便进行交互式 API 调试。
- 编程语言: Go (1.24+)
- Web 框架: Gin
- 数据库: PostgreSQL
- 容器编排: Docker Compose
- ORM 框架: GORM
- 接口文档: Swagger
推荐优先使用 Docker 版本开发和运行,数据库会随编排自动启动,不再依赖本机单独安装和维护 PostgreSQL。
Linux/macOS:
# 开发环境启动(按顺序:postgres -> healthy -> api)
./scripts/linux/dev-up.sh
# 开发环境重建(先 down,再 build+up,保留 volumes)
./scripts/linux/dev-rebuild.sh
# 开发环境停止
./scripts/linux/dev-down.sh
# 生产环境启动(按顺序:postgres -> healthy -> api)
./scripts/linux/prod-up.sh
# 生产环境重建(先 down,再 build+up,保留 volumes)
./scripts/linux/prod-rebuild.sh
# 生产环境停止
./scripts/linux/prod-down.sh- Docker: 29+
- Docker Compose: v2+
- YOLO 检测服务: 仍为外部依赖,默认地址为
http://host.docker.internal:8077
cp .env.docker.example .env.docker默认会创建以下数据库配置:
POSTGRES_DB=foreignscanPOSTGRES_USER=postgresPOSTGRES_PASSWORD=postgres
脚本会固定执行顺序:
- 先启动
postgres - 等待
postgres变为healthy - 再启动
api
开发版(前台日志可改为 -d 后自行看 logs):
./scripts/linux/dev-up.sh如果你改了 Dockerfile、Compose 配置,或者想整套容器重建但保留数据卷,直接执行:
./scripts/linux/dev-rebuild.sh生产版:
./scripts/linux/prod-up.sh生产版整套重建:
./scripts/linux/prod-rebuild.sh停止服务:
./scripts/linux/dev-down.sh
# 或
./scripts/linux/prod-down.sh./scripts/linux/dev-rebuild.sh / ./scripts/linux/prod-rebuild.sh 会先执行 down --remove-orphans,再执行 up --build,默认保留数据库和上传文件 volumes。
以下命令适用于 Windows 环境(PowerShell/cmd),需在 foreignscan-backend 根目录执行。
开发环境(compose.dev.yml):
# 启动容器
docker compose --env-file .env.docker -f compose.yml -f compose.dev.yml up -d postgres api
# 重新构建容器
docker compose --env-file .env.docker -f compose.yml -f compose.dev.yml down --remove-orphans
docker compose --env-file .env.docker -f compose.yml -f compose.dev.yml up --build -d postgres api
# 重启容器
docker compose --env-file .env.docker -f compose.yml -f compose.dev.yml restart postgres api
# 删除容器(保留数据卷)
docker compose --env-file .env.docker -f compose.yml -f compose.dev.yml down --remove-orphans
# 如需同时删除数据卷
docker compose --env-file .env.docker -f compose.yml -f compose.dev.yml down --remove-orphans --volumes生产环境(compose.prod.yml):
# 启动容器
docker compose --env-file .env.docker -f compose.yml -f compose.prod.yml up -d postgres api
# 重新构建容器
docker compose --env-file .env.docker -f compose.yml -f compose.prod.yml down --remove-orphans
docker compose --env-file .env.docker -f compose.yml -f compose.prod.yml up --build -d postgres api
# 重启容器
docker compose --env-file .env.docker -f compose.yml -f compose.prod.yml restart postgres api
# 删除容器(保留数据卷)
docker compose --env-file .env.docker -f compose.yml -f compose.prod.yml down --remove-orphans
# 如需同时删除数据卷
docker compose --env-file .env.docker -f compose.yml -f compose.prod.yml down --remove-orphans --volumescurl http://localhost:3000/health
curl http://localhost:3000/ready/ready 返回 {"status":"ready"} 说明数据库依赖已就绪。
- 开发版数据库数据保存在 Docker volume
postgres_data - 开发版上传文件保存在仓库根目录
uploads/ - 生产版数据库数据保存在 Docker volume
postgres_data - 生产版上传文件保存在 Docker volume
uploads_data
当前仓库未容器化 YOLO 检测服务,后端继续通过 FS_DETECT_URL 调用它。
- 默认 Docker 地址:
http://host.docker.internal:8077 - 如果你的检测服务不在宿主机,请修改
.env.docker
如果你仍然需要本机直接运行 Go 服务,可以使用下面的方式。
- Go: 1.24 或更高版本
- PostgreSQL: 13 或更高版本
- AI 检测服务: 必须已部署并运行 (默认地址:
http://127.0.0.1:8077)
git clone <repository-url>
cd foreignscan-backendgo mod download在项目根目录下创建一个 .env 文件(可选,用于覆盖环境变量):
FS_API_PORT=3000
FS_POSTGRES_DSN="host=127.0.0.1 user=postgres password=your_password dbname=foreignscan port=5432 sslmode=disable TimeZone=Asia/Shanghai"
FS_UPLOAD_DIR="cmd/server/uploads"
FS_DETECT_URL="http://127.0.0.1:8077"
FS_ALLOWED_ORIGINS="http://localhost:8080,http://127.0.0.1:8080"cd cmd/server
go run main.go服务默认监听 http://localhost:3000。
服务启动后,访问以下 URL 查看完整的 API 文档:
http://localhost:3000/swagger/index.html
foreignscan-backend/
├── cmd/server/ # 应用程序入口
├── internal/
│ ├── config/ # 配置管理
│ ├── database/ # 数据库连接
│ ├── handlers/ # HTTP 处理函数
│ ├── models/ # 数据模型
│ ├── services/ # 业务逻辑
│ └── utils/ # 工具函数
├── pkg/ # 公共包
└── docs/ # Swagger 文档
本项目为专有软件。非开源。
Copyright © 2026 uuo00n. 保留所有权利。
严禁通过任何媒介未经授权复制、修改、分发或使用本软件。