开源视频监控服务器Shinobi:从零搭建基于Docker的智能安防系统
📅 2026/7/13 13:12:02
👁️ 阅读次数
📝 编程学习
1. Shinobi是什么?为什么选择它?
Shinobi是一款基于Node.js开发的开源视频监控服务器软件,专为现代安防需求设计。它最大的特点就是轻量、灵活且功能强大,完全免费开源,你可以把它理解成一个自建版的"海康威视云平台",但不需要支付任何授权费用。
我最初选择Shinobi是因为它的几个独特优势:
- 全平台支持:无论是家用IPC摄像头、商用监控系统还是工业级设备,只要支持RTSP/ONVIF协议都能接入
- 硬件要求低:在我的树莓派4上就能流畅运行5路1080P摄像头的实时监控
- 现代化界面:相比老旧的ZoneMinder,它的Web界面简直像从2020年穿越来的
- 智能扩展:通过插件可以轻松实现人脸识别、车牌识别等AI功能
实测下来,最让我惊喜的是它的资源占用。在Docker中运行,处理3路4K视频流时内存占用不到1GB,这对自建监控系统来说太重要了。不过要注意的是,中文翻译确实有些生硬,建议直接用英文界面更直观。
2. 环境准备与Docker部署
2.1 硬件需求建议
根据我的踩坑经验,推荐以下配置:
- CPU:至少4核(处理1080P视频流)
- 内存:每路摄像头预留512MB(4K视频需1GB)
- 存储:建议SSD做系统盘,机械硬盘存视频
- 显卡:非必须,但NVIDIA显卡能大幅降低CPU负载
特别提醒:如果使用树莓派等ARM设备,记得选择ARM版本的Docker镜像。
2.2 安装Docker环境
在Ubuntu系统上安装Docker只需三条命令:
sudo apt update sudo apt install docker.io docker-compose sudo systemctl enable --now docker验证安装:
docker --version # 应该输出类似 Docker version 24.0.5 的信息2.3 拉取Shinobi镜像
官方推荐使用GitLab的镜像仓库:
docker pull registry.gitlab.com/shinobi-systems/shinobi:latest如果拉取速度慢,可以尝试这个国内镜像:
docker pull dockerproxy.com/shinobi-systems/shinobi:latest3. 容器配置与启动
3.1 目录结构准备
先创建必要的目录(这是我优化过的结构):
mkdir -p /opt/shinobi/{config,database,videos,plugins,streams} chmod -R 777 /opt/shinobi/streams # 必须设置权限3.2 Docker运行命令
推荐使用这个优化过的启动命令:
docker run -d \ --name=shinobi \ --restart=unless-stopped \ --shm-size=2g \ -p 8080:8080 \ -e TZ=Asia/Shanghai \ -v /opt/shinobi/config:/config \ -v /opt/shinobi/database:/var/lib/mysql \ -v /opt/shinobi/videos:/home/Shinobi/videos \ -v /opt/shinobi/plugins:/home/Shinobi/plugins \ -v /opt/shinobi/streams:/dev/shm/streams \ registry.gitlab.com/shinobi-systems/shinobi:latest关键参数说明:
--shm-size=2g:解决高分辨率视频的内存问题-e TZ=Asia/Shanghai:设置正确时区streams目录:使用内存盘提升流媒体性能
3.3 使用docker-compose(推荐)
更优雅的方式是使用docker-compose.yml:
version: '3' services: shinobi: image: registry.gitlab.com/shinobi-systems/shinobi:latest container_name: shinobi restart: unless-stopped shm_size: 2g ports: - "8080:8080" environment: - TZ=Asia/Shanghai volumes: - ./config:/config - ./database:/var/lib/mysql - ./videos:/home/Shinobi/videos - ./plugins:/home/Shinobi/plugins - ./streams:/dev/shm/streams启动命令:
docker-compose up -d4. 初始配置与安全设置
4.1 访问管理后台
浏览器打开:
http://你的服务器IP:8080/super使用默认账号登录:
- 用户名:admin@shinobi.video
- 密码:admin
重要:首次登录后立即修改密码!
4.2 创建普通用户
在Super Panel中:
- 点击"Users"
- 选择"Add User"
- 填写邮箱和密码
- 存储空间建议设为"10000"(代表10GB)
4.3 中文界面设置
虽然不完美,但可以这样设置中文:
- 用普通用户登录
- 左侧菜单 → Account Settings → Preferences
- 找到Dashboard Language选择"zh"
- 点击Save保存
5. 摄像头接入实战
5.1 准备摄像头信息
需要提前知道:
- RTSP地址(如:rtsp://admin:password@192.168.1.100:554/stream1)
- 视频编码格式(H.264/H.265)
- 分辨率与帧率
5.2 添加摄像头步骤
- 登录普通用户后台
- 左侧菜单 → Monitor Settings
- 点击"+"添加新监控
- 关键配置项:
- Connection:选择"FFmpeg"
- Video (RTSP) Path:填写RTSP地址
- FPS:建议设为摄像头原生帧率
- Codec:与摄像头编码一致
5.3 常见问题解决
问题一:视频流无法播放
- 检查防火墙是否开放端口
- 测试用VLC能否播放RTSP流
- 尝试降低分辨率(如主码流转子码流)
问题二:延迟高
- 在摄像头设置中调整I帧间隔
- 启用"Low Latency Mode"
- 降低视频质量
6. 高级功能配置
6.1 移动侦测设置
- 进入摄像头配置页面
- 切换到"Advanced Mode"
- 找到"Motion Detection"区域
- 关键参数:
- Sensitivity:建议从50开始调整
- Trigger Threshold:触发阈值
- Region Editor:设置侦测区域
6.2 定时录像配置
- 在摄像头配置页面
- 找到"Recordings"选项卡
- 设置录制计划:
- 连续录制
- 仅移动侦测时录制
- 自定义时间段
6.3 外接存储设置
如果要使用外接硬盘:
mount /dev/sdb1 /opt/shinobi/videos chown -R 1000:1000 /opt/shinobi/videos然后在后台设置存储路径为"/home/Shinobi/videos"
7. 维护与优化技巧
7.1 日志查看方法
查看实时日志:
docker logs -f shinobi过滤错误日志:
docker logs shinobi | grep -i error7.2 备份策略
建议定期备份:
# 备份数据库 docker exec shinobi mysqldump -uroot -p密码 shinobi > shinobi_backup.sql # 备份配置 tar czvf shinobi_config.tar.gz /opt/shinobi/config7.3 性能优化
我的实测优化方案:
- 启用硬件加速(如果有N卡):
docker run --gpus all ... - 调整FFmpeg参数:
"inputOptions": "-hwaccel cuvid -c:v h264_cuvid" - 限制历史视频保留天数
8. 插件与扩展
8.1 实用插件推荐
- TensorFlow插件:实现人脸识别
- Telegram通知:报警消息推送
- Webhook插件:与其他系统集成
安装方法:
docker exec -it shinobi npm install 插件名8.2 自定义开发
Shinobi的插件开发非常简单:
- 在plugins目录创建新文件夹
- 编写package.json定义入口文件
- 核心代码结构:
module.exports = { init: function(app) { // 你的代码 } }
9. 故障排查指南
9.1 常见错误解决
错误一:数据库连接失败
- 检查database目录权限
- 重启MySQL服务:
docker exec shinobi service mysql restart
错误二:视频无法播放
- 更新FFmpeg版本
- 检查摄像头是否支持所选编码
9.2 获取帮助
推荐资源:
- 官方文档:docs.shinobi.video
- GitHub Issues页面
- 中文社区论坛
遇到问题时,记得先检查日志,大多数错误都有明确提示。我在实际使用中发现,90%的问题都是权限或路径配置错误导致的。
编程学习
技术分享
实战经验