docker-compose 运行wvp-pro

本文在centos7环境下运行。

参考资料

wvp_pro_compose项目 https://github.com/SaltFish001/wvp_pro_compose

一、wvp_pro_compose部署步骤 

        wvp_pro_compose项目会从主仓下载wvp_pro项目、ZLMediaKit、assist、maven、mysql、redis等并生成镜像。https://github.com/648540858/wvp-GB28181-pro

1. 安装Docker及docker-compose

官网:安装docker Install Docker Engine on CentOS | Docker Documentation

Centos7安装docker-compose

        下载docker-compose,并放到指定目录下即可。

(1)github仓库 下载docker-compose, release发布版本,推荐下载v2.0.0以上 https://github.com/docker/compose 。

(2)下载的docker compose文件重命名为docker-compose,并将文件放到 /usr/local/bin/  文件夹下

(3)给文件添加执行权限 chmod +x /usr/local/bin/docker-compose

(4)此时,docker-compose  --version查看看是否安装成功

可参考:  Docker学习笔记3:CentOS7下安装Docker-Compose_我是小坏-CSDN博客_centos7安装docker-compose

注:二进制文件docker-compose。ubuntu和centos都是将程序放在 /usr/local/bin/ 目录下。ubuntu安装docker-compose不需要安装python-pip,直接将下载的docker-compose放到指定目录下即可。

安装遇见问题 

(1)安装python-pip。 CentOS7下安装python-pip_我是小坏-CSDN博客_centos安装pip 。

(2)pip版本低

        如果pip -V版本过低,那么安装高版本docker-compose会报错。 安装高版本pippython -m pip install -upgrade pip命令升级无效。并且升级后pycharm里还是显示旧版本_Gocdesign的博客-CSDN博客

(3)没有给linux上传文件的权限

        a、进入需要被上传的目录中;

        b、获取root权限

sudo su root,然后输入用户密码

        c、添加文件权限

sudo chmod -R 777 文件夹路径名  -- -R可以让文件夹下的子文件夹也被赋予上传的权限

        d、此时就具备了上传权限 

2. 配置wvp_pro_compose环境参数

        下载wvp_pro_compose项目,修改.env配置文件,然后在Centos中运行。注意:wvp pro项目本身下的application.yml配置文件不生效,而是wvp文件夹下的config/application.yml配置文件生效。wvp的配置项完全是wvp文件夹下的config下的application.yml决定,而application.yml会读取.env决定的虚拟机的环境变量,因此间接的.env决定了配置项。

        因此,.env是唯一需要修改的配置文件。

         复制一份.env.example到根目录, 并改名 .env。修改SIP_IP以及STREAM_HOST为服务器外网IP地址。WVP_DOMAIN、WVP_ID、WVP_PASSWORD、WVP_PORT按需修改,其余变量不动【注:WVP_PORT是wvp的web访问接口】。 特别注意 wvo/config/config.ini 文件的 [http].port需要手动修改,且要与.env配置中的MEDIA_PORT保持一致

        docker-compose.yaml中redis、mysql宿主机映射端口63790、33060。如果宿主机这两个端口被占用,改成其他端口。这两个端口是外部连接数据库的连接端口。

       注解: .env用来指定wvp、redis、mysql的docker环境变量值。docker-compose读取此文件来设置的docker环境变量;wvp、redis、mysql的启动命令会使用此环境变量来进行端口映射。wvp的application.yml会读取启动命令的变量值填写配置项。

理解docker-compose.yaml和.env中的redis、mysql端口设置

容器内端口和宿主机映射端口。

.env

        MYSQL_PORT、REDIS_PORT表示的是容器内redis和mysql使用的端口。必须和dokcer-compose.yaml指定的redis容器、mysql容器的端口一致,不可以自己指定。

