Files
rtsp-video-analysis-system/README-DOCKER.md
2025-09-30 14:23:33 +08:00

6.5 KiB
Raw Permalink Blame History

RTSP视频分析系统 Docker部署方案

📋 目录结构

rtsp-video-analysis-system/
├── .env                           # 环境变量配置文件
├── docker-compose.yml             # Docker Compose编排文件
├── ruoyi-admin/
│   └── Dockerfile                # Java后端Dockerfile
├── rtsp-vue/
│   ├── Dockerfile                # 前端Dockerfile
│   └── nginx.conf                # Nginx配置文件
├── python-inference-service/
│   └── Dockerfile                # Python推理服务Dockerfile
└── sql/                          # 数据库初始化脚本

🚀 快速开始

1. 前置要求

  • Docker 20.10+
  • Docker Compose 2.0+
  • 可选NVIDIA Docker Runtime如需GPU支持

2. 准备工作

2.1 配置环境变量

编辑 .env 文件,根据需要调整配置:

# MySQL数据库配置
MYSQL_ROOT_PASSWORD=ruoyi123
MYSQL_DATABASE=ry-vue
MYSQL_USER=ruoyi
MYSQL_PASSWORD=ruoyi123

# MinIO对象存储配置
MINIO_ROOT_USER=minio
MINIO_ROOT_PASSWORD=minio123

# 其他配置...

2.2 准备数据库初始化脚本

将数据库SQL脚本放到 sql/ 目录:

# 示例
cp sql/fad_watch.sql sql/
cp sql/ry_face.sql sql/

3. 启动服务

3.1 构建并启动所有服务

# 启动所有服务
docker-compose up -d

# 查看服务状态
docker-compose ps

# 查看日志
docker-compose logs -f

3.2 查看特定服务日志

# 查看后端日志
docker-compose logs -f backend

# 查看前端日志
docker-compose logs -f frontend

# 查看Python服务日志
docker-compose logs -f python-service

4. 访问服务

  • 前端界面: http://localhost:10080 或配置的FRONTEND_PORT
  • 后端API: 通过前端的 /prod-api/ 路径访问
  • Python推理API: 通过前端的 /python-api/ 路径访问
  • MinIO控制台: 仅容器内部访问如需外部访问需修改docker-compose.yml

注意:除前端外,其他服务端口均不对外暴露,仅容器间通信使用。

🔧 服务说明

服务列表

服务名称 容器名称 端口(内部) 端口(外部) 说明
mysql rtsp-mysql 3306 - MySQL数据库
redis rtsp-redis 6379 - Redis缓存
python-service rtsp-python-service 8000 - Python推理服务CPU
backend rtsp-backend 8080 - Java后端服务
frontend rtsp-frontend 80 10080 Vue前端服务

注意

服务依赖关系

frontend
  └── backend
      ├── mysql
      ├── redis
      ├── python-service
      └── minio (外部服务)

⚙️ 高级配置

1. 修改前端暴露端口

编辑 .env 文件:

FRONTEND_PORT=8080  # 修改为你想要的端口

2. 如需外部访问其他服务

编辑 docker-compose.yml,在对应服务下添加 ports 配置:

mysql:
  # ... 其他配置
  ports:
    - "3306:3306"  # 添加端口映射

3. 调整Java后端内存

编辑 ruoyi-admin/Dockerfile

ENV JAVA_OPTS="-Xms1g -Xmx2g -Djava.security.egd=file:/dev/./urandom"

或在 docker-compose.yml 中添加环境变量:

backend:
  environment:
    JAVA_OPTS: "-Xms1g -Xmx2g"

4. MinIO配置

本系统使用外部已部署的MinIO服务,配置在 ruoyi-admin/src/main/resources/application.yml

minio:
  enabled: true
  endpoint: http://49.232.154.205:10900
  access-key: 4EsLD9g9OM09DT0HaBKj
  secret-key: 05SFC5fleqTnaLRYBrxHiphMFYbGX5nYicj0WCHA
  bucket: rtsp

如需修改MinIO配置请编辑上述文件。

🔍 故障排查

1. 查看服务健康状态

docker-compose ps

健康的服务会显示 healthy 状态。

2. 查看容器日志

# 查看所有服务日志
docker-compose logs

# 查看特定服务的最新日志
docker-compose logs --tail=100 -f backend

3. 进入容器调试

# 进入后端容器
docker exec -it rtsp-backend sh

# 进入前端容器
docker exec -it rtsp-frontend sh

# 进入Python服务容器
docker exec -it rtsp-python-service bash

4. 重启服务

# 重启单个服务
docker-compose restart backend

# 重启所有服务
docker-compose restart

5. 完全重建服务

# 停止并删除所有容器
docker-compose down

# 重新构建并启动
docker-compose up -d --build

6. 清理数据重新开始

# 停止并删除所有容器和数据卷
docker-compose down -v

# 重新启动
docker-compose up -d

📦 数据持久化

以下数据会持久化存储:

  • mysql-data: MySQL数据库数据
  • redis-data: Redis持久化数据
  • backend-logs: 后端服务日志
  • backend-upload: 后端上传文件

注意MinIO数据存储在外部服务器不在本地

🔒 安全建议

  1. 修改默认密码:部署到生产环境前,请修改 .env 中的所有默认密码
  2. 限制网络访问:使用防火墙规则限制对前端端口的访问
  3. HTTPS配置在生产环境中建议配置HTTPS可使用Nginx反向代理+Let's Encrypt
  4. 定期备份:定期备份数据卷内容

🔄 更新部署

# 1. 拉取最新代码
git pull

# 2. 重新构建镜像
docker-compose build

# 3. 重启服务
docker-compose up -d

📝 常见问题

Q1: 后端启动失败,提示连接不到数据库

A: 检查MySQL是否已完全启动。使用 docker-compose logs mysql 查看MySQL日志。

Q2: 前端无法连接后端API

A: 确认nginx配置中的后端地址是否正确应该使用容器名 rtsp-backend 而不是 localhost

Q3: Python推理服务启动慢

A:

  1. 首次启动需要下载Ultralytics YOLOv8依赖这可能需要一些时间
  2. 确保python-inference-service/models/best.pt文件存在
  3. 使用 docker-compose logs python-service 查看进度

Q4: 如何更换MinIO服务

A: 修改 ruoyi-admin/src/main/resources/application.yml 中的MinIO配置

minio:
  endpoint: http://your-minio-server:port
  access-key: your-access-key
  secret-key: your-secret-key
  bucket: your-bucket

📞 支持

如有问题,请查看:

  • 项目GitHub Issues
  • 查看服务日志进行调试
  • 检查环境变量配置是否正确

<EFBFBD><EFBFBD> 许可证

[根据项目实际许可证填写]