部署环境:
服务器:Ubuntu20.04
网络环境:所有服务部署在同一台服务器,通过docker-compose进行管理;支持局域网和公网环境使用
引用资料:
WVP-PRO源码:https://github.com/648540858/wvp-GB28181-pro/tree/master
流媒体服务:https://github.com/ZLMediaKit/ZLMediaKit/tree/master
ZLM服务部署:https://github.com/ZLMediaKit/ZLMediaKit/wiki
WVP服务部署:https://doc.wvp-pro.cn/#/
软件版本: wvp-gb28181-pro 2.7.0 ZlmediaKit :master
我的部署文件仓库:https://github.com/eric-xdp/wvp_docker_compose
部署方式:
1、ZLM采用docker-compose方式部署
2、WVP与前端采用docker-compose前后端分离方式部署
3、Redis 与Mysql 也是单独使用docker-compose部署
可以整合成一个docker-compose文件,实现一键部署。先去把这个版本的源码下载到本地。
Redis与MySQL配置部署
具体查看GIT仓库
内的配置文件。这个比较常规。就不讲了。
mysql启动后,别忘了创建一个数据库wvp, 把初始化数据sql导入进去。数据库名称要记住。后面配置wvp启动项时要连接数据库。
ZLMediaKit配置部署
端口说明:这里可以根据自己的需求修改自己想开放的端口
重点说明!!!!
关于
40000-40500
端口,是提供给RTP传输时自动分配用的,如果使用在wvp配置文件中medis.rtp.enable =false
,使用单端口推流,那么无需在zlm中设置容器开放,40000-40500只需要保证服务器内有开放即可,不需要做容器映射。我这里加入到容器端口映射后发现容器启动时间明显增长。甚至有时会导致启动失败。原因暂时不太懂。
如果
medis.rtp.enable = true
,则表示启用多端口, 需要将对应的端口在ZLM容器启动时进行端口映射。并修改config.ini
里面的端口,以及WVP配置文件中的medis.rtp.port-range:40000,45000
这一块非常重要。否则会导致收流失败!
另外容器映射过多端口容易导致容器启动缓慢,甚至失败。 多端口映射根据官方描述,最少开放36个。各位请按需映射。我这里port_range=40000-40500映射了500个端口,容器启动用了将近6分钟。
注意
如果要修改ZLM服务配置,也可到这里把配置文件拷贝出来,按照docker-compose.yml文件,进行配置映射。后续修改配置则无需进入容器,但是每次修改完配置文件记得重启容器生效
config.ini配置文件位置
WVP-PRO配置部署
wvp部署就相对轻松了,可以参考官网的直接编译部署。前后端分离部署;我这里使用的是docker-compose 进行前后端分离部署。重点有几个,听我一一道来。
先去下载源码,初始化SQL也在源码中
。
重点1:编写一个适合后端和前端启用容器的docker-compose.yml文件
重点2:wvp的启动配置项,在源码路径里面的src/main/resources/下的yml文件
重点3:前端部署使用Nginx,其中Nginx的配置文件Nginx.conf,主要用反向代理和解决跨域
重点一, docker-compose.yml文件说明:
其中要注意的的是启动容器的网络配置,官方说明wvp需要和ZLM进行高频请求。最好在相同网络环境下,所以我将前后端都部署到和zlm容器的网络下了。其实可以和zlm的docker-compose.yml整理成一个docker-compose.yml。但是我有点懒。先不处理了。后续有时间再整理上来。
端口说明
好了,docker-compose.yml差不多就这样了 。
重点二,启动配置项,贴配置:
讲重点配置,
sip.ip
,这个要设置网卡ip
。什么意思呢 。就是你的wvp容器的IP,我们根据wvp的docker-compose.yml 配置的IP来填。 每个人的网络环境不一样。要自己看。
# 查看docker的网络:
docker network ls
#如果你按照我步骤来,它会给你列出这些网络,当然你环境中的ID肯定不同
NETWORK ID NAME DRIVER SCOPE
3b6083774c22 bridge bridge local
eb3a44606343 docker_default bridge local
0733faf2e065 host host local
97ef6edab397 none null local
481834f72027 redis_mysql_default bridge local
6aefff34ccb9 wvp_potier_default bridge local
885885a05874 zlmediakit_default bridge local
# 查看指定网络详情,我查看了zlmediakit_default这个网络
docker inspect 8858
看到没,里面有三个容器。对应的IP都出来了 。和我们前面的配置是一毛一样的。
media.id
这个对应zlm的config.ini
文件里面定义的general.mediaServerId medis.secret
对应zlm的config.ini
文件里面定义的api.secret medis.stream-ip
和sdp-ip
, 如果你有公网IP,则填公网IP,没有就置空media.rtp.enable
是否开启多端口。我上面有说。ZlmediaKit的重点说明部分。 其余的配置项根据自己的环境进行配置即可
重点三,前端配置
打包并放到指定路径,前端项目的源码在wvp源码中的
web_src
文件夹里面 。进去里面执行npm install 和 npm run build
把源码打包好,打包好的文件会在源码根目录:src/main/resources/static
中。然后把static拷贝到web目录中。编写DOCKERFILE
创建部署环境这个是以nginx镜像为基础,部署VUE项目。我们还需要修改nginx.conf
默认配置
DOCKERFILE内容
FROM nginx:latest
#删除目录下的default.conf文件
#RUN rm /etc/nginx/conf.d/default.conf
#设置时区
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
#将本地nginx.conf配置覆盖nginx配置
COPY nginx.conf /etc/nginx/nginx.conf
# 将vue编译好的dist文件中的内容复制到 /usr/share/nginx/html/ 这个目录下面
COPY static/ /usr/share/nginx/html/
#声名端口
EXPOSE 80
RUN echo 'web project build success!!'
nginx.conf配置
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Headers X-Requested-With;
add_header Access-Control-Allow-Methods GET,POST,OPTIONS;
server {
listen 80;
server_name localhost;
gzip on;
gzip_min_length 1k;
gzip_comp_level 9;
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
gzip_vary on;
gzip_disable "MSIE [1-6]\.";
location / {
root /usr/share/nginx/html;
index index.html index.htm;
try_files $uri $uri/ /index.html;
}
location /debug {
proxy_pass http://your_wvp_ip:45009;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
好了。现在回到项目根目录。 执行
docker compose up
.前后端就启动了。配置摄像机上线,其中SIP服务相关和密码就是wvp启动配置项中的sip.domain,sip.id,sip.password
登录前端: 默认账号密码是:admin/admin。 妥妥的搞定。
最后说明
所有的配置文件都在:github仓库内 。个人学习用。有问题也欢迎咨询。