docker-compose.yaml 

        command命令定义了redis容器内端口是6379 。ports定义了宿主机映射容器6379的端口是63790,即外部连接此redis数据库需要连接此端口。

        mysql没有明确指定内部使用哪个端口,故使用的是默认的端口3306。ports定义了宿主机映射容器3306的端口是33060,即外部连接此mysql数据库需要连接此端口。

application.yml

        使用了.env定义的MYSQL_PORT、REDIS_PORT,表示连接的redis、mysql容器端口。

结论

        故MYSQL_PORT REDIS_PORT不要自己定义,使用默认即可。容器内的3306/6379都是空闲的。如果宿主机映射端口63790、33060被占用,那么就docker-compose.yaml ports选项重新映射一个没有占用的端口。

 

 docker-compose.yaml挂载目录

mysql、redis、logs、配置文件等都进行了挂载。即使容器关闭、删除,数据也会保留。 

查看wvp日志,如果报如下错误。1.删除mysql数据库media_server表里面数据

3. 启动docker-compose

        进入 docker-compose.yaml所在目录即 wvp_pro_compose根目录下,运行如下命令。

  docker-compose up -d

        注意:运行命令前启动docker。Centos7下 systemctl start docker 

遇见问题

(1) failed: port is already allocated 。删除docker启动时存储配置接口的文件,下面文章中使用service命令,centos7对应命令时systemctl。【解决方案】Docker 错误 “port is already allocated” 解决方法_明天,争取的博客-CSDN博客

(2)虚拟机没有足够磁盘空间。 VirtualBox和VMware虚拟机centos(/dev/mapper/centos-root)磁盘扩容(亲测有效)_我爱大数据-CSDN博客

(3)运行报错,can’t sh run.sh 可能是docker-compose版本问题,升级版本试下。

(4)Unable to correct missing packages.E: Failed to fetch http://mirrors.aliyun.com/ubuntu/pool/main/libt/libtheora/libtheora0_1.1.1+dfsg.1-15ubuntu2_amd64.deb  Undetermined Error [IP: 125.39.43.239 80]  E: Aborting install.

解决:修改docker dns 。两种方式如下

  • 修改宿主机器的docker配置
cat /etc/docker/daemon.json

{
    "dns" : [
        "114.114.114.114",
        "8.8.8.8"
     ]
}

sudo service docker restart
  • 在启动容器的同时,指定dns参数
docker run --dns 10.0.0.2 --name mybusybox busybox:latest

        启动容器时命令行指定环境变量和容器内本身的环境变量,哪个优先级高? 启动容器时执行环境变量相当于重新给容器的环境变量赋值。所以,本身这个问题不正确。

spring boot的application.yml通过${变量名}读取系统环境变量。那么启动spring boot程序时,指定的变量和系统自带的环境变量同名,哪个优先级高。  很明显是启动时命令行指定的优先级高。

        dockerfile中cmd生成的镜像。是不是每次run容器时,都会执行cmd命令?是

4.查看生成镜像和容器

        此时,会生成wvp、redis、mysql和依赖环境镜像。none是依赖环境变量,docker save时不需要将其save。

5.关闭docker-compose开启的容器 

进入 docker-compose.yaml所在目录即 wvp_pro_compose根目录下,运行如下命令即可关闭、删除所有启动的容器。

docker-compose down

注意:

        此时虽然关闭了wvp pro,但是上次运行持久化到宿主机的mysql redis等数据依然存在。 有可能会导致wvp pro 日志报错:Duplicate entry 'ZbnQN5csqxrPix7a' for key 'media_server.PRIMARY'。解决办法删除掉挂载到宿主机的mysql文件或者连接mysql数据库,然后清空数据库中media_server表,然后重启dock-compose up 即可。

 二、修改.env文件参数后,再次运行docker-compose

1.修改wvp相关参数

上面docker-compose自动启动容器,那么如果有参数修改,如何自己使用命令启动容器?

