0x01 前言

之前我根据官网的安装教程使用源码安装了摄像头录制软件shinobi,以下是相关文章:

但在最近的一次升级过程中出现严重的程序错误,经过多日排查依旧无法找到原因。因此我决定重新安装,但在centos7环境中无论如何都无法成功部署。在安装最后一直提示找不到npm命令,实际情况是我在一开始就通过手动安装的方式完成了nodejs与npm的安装,完全找不到原因。

经过仅一天的排错,我放弃了通过这种方式安装,转而使用docker。

0x02 准备

因为需要存储摄像头录像、数据库文件、日志文件等数据,建议准备一个较大的存储空间并挂载到本地,而我则给该虚拟机挂载了一个500G的存储空间在以下路径:

而后在该目录下使用以下命令新建文件夹:

紧接着准备docker环境,在centos7下通过yum命令安装即可,随后设为开机启动并立即启动docker服务。

完成后需要检查docker是否正常启动:

紧接着使用git命令从gitlab中把shinobi软件的docker代码clone到本地:

在该目录下有一个start-image.sh的文件可以实现自动化启动,但不建议使用。

通过查看Dockerfile可以知道它使用alpine作为基础环境,并在此环境安装需要的软件:

这里有个问题,在通过apk命令安装alpine软件时会从国外的软件源下载,下载速度惨不忍睹,所以建议将软件源改为国内的镜像,这里使用中科大的镜像站。

这一步需要手动修改Dockerfile,在第一个apk命令执行前加入以下内容:

至此,准备工作已完成。

0x03 构建

构建过程十分简单,先进入源码文件夹,然后执行build命令即可:

构建所需要的时间根据网络质量的好坏而有所不同,我构建只花了2分钟左右。无错误地完成构建后通过以下命令即可查看相关镜像:

0x04 部署

在部署前再次查看Dockerfile,在文件最后可以看到以下内容:

该Dockerfile指定了3个存储路径,我们可以将其映射到一开始新建的文件夹中;最后一行是向外暴露了8080这个端口,而在我的环境中,我会将80端口映射到该8080端口。这样我就可以直接访问IP地址或域名而不需要输入端口号。

部署只需要一行命令:

相关参数的简介如下:

  • -d:在后台运行并打印容器ID
  • –name:给该容器命名,以便在多容器的情况下进行区分
  • -p:监听host的80端口并映射到容器暴露出来的8080端口
  • –restart:容器崩溃后自动拉起,docker服务重启后也自动拉起
  • -v:将本地目录挂载到容器中

最后的字符串为docker镜像的ID。

执行命令后会打印出该容器的ID,也可以通过以下命令检查容器的运行情况:

因为我将host的80端口进行了映射,可以使用以下命令检查监听情况:

稍等片刻,等服务完成启动后即可通过浏览器访问shinobi服务了:

shinobi的配置请移步至以下文章:

0x05 结语

在完成添加摄像头之后可以留意下一开始建立的目录里是否有文件:

正常情况下会先生成数据库文件,完成用户的建立与添加摄像头后,在videos目录中会有用户ID的文件夹,如上所示。

需要升级也很简答, 构建新版的镜像并赋予一个新的tag,停止旧的容器并拉起新的就好了。