上面理解有误。如果容器参数需要修改,那么项目根目录下运行docker-compose down命令将容器删除,修改.env或docker-compose.yaml文件的参数,然后重新  docker-compose up -d。

将docker-compose.yaml的wvp配置项修改为image:镜像名,而不再需要指定build配置项让其根据./wvp文件夹重新构建wvp镜像。

docker-compose.yaml第一次启动时,已经将所有镜像下载好,所以以后再启动不再需要重新下载。

 (1)删除旧容器

        docker rm $(docker ps -aq)或 docker-compose down 两个命令都会删除容器

(2)修改.env配置文件

        如果需要修改配置项,那么仅需修改此处配置文件。

(3)重新启动  docker-compose

        重启后,使用的就是最新配置项。

  docker-compose up -d

2.修改mysql、redis数据库密码 

mysql密码更改

(1)mysql docker镜像配置文件设置、修改密码

        根据docker-compose生成第一次生成mysql容器时,设置环境变量就可以配置 mysql的密码:

MYSQL_USERNAME=root
MYSQL_PASSWORD=12345678
MYSQL_PORT=3306
WVP_DB=wvp

(2)mysql docker容器修改密码

        为防止以丑国为首的外国势力窃取数据需要将密码改成强密码。发现修改环境变量再重启,密码并没有修改,因为已经持久化了,密码存下来了,不会再读取环境变量了。
只能通过mysql命令行来修改了+.env配置文件也修改的方式。 .env修改是为了以后自己知道真实密码。

        所以,mysql、redis等密码尽量第一次就设置好,以后少修改。

1、查看mysql 8 容器 id前几位xxx
    docker ps 
2、进入容器
    docker exec -it xxx /bin/bash

3、用旧密码登陆root
    mysql -uroot -p

4、修改localhost和远程ip的连接密码,必须都修改
    use mysql;
修改localhost
    ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY "root";
修改远程连接
    ALTER USER 'root' IDENTIFIED WITH mysql_native_password BY "root";

redis密码更改 

(1)docker ps 查询redis id前几位 xxx

(2)docker exec -it  xxx redis-cli连接redis客户端

(3)使用旧密码登录,否则后续命令无法执行
   auth xxxxxx

(4)查看密码
    config get requirepass

(5)设置密码
    config set requirepass xxx888666

三、基于wvp pro项目打成的jar包启动wvp_pro_compose 

1. wvp_pro 源码修改

        登录自己github账号,查看自己fork的wvp_pro。此项目有根据第三方要求个性化修改的代码,因此必须使用自己fork的项目。点击Fetch and merge,合并wvp pro主仓代码到自己项目。如果有冲突,此时不可以直接merge,需要先解决冲突,参考 解决github分支提交冲突_fang·up·ad的博客-CSDN博客

        此时如果有什么需求,可修改wvp pro 源码,修改完记得git push。


2.编译wvp项目的静态页面

cd wvp-GB28181-pro/web_src/
npm --registry=https://registry.npm.taobao.org install
npm run build

        编译如果报错, 一般都是网络问题, 导致的依赖包下载失败
        编译完成后在src/main/resources下出现static目录。此时打成的jar包包含了web页面,前端可以直接访问。

3.打成jar,将静态文件和源码打到一个包里。mvn package打成jar,命名为wvp-pro.jar

4.下载 wvp_pro_compose项目,git clone https://github.com/MeBetterMan/wvp_pro_compose

        如果已经下载,则不需要重新下载。且如果已经下载,配置文件基本不需要改动。

        注意wvp_pro_compose项目和wvp_pro版本的对应。

5.jar文件放到上面git下来的项目wvp_pro_compose项目的wvp目录下

6.将docker-compose.yaml文件中wvp镜像生成方式修改为build方式,让其根据./wvp文件夹重新构建wvp镜像。参考 docker-compose - local.yaml 。

        下面配置项决定了是基于jar包重新构建启动还是基于已经生成的镜像启动。左侧配置基于已经生成的镜像,右侧配置基于重新构建。

        redis、mysql配置项默认基于images不需要改动。构建过一次以后,以后再构建,compose不会重新下载,而是基于已有的镜像构建。因此如果是项目新版本部署,需要将wvp-pro项目的镜像删除掉,然后再docker-compose up -d,如果想查看运行过程,可以不带-d选项。

7.启动项目 docker-compose up -d。 此时使用的就是刚打包的jar。注意:此时zlm、wvp_pro_assist会下载最新版本,因此最好wvp_pro项目也是最新版本。

8.生成镜像后,如果不想每次都重新构建wvp镜像,将docker-compose.yaml的wvp配置项再次修改回镜像方式启动,即image:镜像名。如上图左侧所示。

9.此时可以选择将新版本的wvp镜像、mysql镜像、redis镜像导出。参考下面。

四、离线环境下基于wvp镜像启动wvp_pro_compose 

        此方式可在离线环境下使用,因为首次是在互联网环境下启动时会下载对应依赖生成镜像,然后镜像导出后基于镜像启动,不再需要下载依赖包。

 1.互联网环境下导出wvp_pro_compose项目运行成功后的镜像包

        (1)将互联网环境下运行成功的项目redis、mysql、wvp pro镜像通过docker save保存为一个镜像【如下wvp.tar

                docker images 命令查看wvp_pro_compose-main_wvp wvp_pro_compose-main_wvp:8  redis:6.2-rc3-alpine3.13镜像名和tag,然后在当前目录导出成一个镜像。

 docker save wvp_pro_compose-main_wvp:latest mysql:8 redis:6.2-rc3-alpine3.13 > wvp.tar

        (2)修改后wvp pro 的jar包放到wvp_pro_compose 项目 wvp目录下,并命名为wvp-pro.jar,然后打包为【如下wvp_pro_compose_main.rar

        (3)docker-compose安装包。

        百度云下载已经导出好的压缩包。链接:https://pan.baidu.com/s/1G7TikV0IhJdPqrAwnb3GzA 提取码:1234。如果上传文件有权限问题,参考第一小节解决办法。

 

2.基于wvp镜像启动部署过程

一、安装docker-compose
(1)docker compose文件放到 服务器/usr/local/bin/  文件夹下

(2)给文件添加执行权限 chmod +x /usr/local/bin/docker-compose

(3)此时,docker-compose  --version查看看是否安装成功。

        注意docker-compose 版本需要2+。本机可能已经安装了docker-compose,但是版本可能太低会导致错误。

二、上传镜像和docker-compose文件

(0)服务器新建文件夹 /opt/wvp 

mkdir /opt/wvp

(1)windows上解压wvp_pro_compose-main.rar压缩包然后将文件夹上传到linux

        wvp_pro_compose-main.rar解压,修改.env配置文件。修改SIP_IP以及STREAM_HOST为服务器外网IP,WVP_DOMAIN、WVP_ID、WVP_PASSWORD、WVP_PORT按需修改,其余最好不动,WVP_DOMAIN、WVP_ID、WVP_PASSWORD为sip的id、域名、密码,WVP_PORT为wvp pro 的web访问端口。

        wvp_pro_compose-main含有wvp pro的jar文件。此文件可以通过wvp pro项目生成,自己可以修改项目源码。

        将docker-compose.yaml文件中wvp镜像生成方式。

 (2)将wvp.tar上传到linux,然后加载镜像

docker load < wvp.tar

        此镜像含有redis、mysql、wvp pro三个镜像,docker save时整合成了一个。

  (3) 启动容器. 进入wvp_pro_compose-main文件夹下,执行 docker-compose up -d。如果有需要就修改.env配置文件即可。

 四、docker-compose、dockerfile学习

Docker Dockerfile | 菜鸟教程

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fang·up·ad

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值