diff --git a/docker/build.sh b/docker/build.sh
new file mode 100755
index 000000000..2a73866e7
--- /dev/null
+++ b/docker/build.sh
@@ -0,0 +1,44 @@
+#/bin/bash
+set -e
+
+version=2.7.3
+
+git clone https://gitee.com/pan648540858/wvp-GB28181-pro.git
+cd wvp-GB28181-pro/web_src && \
+ npm install && \
+ npm run build
+
+cd ../../
+cp -r wvp-GB28181-pro/src/main/resources/static/* ./nginx/dist
+
+echo "构建ZLM容器"
+cd ./media/
+chmod +x ./build.sh
+./build.sh
+cd ../
+
+echo "构建数据库容器"
+cd ./mysql/
+chmod +x ./build.sh
+./build.sh
+cd ../
+
+echo "构建Redis容器"
+cd ./redis/
+chmod +x ./build.sh
+./build.sh
+cd ../
+
+echo "构建WVP容器"
+cd ./wvp/
+chmod +x ./build.sh
+./build.sh
+cd ../
+
+echo "构建Nginx容器"
+cd ./nginx/
+chmod +x ./build.sh
+./build.sh
+cd ../
+
+./push.sh
\ No newline at end of file
diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml
index 3da521a95..8ad454822 100644
--- a/docker/docker-compose.yml
+++ b/docker/docker-compose.yml
@@ -1,49 +1,125 @@
version: '3'
services:
- redis:
- image: redis
- restart: always
- volumes:
- - ./redis/redis.conf:/etc/redis/redis_default.conf
- - ./redis/data/:/data
- environment:
- TZ: "Asia/Shanghai"
- command: redis-server /etc/redis/redis_default.conf --appendonly yes
- wvp:
- build:
- context: ./wvp
- args:
- gitUrl: "https://gitee.com/pan648540858"
- zlmGitUrl: "https://gitee.com/xia-chu/ZLMediaKit"
- restart: always
+ polaris-redis:
+ image: polaris-tian-docker.pkg.coding.net/qt/polaris/polaris-redis:latest
+ restart: unless-stopped
+ healthcheck:
+ test: [ "CMD", "redis-cli", "--raw", "incr", "ping" ]
+ interval: 15s
+ timeout: 5s
+ retries: 10
+ start_period: 10s
+ networks:
+ - media-net
ports:
- - "5060:5060"
- - "5060:5060/udp"
- - "18080:18080"
- - "80:80"
- - "10000:10000/tcp"
- - "10000:10000/udp"
- - "30000-30500:30000-30500/tcp"
- - "30000-30500:30000-30500/udp"
+ - 6379:6379
volumes:
- - ./video:/opt/media/www/record/
- - ./logs/wvp:/opt/wvp/logs/
- - ./logs/assist:/opt/assist/logs/
- - ./logs/media:/opt/media/log/
+ - ./redis/conf/redis.conf:/opt/polaris/redis/redis.conf
+ - ./volumes/redis/data/:/data
environment:
TZ: "Asia/Shanghai"
- # [必须修改] 本机的IP
- WVP_HOST: 172.18.0.61
- WVP_PWD: aseqw_+hiy123
- WVP_DOMAIN: 6101130049
- WVP_ID: 61011300490000000001
- REDIS_HOST: redis
- REDIS_PORT: 6379
- REDIS_DB: 6
- REDIS_PWD: root
- ASSIST_JVM_CONFIG: -Xms128m -Xmx256m
- WVP_JVM_CONFIG: -Xms128m -Xmx256m
- ASSIST_CONFIG:
- WVP_CONFIG:
+ command: redis-server /opt/polaris/redis/redis.conf --appendonly yes
+
+ polaris-mysql:
+ image: polaris-tian-docker.pkg.coding.net/qt/polaris/polaris-mysql:latest
+ restart: unless-stopped
+ healthcheck:
+ test: [ "CMD", "bash", "-c", "cat < /dev/null > /dev/tcp/127.0.0.1/3306" ]
+ interval: 15s
+ timeout: 5s
+ retries: 10
+ start_period: 10s
+ networks:
+ - media-net
+ environment:
+ MYSQL_DATABASE: wvp
+ MYSQL_ROOT_PASSWORD: root
+ MYSQL_USER: root
+ MYSQL_PASSWORD: root
+ TZ: Asia/Shanghai
+ ports:
+ - 3306:3306
+ volumes:
+ - ./mysql/conf:/etc/mysql/conf.d
+ - ./logs/mysql:/logs
+ - ./volumes/mysql/data:/var/lib/mysql
+ command: [
+ 'mysqld',
+ '--default-authentication-plugin=mysql_native_password',
+ '--innodb-buffer-pool-size=80M',
+ '--character-set-server=utf8mb4',
+ '--collation-server=utf8mb4_general_ci',
+ '--default-time-zone=+8:00',
+ '--lower-case-table-names=1'
+ ]
+
+ polaris-media:
+ image: polaris-tian-docker.pkg.coding.net/qt/polaris/polaris-media:latest
+ restart: always
+ networks:
+ - media-net
+ ports:
+ - "10935:10935"
+ - "5540:5540"
+ - "6080:6080"
+ volumes:
+ - ./volumes/video:/opt/media/www/record/
+ - ./logs/media:/opt/media/log/
+
+ polaris-wvp:
+ image: polaris-tian-docker.pkg.coding.net/qt/polaris/polaris-wvp:latest
+ restart: always
+ networks:
+ - media-net
+ ports:
+ - "18978:18978"
+ - "8116:8116/udp"
+ - "8116:8116/tcp"
depends_on:
- - redis
+ - polaris-redis
+ - polaris-mysql
+ - polaris-media
+ links:
+ - polaris-redis
+ - polaris-mysql
+ - polaris-media
+ volumes:
+ - ./wvp/wvp/:/opt/wvp/wvp/
+ - ./logs/wvp:/opt/wvp/logs/
+ environment:
+ TZ: "Asia/Shanghai"
+ # 本机的IP
+ SIP_HOST: 127.0.0.1
+ STREAM_HOST: 127.0.0.1
+ ZLM_HOST: polaris-media
+ ZLM_PORT: 6080
+ ZLM_SERCERT: su6TiedN2rVAmBbIDX0aa0QTiBJLBdcf
+ REDIS_HOST: polaris-redis
+ REDIS_PORT: 6379
+ DATABASE_HOST: polaris-mysql
+ DATABASE_PORT: 3306
+ DATABASE_USER: wvp
+ DATABASE_PASSWORD: wvp
+ # 前端跨域配置,nginx容器所在物理机IP
+ NGINX_HOST: http://127.0.0.1:8080
+
+ polaris-nginx:
+ image: polaris-tian-docker.pkg.coding.net/qt/polaris/polaris-nginx:latest
+ ports:
+ - "8080:8080"
+ depends_on:
+ - polaris-wvp
+ links:
+ - polaris-wvp
+ environment:
+ WVP_HOST: polaris-wvp
+ WVP_PORT: 18978
+ volumes:
+ - ./nginx/conf/nginx.conf:/etc/nginx/nginx.conf
+ - ./logs/nginx:/var/log/nginx
+ networks:
+ - media-net
+
+networks:
+ media-net:
+ driver: bridge
\ No newline at end of file
diff --git a/docker/docker-upgrade.sh b/docker/docker-upgrade.sh
new file mode 100755
index 000000000..9c2d75f9b
--- /dev/null
+++ b/docker/docker-upgrade.sh
@@ -0,0 +1,5 @@
+#/bin/bash
+set -e
+
+docker compose down
+docker compose up -d --remove-orphans
\ No newline at end of file
diff --git a/docker/media/Dockerfile b/docker/media/Dockerfile
new file mode 100644
index 000000000..a7b6c165d
--- /dev/null
+++ b/docker/media/Dockerfile
@@ -0,0 +1,91 @@
+FROM ubuntu:20.04 AS build
+
+#shell,rtmp,rtsp,rtsps,http,rtp
+EXPOSE 10935/tcp
+EXPOSE 5540/tcp
+EXPOSE 6080/tcp
+EXPOSE 10000/udp
+EXPOSE 10000/tcp
+EXPOSE 8000/udp
+EXPOSE 8000/tcp
+EXPOSE 9000/udp
+
+# ADD sources.list /etc/apt/sources.list
+
+RUN apt-get update && \
+ DEBIAN_FRONTEND="noninteractive" \
+ apt-get install -y --no-install-recommends \
+ build-essential \
+ cmake \
+ git \
+ curl \
+ vim \
+ wget \
+ ca-certificates \
+ tzdata \
+ libssl-dev \
+ gcc \
+ g++ \
+ gdb && \
+ apt-get autoremove -y && \
+ apt-get clean -y && \
+ rm -rf /var/lib/apt/lists/*
+
+RUN mkdir -p /opt/media
+WORKDIR /opt/media
+RUN git clone --depth 1 https://gitee.com/xia-chu/ZLMediaKit && \
+ cd ZLMediaKit && git submodule update --init
+
+# 3rdpart init
+WORKDIR /opt/media/ZLMediaKit/3rdpart
+RUN wget https://polaris-tian-generic.pkg.coding.net/qt/dependencies/openssl-1.1.1k.tar.gz?version=latest -O openssl-1.1.1k.tar.gz && \
+ tar -xvzf openssl-1.1.1k.tar.gz && \
+ cd openssl-1.1.1k && ./config shared --openssldir=/usr/local/openssl --prefix=/usr/local/openssl && \
+ make && make install && \
+ echo "/usr/local/lib64/" >> /etc/ld.so.conf && \
+ echo "/usr/local/openssl/lib" >> /etc/ld.so.conf && \
+ ldconfig && \
+ ln -s /usr/local/openssl/bin/openssl /usr/local/bin/openssl
+
+WORKDIR /opt/media/ZLMediaKit/3rdpart
+RUN wget https://github.com/cisco/libsrtp/archive/v2.3.0.tar.gz -O libsrtp-2.3.0.tar.gz && \
+ tar xfv libsrtp-2.3.0.tar.gz && \
+ mv libsrtp-2.3.0 libsrtp && \
+ cd libsrtp && ./configure --enable-openssl --with-openssl-dir=/usr/local/openssl && make -j $(nproc) && make install
+
+
+WORKDIR /opt/media/ZLMediaKit/build
+RUN cmake .. -DENABLE_WEBRTC=true -DOPENSSL_ROOT_DIR=/usr/local/openssl -DOPENSSL_LIBRARIES=/usr/local/openssl/lib && \
+ cmake --build . --target MediaServer
+COPY config.ini /opt/media/ZLMediaKit/release/linux/Debug/
+
+FROM ubuntu:20.04
+
+RUN apt-get update && \
+ DEBIAN_FRONTEND="noninteractive" \
+ apt-get install -y --no-install-recommends \
+ vim \
+ wget \
+ ca-certificates \
+ tzdata \
+ curl \
+ libssl-dev \
+ ffmpeg \
+ gcc \
+ g++ \
+ gdb && \
+ apt-get autoremove -y && \
+ apt-get clean -y && \
+ rm -rf /var/lib/apt/lists/*
+
+ENV TZ=Asia/Shanghai
+RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime \
+ && echo $TZ > /etc/timezone && \
+ mkdir -p /opt/media/bin/www
+
+WORKDIR /opt/media/bin/
+COPY --from=build /opt/media/ZLMediaKit/release/linux/Debug/MediaServer /opt/media/ZLMediaKit/default.pem /opt/media/bin/
+COPY --from=build /opt/media/ZLMediaKit/release/linux/Debug/config.ini /opt/media/conf/
+COPY --from=build /opt/media/ZLMediaKit/www/ /opt/media/bin/www/
+ENV PATH /opt/media/bin:$PATH
+CMD ["./MediaServer","-s", "default.pem", "-c", "../conf/config.ini", "-l","0"]
\ No newline at end of file
diff --git a/docker/media/build.sh b/docker/media/build.sh
new file mode 100755
index 000000000..edcc16c8d
--- /dev/null
+++ b/docker/media/build.sh
@@ -0,0 +1,8 @@
+#/bin/bash
+set -e
+
+version=2.7.3
+
+docker build -t polaris-media:${version} .
+docker tag polaris-media:${version} polaris-tian-docker.pkg.coding.net/qt/polaris/polaris-media:${version}
+docker tag polaris-media:${version} polaris-tian-docker.pkg.coding.net/qt/polaris/polaris-media:latest
\ No newline at end of file
diff --git a/docker/media/config.ini b/docker/media/config.ini
new file mode 100644
index 000000000..2098e8d49
--- /dev/null
+++ b/docker/media/config.ini
@@ -0,0 +1,196 @@
+; auto-generated by mINI class {
+
+[api]
+apiDebug=1
+defaultSnap=./www/logo.png
+downloadRoot=./www;
+secret=su6TiedN2rVAmBbIDX0aa0QTiBJLBdcf
+snapRoot=./www/snap/
+
+[cluster]
+origin_url=
+retry_count=3
+timeout_sec=15
+
+[ffmpeg]
+bin=/usr/bin/ffmpeg
+cmd=%s -re -i %s -c:a aac -strict -2 -ar 44100 -ab 48k -c:v libx264 -f flv %s
+log=./ffmpeg/ffmpeg.log
+restart_sec=0
+snap=%s -rtsp_transport tcp -i %s -y -f mjpeg -frames:v 1 %s
+
+[general]
+broadcast_player_count_changed=0
+check_nvidia_dev=1
+enableVhost=0
+enable_ffmpeg_log=0
+flowThreshold=1024
+listen_ip=::
+maxStreamWaitMS=15000
+mediaServerId=polaris
+mergeWriteMS=0
+resetWhenRePlay=1
+streamNoneReaderDelayMS=20000
+unready_frame_cache=100
+wait_add_track_ms=3000
+wait_audio_track_data_ms=1000
+wait_track_ready_ms=10000
+
+[hls]
+broadcastRecordTs=0
+deleteDelaySec=10
+fastRegister=0
+fileBufSize=65536
+segDelay=0
+segDur=2
+segKeep=0
+segNum=3
+segRetain=5
+
+[hook]
+alive_interval=10.0
+enable=1
+on_flow_report=
+on_http_access=
+on_play=
+on_publish=
+on_record_mp4=
+on_record_ts=
+on_rtp_server_timeout=
+on_rtsp_auth=
+on_rtsp_realm=
+on_send_rtp_stopped=
+on_server_exited=
+on_server_keepalive=
+on_server_started=
+on_shell_login=
+on_stream_changed=
+on_stream_none_reader=
+on_stream_not_found=
+retry=1
+retry_delay=3.0
+stream_changed_schemas=rtsp/rtmp/fmp4/ts/hls/hls.fmp4
+timeoutSec=30
+
+[http]
+allow_cross_domains=1
+allow_ip_range=
+charSet=utf-8
+dirMenu=1
+forbidCacheSuffix=
+forwarded_ip_header=
+keepAliveSecond=30
+maxReqSize=40960
+notFound=
404 Not Found您访问的资源不存在!
ZLMediaKit(git hash:8ccb4e9/%aI,branch:master,build time:2024-11-07T10:34:19)
+port=6080
+rootPath=./www
+sendBufSize=65536
+sslport=4443
+virtualPath=
+
+[multicast]
+addrMax=239.255.255.255
+addrMin=239.0.0.0
+udpTTL=64
+
+[protocol]
+add_mute_audio=1
+auto_close=0
+continue_push_ms=3000
+enable_audio=1
+enable_fmp4=1
+enable_hls=1
+enable_hls_fmp4=0
+enable_mp4=0
+enable_rtmp=1
+enable_rtsp=1
+enable_ts=1
+fmp4_demand=0
+hls_demand=0
+hls_save_path=./www
+modify_stamp=2
+mp4_as_player=0
+mp4_max_second=3600
+mp4_save_path=/home
+paced_sender_ms=0
+rtmp_demand=0
+rtsp_demand=0
+ts_demand=0
+
+[record]
+appName=record
+enableFmp4=0
+fastStart=0
+fileBufSize=65536
+fileRepeat=0
+sampleMS=500
+
+[rtc]
+datachannel_echo=0
+externIP=
+maxRtpCacheMS=5000
+maxRtpCacheSize=2048
+max_bitrate=0
+min_bitrate=0
+nackIntervalRatio=1.0
+nackMaxCount=15
+nackMaxMS=3000
+nackMaxSize=2048
+nackRtpSize=8
+port=8000
+preferredCodecA=PCMA,PCMU,opus,mpeg4-generic
+preferredCodecV=H264,H265,AV1,VP9,VP8
+rembBitRate=0
+start_bitrate=0
+tcpPort=8000
+timeoutSec=30
+
+[rtmp]
+directProxy=1
+enhanced=0
+handshakeSecond=15
+keepAliveSecond=15
+port=10935
+sslport=0
+
+[rtp]
+audioMtuSize=600
+h264_stap_a=1
+lowLatency=0
+rtpMaxSize=10
+videoMtuSize=1400
+
+[rtp_proxy]
+dumpDir=
+gop_cache=1
+h264_pt=98
+h265_pt=99
+opus_pt=100
+port=10000
+port_range=30000-30500
+ps_pt=96
+rtp_g711_dur_ms=100
+timeoutSec=15
+udp_recv_socket_buffer=4194304
+
+[rtsp]
+authBasic=0
+directProxy=1
+handshakeSecond=15
+keepAliveSecond=15
+lowLatency=0
+port=5540
+rtpTransportType=-1
+sslport=0
+
+[shell]
+maxReqSize=1024
+port=0
+
+[srt]
+latencyMul=4
+pktBufSize=8192
+port=9000
+timeoutSec=5
+
+; } ---
diff --git a/docker/mysql/Dockerfile b/docker/mysql/Dockerfile
new file mode 100644
index 000000000..ffdda5213
--- /dev/null
+++ b/docker/mysql/Dockerfile
@@ -0,0 +1,3 @@
+FROM mysql:8.0.32
+
+ADD ./db/*.sql /docker-entrypoint-initdb.d/
\ No newline at end of file
diff --git a/docker/mysql/build.sh b/docker/mysql/build.sh
new file mode 100755
index 000000000..133ab4430
--- /dev/null
+++ b/docker/mysql/build.sh
@@ -0,0 +1,8 @@
+#/bin/bash
+set -e
+
+version=2.7.3
+
+docker build -t polaris-mysql:${version} .
+docker tag polaris-mysql:${version} polaris-tian-docker.pkg.coding.net/qt/polaris/polaris-mysql:${version}
+docker tag polaris-mysql:${version} polaris-tian-docker.pkg.coding.net/qt/polaris/polaris-mysql:latest
\ No newline at end of file
diff --git a/docker/mysql/db/privileges.sql b/docker/mysql/db/privileges.sql
new file mode 100644
index 000000000..3aa6ce84b
--- /dev/null
+++ b/docker/mysql/db/privileges.sql
@@ -0,0 +1,3 @@
+use mysql;
+grant all privileges on wvp.* to 'ylcx'@'%';
+flush privileges;
\ No newline at end of file
diff --git a/docker/mysql/db/wvp.sql b/docker/mysql/db/wvp.sql
new file mode 100644
index 000000000..d65a05d85
--- /dev/null
+++ b/docker/mysql/db/wvp.sql
@@ -0,0 +1,769 @@
+/*建库*/
+DROP DATABASE IF EXISTS `wvp`;
+
+CREATE DATABASE `wvp` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
+
+SET NAMES utf8mb4;
+SET FOREIGN_KEY_CHECKS = 0;
+
+USE `wvp`;
+
+/*建表*/
+drop table IF EXISTS wvp_device;
+create table IF NOT EXISTS wvp_device
+(
+ id serial primary key,
+ device_id character varying(50) not null,
+ name character varying(255),
+ manufacturer character varying(255),
+ model character varying(255),
+ firmware character varying(255),
+ transport character varying(50),
+ stream_mode character varying(50),
+ on_line bool default false,
+ register_time character varying(50),
+ keepalive_time character varying(50),
+ ip character varying(50),
+ create_time character varying(50),
+ update_time character varying(50),
+ port integer,
+ expires integer,
+ subscribe_cycle_for_catalog integer DEFAULT 0,
+ subscribe_cycle_for_mobile_position integer DEFAULT 0,
+ mobile_position_submission_interval integer DEFAULT 5,
+ subscribe_cycle_for_alarm integer DEFAULT 0,
+ host_address character varying(50),
+ charset character varying(50),
+ ssrc_check bool default false,
+ geo_coord_sys character varying(50),
+ media_server_id character varying(50) default 'auto',
+ custom_name character varying(255),
+ sdp_ip character varying(50),
+ local_ip character varying(50),
+ password character varying(255),
+ as_message_channel bool default false,
+ heart_beat_interval integer,
+ heart_beat_count integer,
+ position_capability integer,
+ broadcast_push_after_ack bool default false,
+ server_id character varying(50),
+ constraint uk_device_device unique (device_id)
+);
+
+drop table IF EXISTS wvp_device_alarm;
+create table IF NOT EXISTS wvp_device_alarm
+(
+ id serial primary key,
+ device_id character varying(50) not null,
+ channel_id character varying(50) not null,
+ alarm_priority character varying(50),
+ alarm_method character varying(50),
+ alarm_time character varying(50),
+ alarm_description character varying(255),
+ longitude double precision,
+ latitude double precision,
+ alarm_type character varying(50),
+ create_time character varying(50) not null
+);
+
+drop table IF EXISTS wvp_device_mobile_position;
+create table IF NOT EXISTS wvp_device_mobile_position
+(
+ id serial primary key,
+ device_id character varying(50) not null,
+ channel_id character varying(50) not null,
+ device_name character varying(255),
+ time character varying(50),
+ longitude double precision,
+ latitude double precision,
+ altitude double precision,
+ speed double precision,
+ direction double precision,
+ report_source character varying(50),
+ create_time character varying(50)
+);
+
+drop table IF EXISTS wvp_device_channel;
+create table IF NOT EXISTS wvp_device_channel
+(
+ id serial primary key,
+ device_id character varying(50),
+ name character varying(255),
+ manufacturer character varying(50),
+ model character varying(50),
+ owner character varying(50),
+ civil_code character varying(50),
+ block character varying(50),
+ address character varying(50),
+ parental integer,
+ parent_id character varying(50),
+ safety_way integer,
+ register_way integer,
+ cert_num character varying(50),
+ certifiable integer,
+ err_code integer,
+ end_time character varying(50),
+ secrecy integer,
+ ip_address character varying(50),
+ port integer,
+ password character varying(255),
+ status character varying(50),
+ longitude double precision,
+ latitude double precision,
+ ptz_type integer,
+ position_type integer,
+ room_type integer,
+ use_type integer,
+ supply_light_type integer,
+ direction_type integer,
+ resolution character varying(255),
+ business_group_id character varying(255),
+ download_speed character varying(255),
+ svc_space_support_mod integer,
+ svc_time_support_mode integer,
+ create_time character varying(50) not null,
+ update_time character varying(50) not null,
+ sub_count integer,
+ stream_id character varying(255),
+ has_audio bool default false,
+ gps_time character varying(50),
+ stream_identification character varying(50),
+ channel_type int default 0 not null,
+ gb_device_id character varying(50),
+ gb_name character varying(255),
+ gb_manufacturer character varying(255),
+ gb_model character varying(255),
+ gb_owner character varying(255),
+ gb_civil_code character varying(255),
+ gb_block character varying(255),
+ gb_address character varying(255),
+ gb_parental integer,
+ gb_parent_id character varying(255),
+ gb_safety_way integer,
+ gb_register_way integer,
+ gb_cert_num character varying(50),
+ gb_certifiable integer,
+ gb_err_code integer,
+ gb_end_time character varying(50),
+ gb_secrecy integer,
+ gb_ip_address character varying(50),
+ gb_port integer,
+ gb_password character varying(50),
+ gb_status character varying(50),
+ gb_longitude double,
+ gb_latitude double,
+ gb_business_group_id character varying(50),
+ gb_ptz_type integer,
+ gb_position_type integer,
+ gb_room_type integer,
+ gb_use_type integer,
+ gb_supply_light_type integer,
+ gb_direction_type integer,
+ gb_resolution character varying(255),
+ gb_download_speed character varying(255),
+ gb_svc_space_support_mod integer,
+ gb_svc_time_support_mode integer,
+ record_plan_id integer,
+ data_type integer not null,
+ data_device_id integer not null,
+ gps_speed double precision,
+ gps_altitude double precision,
+ gps_direction double precision,
+ index (data_type),
+ index (data_device_id),
+ constraint uk_wvp_unique_channel unique (gb_device_id)
+);
+
+drop table IF EXISTS wvp_media_server;
+create table IF NOT EXISTS wvp_media_server
+(
+ id character varying(255) primary key,
+ ip character varying(50),
+ hook_ip character varying(50),
+ sdp_ip character varying(50),
+ stream_ip character varying(50),
+ http_port integer,
+ http_ssl_port integer,
+ rtmp_port integer,
+ rtmp_ssl_port integer,
+ rtp_proxy_port integer,
+ rtsp_port integer,
+ rtsp_ssl_port integer,
+ flv_port integer,
+ flv_ssl_port integer,
+ ws_flv_port integer,
+ ws_flv_ssl_port integer,
+ auto_config bool default false,
+ secret character varying(50),
+ type character varying(50) default 'zlm',
+ rtp_enable bool default false,
+ rtp_port_range character varying(50),
+ send_rtp_port_range character varying(50),
+ record_assist_port integer,
+ default_server bool default false,
+ create_time character varying(50),
+ update_time character varying(50),
+ hook_alive_interval integer,
+ record_path character varying(255),
+ record_day integer default 7,
+ transcode_suffix character varying(255),
+ server_id character varying(50),
+ constraint uk_media_server_unique_ip_http_port unique (ip, http_port, server_id)
+);
+
+drop table IF EXISTS wvp_platform;
+create table IF NOT EXISTS wvp_platform
+(
+ id serial primary key,
+ enable bool default false,
+ name character varying(255),
+ server_gb_id character varying(50),
+ server_gb_domain character varying(50),
+ server_ip character varying(50),
+ server_port integer,
+ device_gb_id character varying(50),
+ device_ip character varying(50),
+ device_port character varying(50),
+ username character varying(255),
+ password character varying(50),
+ expires character varying(50),
+ keep_timeout character varying(50),
+ transport character varying(50),
+ civil_code character varying(50),
+ manufacturer character varying(255),
+ model character varying(255),
+ address character varying(255),
+ character_set character varying(50),
+ ptz bool default false,
+ rtcp bool default false,
+ status bool default false,
+ catalog_group integer,
+ register_way integer,
+ secrecy integer,
+ create_time character varying(50),
+ update_time character varying(50),
+ as_message_channel bool default false,
+ catalog_with_platform integer default 1,
+ catalog_with_group integer default 1,
+ catalog_with_region integer default 1,
+ auto_push_channel bool default true,
+ send_stream_ip character varying(50),
+ server_id character varying(50),
+ constraint uk_platform_unique_server_gb_id unique (server_gb_id)
+);
+
+drop table IF EXISTS wvp_platform_channel;
+create table IF NOT EXISTS wvp_platform_channel
+(
+ id serial primary key,
+ platform_id integer,
+ device_channel_id integer,
+ custom_device_id character varying(50),
+ custom_name character varying(255),
+ custom_manufacturer character varying(50),
+ custom_model character varying(50),
+ custom_owner character varying(50),
+ custom_civil_code character varying(50),
+ custom_block character varying(50),
+ custom_address character varying(50),
+ custom_parental integer,
+ custom_parent_id character varying(50),
+ custom_safety_way integer,
+ custom_register_way integer,
+ custom_cert_num character varying(50),
+ custom_certifiable integer,
+ custom_err_code integer,
+ custom_end_time character varying(50),
+ custom_secrecy integer,
+ custom_ip_address character varying(50),
+ custom_port integer,
+ custom_password character varying(255),
+ custom_status character varying(50),
+ custom_longitude double precision,
+ custom_latitude double precision,
+ custom_ptz_type integer,
+ custom_position_type integer,
+ custom_room_type integer,
+ custom_use_type integer,
+ custom_supply_light_type integer,
+ custom_direction_type integer,
+ custom_resolution character varying(255),
+ custom_business_group_id character varying(255),
+ custom_download_speed character varying(255),
+ custom_svc_space_support_mod integer,
+ custom_svc_time_support_mode integer,
+ constraint uk_platform_gb_channel_platform_id_catalog_id_device_channel_id unique (platform_id, device_channel_id),
+ constraint uk_platform_gb_channel_device_id unique (custom_device_id)
+);
+
+drop table IF EXISTS wvp_platform_group;
+create table IF NOT EXISTS wvp_platform_group
+(
+ id serial primary key,
+ platform_id integer,
+ group_id integer,
+ constraint uk_wvp_platform_group_platform_id_group_id unique (platform_id, group_id)
+);
+
+drop table IF EXISTS wvp_platform_region;
+create table IF NOT EXISTS wvp_platform_region
+(
+ id serial primary key,
+ platform_id integer,
+ region_id integer,
+ constraint uk_wvp_platform_region_platform_id_group_id unique (platform_id, region_id)
+);
+
+drop table IF EXISTS wvp_stream_proxy;
+create table IF NOT EXISTS wvp_stream_proxy
+(
+ id serial primary key,
+ type character varying(50),
+ app character varying(255),
+ stream character varying(255),
+ src_url character varying(255),
+ timeout integer,
+ ffmpeg_cmd_key character varying(255),
+ rtsp_type character varying(50),
+ media_server_id character varying(50),
+ enable_audio bool default false,
+ enable_mp4 bool default false,
+ pulling bool default false,
+ enable bool default false,
+ enable_remove_none_reader bool default false,
+ create_time character varying(50),
+ name character varying(255),
+ update_time character varying(50),
+ stream_key character varying(255),
+ server_id character varying(50),
+ enable_disable_none_reader bool default false,
+ relates_media_server_id character varying(50),
+ constraint uk_stream_proxy_app_stream unique (app, stream)
+);
+
+drop table IF EXISTS wvp_stream_push;
+create table IF NOT EXISTS wvp_stream_push
+(
+ id serial primary key,
+ app character varying(255),
+ stream character varying(255),
+ create_time character varying(50),
+ media_server_id character varying(50),
+ server_id character varying(50),
+ push_time character varying(50),
+ status bool default false,
+ update_time character varying(50),
+ pushing bool default false,
+ self bool default false,
+ start_offline_push bool default true,
+ constraint uk_stream_push_app_stream unique (app, stream)
+);
+
+drop table IF EXISTS wvp_cloud_record;
+create table IF NOT EXISTS wvp_cloud_record
+(
+ id serial primary key,
+ app character varying(255),
+ stream character varying(255),
+ call_id character varying(255),
+ start_time bigint,
+ end_time bigint,
+ media_server_id character varying(50),
+ server_id character varying(50),
+ file_name character varying(255),
+ folder character varying(500),
+ file_path character varying(500),
+ collect bool default false,
+ file_size bigint,
+ time_len bigint
+);
+
+drop table IF EXISTS wvp_user;
+create table IF NOT EXISTS wvp_user
+(
+ id serial primary key,
+ username character varying(255),
+ password character varying(255),
+ role_id integer,
+ create_time character varying(50),
+ update_time character varying(50),
+ push_key character varying(50),
+ constraint uk_user_username unique (username)
+);
+
+drop table IF EXISTS wvp_user_role;
+create table IF NOT EXISTS wvp_user_role
+(
+ id serial primary key,
+ name character varying(50),
+ authority character varying(50),
+ create_time character varying(50),
+ update_time character varying(50)
+);
+
+
+drop table IF EXISTS wvp_user_api_key;
+create table IF NOT EXISTS wvp_user_api_key
+(
+ id serial primary key,
+ user_id bigint,
+ app character varying(255),
+ api_key text,
+ expired_at bigint,
+ remark character varying(255),
+ enable bool default true,
+ create_time character varying(50),
+ update_time character varying(50)
+);
+
+
+/*初始数据*/
+INSERT INTO wvp_user
+VALUES (1, 'admin', '21232f297a57a5a743894a0e4a801fc3', 1, '2021-04-13 14:14:57', '2021-04-13 14:14:57',
+ '3e80d1762a324d5b0ff636e0bd16f1e3');
+INSERT INTO wvp_user_role
+VALUES (1, 'admin', '0', '2021-04-13 14:14:57', '2021-04-13 14:14:57');
+
+drop table IF EXISTS wvp_common_group;
+create table IF NOT EXISTS wvp_common_group
+(
+ id serial primary key,
+ device_id varchar(50) NOT NULL,
+ name varchar(255) NOT NULL,
+ parent_id int,
+ parent_device_id varchar(50) DEFAULT NULL,
+ business_group varchar(50) NOT NULL,
+ create_time varchar(50) NOT NULL,
+ update_time varchar(50) NOT NULL,
+ civil_code varchar(50) default null,
+ constraint uk_common_group_device_platform unique (device_id)
+);
+
+drop table IF EXISTS wvp_common_region;
+create table IF NOT EXISTS wvp_common_region
+(
+ id serial primary key,
+ device_id varchar(50) NOT NULL,
+ name varchar(255) NOT NULL,
+ parent_id int,
+ parent_device_id varchar(50) DEFAULT NULL,
+ create_time varchar(50) NOT NULL,
+ update_time varchar(50) NOT NULL,
+ constraint uk_common_region_device_id unique (device_id)
+);
+
+drop table IF EXISTS wvp_record_plan;
+create table IF NOT EXISTS wvp_record_plan
+(
+ id serial primary key,
+ snap bool default false,
+ name varchar(255) NOT NULL,
+ create_time character varying(50),
+ update_time character varying(50)
+);
+
+drop table IF EXISTS wvp_record_plan_item;
+create table IF NOT EXISTS wvp_record_plan_item
+(
+ id serial primary key,
+ start int,
+ stop int,
+ week_day int,
+ plan_id int,
+ create_time character varying(50),
+ update_time character varying(50)
+);
+
+/*
+* 20240528
+*/
+DELIMITER // -- 重定义分隔符避免分号冲突
+CREATE PROCEDURE `wvp_20240528`()
+BEGIN
+ IF NOT EXISTS (SELECT column_name FROM information_schema.columns
+ WHERE TABLE_SCHEMA = (SELECT DATABASE()) and table_name = 'wvp_media_server' and column_name = 'transcode_suffix')
+ THEN
+ ALTER TABLE wvp_media_server ADD transcode_suffix character varying(255);
+ END IF;
+
+ IF not EXISTS (SELECT column_name FROM information_schema.columns
+ WHERE TABLE_SCHEMA = (SELECT DATABASE()) and table_name = 'wvp_media_server' and column_name = 'type')
+ THEN
+ alter table wvp_media_server
+ add type character varying(50) default 'zlm';
+ END IF;
+
+ IF not EXISTS (SELECT column_name FROM information_schema.columns
+ WHERE TABLE_SCHEMA = (SELECT DATABASE()) and table_name = 'wvp_media_server' and column_name = 'flv_port')
+ THEN
+ alter table wvp_media_server add flv_port integer;
+ END IF;
+
+ IF not EXISTS (SELECT column_name FROM information_schema.columns
+ WHERE TABLE_SCHEMA = (SELECT DATABASE()) and table_name = 'wvp_media_server' and column_name = 'flv_ssl_port')
+ THEN
+ alter table wvp_media_server add flv_ssl_port integer;
+ END IF;
+
+ IF not EXISTS (SELECT column_name FROM information_schema.columns
+ WHERE TABLE_SCHEMA = (SELECT DATABASE()) and table_name = 'wvp_media_server' and column_name = 'ws_flv_port')
+ THEN
+ alter table wvp_media_server add ws_flv_port integer;
+ END IF;
+
+ IF not EXISTS (SELECT column_name FROM information_schema.columns
+ WHERE TABLE_SCHEMA = (SELECT DATABASE()) and table_name = 'wvp_media_server' and column_name = 'ws_flv_ssl_port')
+ THEN
+ alter table wvp_media_server add ws_flv_ssl_port integer;
+ END IF;
+END; //
+call wvp_20240528();
+DROP PROCEDURE wvp_20240528;
+DELIMITER ;
+
+create table IF NOT EXISTS wvp_user_api_key (
+ id serial primary key ,
+ user_id bigint,
+ app character varying(255) ,
+ api_key text,
+ expired_at bigint,
+ remark character varying(255),
+ enable bool default true,
+ create_time character varying(50),
+ update_time character varying(50)
+);
+
+/*
+* 20241222
+*/
+DELIMITER // -- 重定义分隔符避免分号冲突
+CREATE PROCEDURE `wvp_20241222`()
+BEGIN
+ IF EXISTS (SELECT column_name FROM information_schema.STATISTICS
+ WHERE TABLE_SCHEMA = (SELECT DATABASE()) and table_name = 'wvp_device_channel' and INDEX_NAME = 'uk_wvp_device_channel_unique_device_channel')
+ THEN
+ alter table wvp_device_channel drop index uk_wvp_device_channel_unique_device_channel;
+ END IF;
+
+ IF EXISTS (SELECT column_name FROM information_schema.STATISTICS
+ WHERE TABLE_SCHEMA = (SELECT DATABASE()) and table_name = 'wvp_device_channel' and INDEX_NAME = 'uk_wvp_unique_stream_push_id')
+ THEN
+ alter table wvp_device_channel drop index uk_wvp_unique_stream_push_id;
+ END IF;
+
+ IF EXISTS (SELECT column_name FROM information_schema.STATISTICS
+ WHERE TABLE_SCHEMA = (SELECT DATABASE()) and table_name = 'wvp_device_channel' and INDEX_NAME = 'uk_wvp_unique_stream_proxy_id')
+ THEN
+ alter table wvp_device_channel drop index uk_wvp_unique_stream_proxy_id;
+ END IF;
+
+ IF not EXISTS (SELECT column_name FROM information_schema.columns
+ WHERE TABLE_SCHEMA = (SELECT DATABASE()) and table_name = 'wvp_device_channel' and column_name = 'data_type')
+ THEN
+ alter table wvp_device_channel add data_type integer not null;
+ END IF;
+
+ IF not EXISTS (SELECT column_name FROM information_schema.columns
+ WHERE TABLE_SCHEMA = (SELECT DATABASE()) and table_name = 'wvp_device_channel' and column_name = 'data_device_id')
+ THEN
+ alter table wvp_device_channel add data_device_id integer not null;
+ END IF;
+
+ IF EXISTS (SELECT column_name FROM information_schema.columns
+ WHERE TABLE_SCHEMA = (SELECT DATABASE()) and table_name = 'wvp_device_channel' and column_name = 'device_db_id')
+ THEN
+ update wvp_device_channel wdc INNER JOIN
+ (SELECT id, device_db_id from wvp_device_channel where device_db_id is not null ) ct on ct.id = wdc.id
+ set wdc.data_type = 1, wdc.data_device_id = ct.device_db_id where wdc.device_db_id is not null;
+ alter table wvp_device_channel drop device_db_id;
+ END IF;
+
+ IF EXISTS (SELECT column_name FROM information_schema.columns
+ WHERE TABLE_SCHEMA = (SELECT DATABASE()) and table_name = 'wvp_device_channel' and column_name = 'stream_push_id')
+ THEN
+ update wvp_device_channel wdc INNER JOIN
+ (SELECT id, stream_push_id from wvp_device_channel where stream_push_id is not null ) ct on ct.id = wdc.id
+ set wdc.data_type = 2, wdc.data_device_id = ct.stream_push_id where wdc.stream_push_id is not null;
+ alter table wvp_device_channel drop stream_push_id;
+ END IF;
+
+ IF EXISTS (SELECT column_name FROM information_schema.columns
+ WHERE TABLE_SCHEMA = (SELECT DATABASE()) and table_name = 'wvp_device_channel' and column_name = 'stream_proxy_id')
+ THEN
+ update wvp_device_channel wdc INNER JOIN
+ (SELECT id, stream_proxy_id from wvp_device_channel where stream_proxy_id is not null ) ct on ct.id = wdc.id
+ set wdc.data_type = 3, wdc.data_device_id = ct.stream_proxy_id where wdc.stream_proxy_id is not null;
+ alter table wvp_device_channel drop stream_proxy_id;
+ END IF;
+END; //
+call wvp_20241222();
+DROP PROCEDURE wvp_20241222;
+DELIMITER ;
+/*
+* 20241231
+*/
+DELIMITER //
+CREATE PROCEDURE `wvp_20241231`()
+BEGIN
+ IF not EXISTS (SELECT column_name FROM information_schema.columns
+ WHERE TABLE_SCHEMA = (SELECT DATABASE()) and table_name = 'wvp_stream_proxy' and column_name = 'relates_media_server_id')
+ THEN
+ alter table wvp_stream_proxy add relates_media_server_id character varying(50);
+ END IF;
+END; //
+call wvp_20241231();
+DROP PROCEDURE wvp_20241231;
+DELIMITER ;
+/*
+* 20250111
+*/
+DELIMITER // -- 重定义分隔符避免分号冲突
+CREATE PROCEDURE `wvp_20250111`()
+BEGIN
+ IF EXISTS (SELECT column_name FROM information_schema.STATISTICS
+ WHERE TABLE_SCHEMA = (SELECT DATABASE()) and table_name = 'wvp_cloud_record' and INDEX_NAME = 'uk_stream_push_app_stream_path')
+ THEN
+ alter table wvp_cloud_record drop index uk_stream_push_app_stream_path ;
+ END IF;
+
+ IF EXISTS (SELECT column_name FROM information_schema.columns
+ WHERE TABLE_SCHEMA = (SELECT DATABASE()) and table_name = 'wvp_cloud_record' and column_name = 'folder')
+ THEN
+ alter table wvp_cloud_record modify folder varchar(500) null;
+ END IF;
+
+ IF EXISTS (SELECT column_name FROM information_schema.columns
+ WHERE TABLE_SCHEMA = (SELECT DATABASE()) and table_name = 'wvp_cloud_record' and column_name = 'file_path')
+ THEN
+ alter table wvp_cloud_record modify file_path varchar(500) null;
+ END IF;
+END; //
+call wvp_20250111();
+DROP PROCEDURE wvp_20250111;
+DELIMITER ;
+
+/*
+* 20250211
+*/
+DELIMITER // -- 重定义分隔符避免分号冲突
+CREATE PROCEDURE `wvp_20250211`()
+BEGIN
+ IF EXISTS (SELECT column_name FROM information_schema.STATISTICS
+ WHERE TABLE_SCHEMA = (SELECT DATABASE()) and table_name = 'wvp_device' and column_name = 'keepalive_interval_time')
+ THEN
+ alter table wvp_device change keepalive_interval_time heart_beat_interval integer after as_message_channel;
+ END IF;
+
+ IF not EXISTS (SELECT column_name FROM information_schema.columns
+ WHERE TABLE_SCHEMA = (SELECT DATABASE()) and table_name = 'wvp_device' and column_name = 'heart_beat_count')
+ THEN
+ alter table wvp_device add heart_beat_count integer;
+ END IF;
+
+ IF not EXISTS (SELECT column_name FROM information_schema.columns
+ WHERE TABLE_SCHEMA = (SELECT DATABASE()) and table_name = 'wvp_device' and column_name = 'position_capability')
+ THEN
+ alter table wvp_device add position_capability integer;
+ END IF;
+END; //
+call wvp_20250211();
+DROP PROCEDURE wvp_20250211;
+DELIMITER ;
+
+/**
+ * 20250312
+ */
+DELIMITER // -- 重定义分隔符避免分号冲突
+CREATE PROCEDURE `wvp_20250312`()
+BEGIN
+ DECLARE serverId VARCHAR(32) DEFAULT '你的服务ID';
+ IF not EXISTS (SELECT column_name FROM information_schema.columns
+ WHERE TABLE_SCHEMA = (SELECT DATABASE()) and table_name = 'wvp_device' and column_name = 'server_id')
+ THEN
+ alter table wvp_device add server_id character varying(50);
+ update wvp_device set server_id = serverId;
+ END IF;
+
+ IF not EXISTS (SELECT column_name FROM information_schema.columns
+ WHERE TABLE_SCHEMA = (SELECT DATABASE()) and table_name = 'wvp_media_server' and column_name = 'server_id')
+ THEN
+ alter table wvp_media_server add server_id character varying(50);
+ update wvp_media_server set server_id = serverId;
+ END IF;
+
+ IF not EXISTS (SELECT column_name FROM information_schema.columns
+ WHERE TABLE_SCHEMA = (SELECT DATABASE()) and table_name = 'wvp_stream_proxy' and column_name = 'server_id')
+ THEN
+ alter table wvp_stream_proxy add server_id character varying(50);
+ update wvp_stream_proxy set server_id = serverId;
+ END IF;
+
+ IF not EXISTS (SELECT column_name FROM information_schema.columns
+ WHERE TABLE_SCHEMA = (SELECT DATABASE()) and table_name = 'wvp_cloud_record' and column_name = 'server_id')
+ THEN
+ alter table wvp_cloud_record add server_id character varying(50);
+ update wvp_cloud_record set server_id = serverId;
+ END IF;
+
+ IF not EXISTS (SELECT column_name FROM information_schema.columns
+ WHERE TABLE_SCHEMA = (SELECT DATABASE()) and table_name = 'wvp_platform' and column_name = 'server_id')
+ THEN
+ alter table wvp_platform add server_id character varying(50);
+ END IF;
+END; //
+call wvp_20250312();
+DROP PROCEDURE wvp_20250312;
+DELIMITER ;
+
+/*
+* 20250319
+*/
+DELIMITER // -- 重定义分隔符避免分号冲突
+CREATE PROCEDURE `wvp_20250319`()
+BEGIN
+ IF NOT EXISTS (SELECT column_name FROM information_schema.columns
+ WHERE TABLE_SCHEMA = (SELECT DATABASE()) and table_name = 'wvp_device_channel' and column_name = 'gps_speed')
+ THEN
+ alter table wvp_device_channel add gps_speed double precision;
+ END IF;
+
+ IF NOT EXISTS (SELECT column_name FROM information_schema.columns
+ WHERE TABLE_SCHEMA = (SELECT DATABASE()) and table_name = 'wvp_device_channel' and column_name = 'gps_altitude')
+ THEN
+ alter table wvp_device_channel add gps_altitude double precision;
+ END IF;
+
+ IF NOT EXISTS (SELECT column_name FROM information_schema.columns
+ WHERE TABLE_SCHEMA = (SELECT DATABASE()) and table_name = 'wvp_device_channel' and column_name = 'gps_direction')
+ THEN
+ alter table wvp_device_channel add gps_direction double precision;
+ END IF;
+END; //
+call wvp_20250319();
+DROP PROCEDURE wvp_20250319;
+DELIMITER ;
+
+/*
+* 20250402
+*/
+DELIMITER // -- 重定义分隔符避免分号冲突
+CREATE PROCEDURE `wvp_20250402`()
+BEGIN
+ IF NOT EXISTS (SELECT column_name FROM information_schema.STATISTICS
+ WHERE TABLE_SCHEMA = (SELECT DATABASE()) and table_name = 'wvp_device_channel' and INDEX_NAME = 'data_type')
+ THEN
+ create index data_type on wvp_device_channel (data_type);
+ END IF;
+ IF NOT EXISTS (SELECT column_name FROM information_schema.STATISTICS
+ WHERE TABLE_SCHEMA = (SELECT DATABASE()) and table_name = 'wvp_device_channel' and INDEX_NAME = 'data_device_id')
+ THEN
+ create index data_device_id on wvp_device_channel (data_device_id);
+ END IF;
+
+END; //
+call wvp_20250402();
+DROP PROCEDURE wvp_20250402;
+DELIMITER ;
+
+
+
diff --git a/docker/nginx/Dockerfile b/docker/nginx/Dockerfile
new file mode 100644
index 000000000..91403f8e7
--- /dev/null
+++ b/docker/nginx/Dockerfile
@@ -0,0 +1,19 @@
+FROM nginx:alpine
+
+RUN apk add --no-cache bash
+
+ARG TZ=Asia/Shanghai
+RUN \
+ sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories && \
+ apk update && \
+ apk add tzdata
+RUN ln -sf /usr/share/zoneinfo/${TZ} /etc/localtime && \
+ echo '${TZ}' > /etc/timezone
+
+RUN rm -rf /etc/nginx/conf.d/*
+RUN mkdir /opt/dist
+COPY ./dist /opt/dist
+COPY ./conf/nginx.conf /etc/nginx/conf.d
+
+CMD ["nginx","-g","daemon off;"]
+
diff --git a/docker/nginx/build.sh b/docker/nginx/build.sh
new file mode 100755
index 000000000..717d54664
--- /dev/null
+++ b/docker/nginx/build.sh
@@ -0,0 +1,11 @@
+#/bin/bash
+set -e
+
+version=2.7.3
+
+rm ./dist/static/js/config.js
+cp ./config.js ./dist/static/js/
+
+docker build -t polaris-nginx:${version} .
+docker tag polaris-nginx:${version} polaris-tian-docker.pkg.coding.net/qt/polaris/polaris-nginx:${version}
+docker tag polaris-nginx:${version} polaris-tian-docker.pkg.coding.net/qt/polaris/polaris-nginx:latest
\ No newline at end of file
diff --git a/docker/nginx/conf/nginx.conf b/docker/nginx/conf/nginx.conf
new file mode 100644
index 000000000..ede96ec67
--- /dev/null
+++ b/docker/nginx/conf/nginx.conf
@@ -0,0 +1,55 @@
+#user nobody;
+worker_processes 1;
+
+#error_log logs/error.log;
+#error_log logs/error.log notice;
+#error_log logs/error.log info;
+
+#pid logs/nginx.pid;
+
+
+events {
+ worker_connections 1024;
+}
+
+
+http {
+ include mime.types;
+ default_type application/octet-stream;
+
+ sendfile on;
+ #tcp_nopush on;
+
+ #keepalive_timeout 0;
+ keepalive_timeout 65;
+
+ #gzip on;
+
+ server {
+ listen 8080;
+ server_name localhost;
+
+ location / {
+ root /opt/dist;
+ index index.html index.htm;
+ }
+ location /record_proxy/{
+ proxy_set_header Host $http_host;
+ proxy_set_header X-Real-IP $remote_addr;
+ proxy_set_header REMOTE-HOST $remote_addr;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ proxy_pass http://polaris-wvp:18978/;
+ }
+ location /api/ {
+ proxy_set_header Host $http_host;
+ proxy_set_header X-Real-IP $remote_addr;
+ proxy_set_header REMOTE-HOST $remote_addr;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ proxy_pass http://polaris-wvp:18978;
+ }
+ error_page 500 502 503 504 /50x.html;
+ location = /50x.html {
+ root html;
+ }
+ }
+}
diff --git a/docker/nginx/config.js b/docker/nginx/config.js
new file mode 100644
index 000000000..f63449dcf
--- /dev/null
+++ b/docker/nginx/config.js
@@ -0,0 +1,22 @@
+
+window.baseUrl = "http://10.10.1.124:18978"
+
+// map组件全局参数, 注释此内容可以关闭地图功能
+window.mapParam = {
+ // 开启/关闭地图功能
+ enable: true,
+ // 坐标系 GCJ-02 WGS-84,
+ coordinateSystem: "GCJ-02",
+ // 地图瓦片地址
+ tilesUrl: "http://webrd0{1-4}.is.autonavi.com/appmaptile?x={x}&y={y}&z={z}&lang=zh_cn&size=1&scale=1&style=8",
+ // 瓦片大小
+ tileSize: 256,
+ // 默认层级
+ zoom:10,
+ // 默认地图中心点
+ center:[116.41020, 39.915119],
+ // 地图最大层级
+ maxZoom:18,
+ // 地图最小层级
+ minZoom: 3
+}
diff --git a/docker/push.sh b/docker/push.sh
new file mode 100755
index 000000000..468a9570c
--- /dev/null
+++ b/docker/push.sh
@@ -0,0 +1,15 @@
+#/bin/bash
+set -e
+
+version=2.7.3
+
+docker push polaris-tian-docker.pkg.coding.net/qt/polaris/ylcx-media:latest
+docker push polaris-tian-docker.pkg.coding.net/qt/polaris/ylcx-mysql:latest
+docker push polaris-tian-docker.pkg.coding.net/qt/polaris/ylcx-redis:latest
+docker push polaris-tian-docker.pkg.coding.net/qt/polaris/ylcx-wvp:latest
+docker push polaris-tian-docker.pkg.coding.net/qt/polaris/ylcx-nginx:latest
+docker push polaris-tian-docker.pkg.coding.net/qt/polaris/ylcx-media:${version}
+docker push polaris-tian-docker.pkg.coding.net/qt/polaris/ylcx-mysql:${version}
+docker push polaris-tian-docker.pkg.coding.net/qt/polaris/ylcx-redis:${version}
+docker push polaris-tian-docker.pkg.coding.net/qt/polaris/ylcx-wvp:${version}
+docker push polaris-tian-docker.pkg.coding.net/qt/polaris/ylcx-nginx:${version}
\ No newline at end of file
diff --git a/docker/redis/Dockerfile b/docker/redis/Dockerfile
new file mode 100644
index 000000000..d92f80908
--- /dev/null
+++ b/docker/redis/Dockerfile
@@ -0,0 +1,5 @@
+FROM redis
+
+RUN mkdir -p /opt/polaris/redis
+WORKDIR /opt/polaris/redis
+COPY ./conf/redis.conf /opt/polaris/redis/redis.conf
\ No newline at end of file
diff --git a/docker/redis/build.sh b/docker/redis/build.sh
new file mode 100755
index 000000000..a990f8f5e
--- /dev/null
+++ b/docker/redis/build.sh
@@ -0,0 +1,8 @@
+#/bin/bash
+set -e
+
+version=2.7.3
+
+docker build -t polaris-redis:${version} .
+docker tag polaris-redis:${version} polaris-tian-docker.pkg.coding.net/qt/polaris/polaris-redis:${version}
+docker tag polaris-redis:${version} polaris-tian-docker.pkg.coding.net/qt/polaris/polaris-redis:latest
\ No newline at end of file
diff --git a/docker/redis/conf/redis.conf b/docker/redis/conf/redis.conf
new file mode 100644
index 000000000..a151bd428
--- /dev/null
+++ b/docker/redis/conf/redis.conf
@@ -0,0 +1,2 @@
+#requirepass root
+bind 0.0.0.0
\ No newline at end of file
diff --git a/docker/redis/redis.conf b/docker/redis/redis.conf
deleted file mode 100644
index c211f137e..000000000
--- a/docker/redis/redis.conf
+++ /dev/null
@@ -1,2 +0,0 @@
-requirepass root
-bind 0.0.0.0
diff --git a/docker/wvp/Dockerfile b/docker/wvp/Dockerfile
index 34e3babbd..67286b19f 100644
--- a/docker/wvp/Dockerfile
+++ b/docker/wvp/Dockerfile
@@ -1,81 +1,64 @@
-FROM ubuntu:20.04 as build
+FROM ubuntu:20.04 AS build
+ARG Platfrom=amd64
+ARG JDK_NAME
-ARG gitUrl="https://gitee.com/pan648540858"
-ARG zlmGitUrl="https://gitee.com/xia-chu/ZLMediaKit"
+EXPOSE 18978/tcp
+EXPOSE 8116/tcp
+EXPOSE 8116/udp
+EXPOSE 8080/tcp
-RUN export DEBIAN_FRONTEND=noninteractive &&\
- apt-get update && \
- apt-get install -y --no-install-recommends openjdk-11-jre git maven nodejs npm build-essential \
- cmake ca-certificates openssl ffmpeg &&\
- mkdir -p /opt/wvp/config /opt/wvp/heapdump /opt/wvp/config /opt/assist/config /opt/assist/heapdump /opt/media/www/record
+RUN apt-get update && \
+ DEBIAN_FRONTEND="noninteractive" \
+ apt-get install -y --no-install-recommends \
+ wget \
+ cmake \
+ maven \
+ git \
+ ca-certificates \
+ tzdata \
+ curl \
+ libpcre3 \
+ libpcre3-dev \
+ zlib1g-dev \
+ openssl \
+ libssl-dev \
+ gdb && \
+ apt-get autoremove -y && \
+ apt-get clean -y && \
+ rm -rf /var/lib/apt/lists/*
-RUN cd /home && \
- git clone "${gitUrl}/maven.git" && \
- cp maven/settings.xml /usr/share/maven/conf/
+# install jdk1.8
+RUN mkdir -p /opt/download
+WORKDIR /opt/download
+RUN if [ "$Platfrom" = "arm64" ]; \
+ then \
+ wget https://polaris-tian-generic.pkg.coding.net/qt/autopliot/jdk-8u411-linux-aarch64.tar.gz?version=latest --no-check-certificate -O jdk-8.tar.gz && \
+ tar -zxvf /opt/download/jdk-8.tar.gz -C /usr/local/ --transform 's/jdk1.8.0_411/java/' && \
+ rm /opt/download/jdk-8.tar.gz; \
+ else \
+ wget https://polaris-tian-generic.pkg.coding.net/qt/autopliot/jdk-8u202-linux-x64.tar.gz?version=latest --no-check-certificate -O jdk-8.tar.gz && \
+ tar -zxvf /opt/download/jdk-8.tar.gz -C /usr/local/ --transform 's/jdk1.8.0_202/java/' && \
+ rm /opt/download/jdk-8.tar.gz; \
+ fi
-RUN cd /home && \
- git clone "${gitUrl}/wvp-GB28181-pro.git"
-RUN cd /home/wvp-GB28181-pro/web_src && \
- npm install && \
- npm run build
-RUN cd /home/wvp-GB28181-pro && \
- mvn clean package -Dmaven.test.skip=true && \
- cp /home/wvp-GB28181-pro/target/*.jar /opt/wvp/ && \
- cp /home/wvp-GB28181-pro/src/main/resources/application-docker.yml /opt/wvp/config/application.yml
+ENV JAVA_HOME /usr/local/java/
+ENV JRE_HOME ${JAVA_HOME}/jre
+ENV CLASSPATH .:${JAVA_HOME}/lib:${JRE_HOME}/lib
+ENV PATH ${JAVA_HOME}/bin:$PATH
-RUN cd /home && \
- git clone "${gitUrl}/wvp-pro-assist.git"
-RUN cd /home/wvp-pro-assist && \
- git reset --hard 58f1a79136a55a7cd1593c95b56ddadcc2225b61 && \
- mvn clean package -Dmaven.test.skip=true && \
- cp /home/wvp-pro-assist/target/*.jar /opt/assist/ && \
- cp /home/wvp-pro-assist/src/main/resources/application-dev.yml /opt/assist/config/application.yml
+RUN java -version && javac -version
-RUN cd /home && \
- git clone --depth=1 "${zlmGitUrl}"
-RUN cd /home/ZLMediaKit && \
- git submodule update --init --recursive && \
- mkdir -p build release/linux/Release/ &&\
- cd build && \
- cmake -DCMAKE_BUILD_TYPE=Release .. && \
- make -j4 && \
- rm -rf ../release/linux/Release/config.ini && \
- cp -r ../release/linux/Release/* /opt/media
-
-RUN cd /opt/wvp && \
- echo '#!/bin/bash' > run.sh && \
- echo 'echo ${WVP_IP}' >> run.sh && \
- echo 'echo ${WVP_CONFIG}' >> run.sh && \
- echo 'cd /opt/assist' >> run.sh && \
- echo 'nohup java ${ASSIST_JVM_CONFIG} -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/opt/assist/heapdump/ -jar *.jar --spring.config.location=/opt/assist/config/application.yml --userSettings.record=/opt/media/www/record/ --media.record-assist-port=18081 ${ASSIST_CONFIG} &' >> run.sh && \
- echo 'nohup /opt/media/MediaServer -d -m 3 &' >> run.sh && \
- echo 'cd /opt/wvp' >> run.sh && \
- echo 'java ${WVP_JVM_CONFIG} -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/opt/wvp/heapdump/ -jar *.jar --spring.config.location=/opt/wvp/config/application.yml --media.record-assist-port=18081 ${WVP_CONFIG}' >> run.sh && \
- chmod +x run.sh
-
-FROM ubuntu:20.04
-
-EXPOSE 18080/tcp
-EXPOSE 5060/tcp
-EXPOSE 5060/udp
-EXPOSE 6379/tcp
-EXPOSE 18081/tcp
-EXPOSE 80/tcp
-EXPOSE 1935/tcp
-EXPOSE 554/tcp
-EXPOSE 554/udp
-EXPOSE 30000-30500/tcp
-EXPOSE 30000-30500/udp
-
-ENV LC_ALL zh_CN.UTF-8
-
-RUN export DEBIAN_FRONTEND=noninteractive &&\
- apt-get update && \
- apt-get install -y --no-install-recommends openjdk-11-jre ca-certificates ffmpeg language-pack-zh-hans && \
- apt-get autoremove -y && \
- apt-get clean -y && \
- rm -rf /var/lib/apt/lists/*dic
-
-COPY --from=build /opt /opt
+RUN mkdir -p /opt/wvp
WORKDIR /opt/wvp
-CMD ["sh", "run.sh"]
+COPY ./wvp /opt/wvp
+
+WORKDIR /home
+RUN cd /home && \
+ git clone https://gitee.com/pan648540858/wvp-GB28181-pro.git
+
+RUN cd /home/wvp-GB28181-pro && \
+ mvn clean package -Dmaven.test.skip=true && \
+ cp /home/wvp-GB28181-pro/target/*.jar /opt/wvp/wvp.jar
+
+WORKDIR /opt/wvp
+ENTRYPOINT ["java", "-Xms512m", "-Xmx1024m", "-XX:+HeapDumpOnOutOfMemoryError", "-XX:HeapDumpPath=/opt/ylcx/", "-jar", "wvp.jar", "--spring.config.location=/opt/ylcx/wvp/application.yml"]
\ No newline at end of file
diff --git a/docker/wvp/build.sh b/docker/wvp/build.sh
new file mode 100755
index 000000000..f45df290d
--- /dev/null
+++ b/docker/wvp/build.sh
@@ -0,0 +1,8 @@
+#/bin/bash
+set -e
+
+version=2.7.3
+
+docker build -t polaris-wvp:${version} .
+docker tag polaris-wvp:${version} polaris-tian-docker.pkg.coding.net/qt/polaris/polaris-wvp:${version}
+docker tag polaris-wvp:${version} polaris-tian-docker.pkg.coding.net/qt/polaris/polaris-wvp:latest
\ No newline at end of file
diff --git a/docker/wvp/wvp/application-base.yml b/docker/wvp/wvp/application-base.yml
new file mode 100755
index 000000000..c15c6e57f
--- /dev/null
+++ b/docker/wvp/wvp/application-base.yml
@@ -0,0 +1,105 @@
+spring:
+ # 设置接口超时时间
+ mvc:
+ async:
+ request-timeout: 20000
+ thymeleaf:
+ cache: false
+ # [可选]上传文件大小限制
+ servlet:
+ multipart:
+ max-file-size: 10MB
+ max-request-size: 100MB
+ # REDIS数据库配置
+ redis:
+ # [必须修改] Redis服务器IP, REDIS安装在本机的,使用127.0.0.1
+ host: 127.0.0.1
+ # [必须修改] 端口号
+ port: 6379
+ # [可选] 数据库 DB
+ database: 1
+ # [可选] 访问密码,若你的redis服务器没有设置密码,就不需要用密码去连接
+ password:
+ # [可选] 超时时间
+ timeout: 30000
+ # mysql数据源
+ datasource:
+ dynamic:
+ type: com.zaxxer.hikari.HikariDataSource
+ driver-class-name: com.mysql.cj.jdbc.Driver
+ url: jdbc:mysql://127.0.0.1:3306/wvp?useUnicode=true&characterEncoding=UTF8&rewriteBatchedStatements=true&serverTimezone=PRC&useSSL=false&allowMultiQueries=true
+ username: root
+ password: root
+#[可选] 监听的HTTP端口, 网页和接口调用都是这个端口
+server:
+ port: 18978
+ ssl:
+ # [可选] 是否开启HTTPS访问
+ enabled: false
+# 作为28181服务器的配置
+sip:
+ # [必须修改] 本机的IP
+ ip: 127.0.0.1
+ # [可选]
+ port: 8116
+ # [可选]
+ domain: 3402000000
+ # [可选]
+ id: 34020000002000000001
+ password:
+ alarm: true
+
+# 默认服务器配置
+media:
+ id: polaris
+ # [必须修改]内网IP
+ ip: 127.0.0.1
+ http-port: 6080
+ # [可选] 返回流地址时的ip,置空使用 media.ip
+ stream-ip: 127.0.0.1
+ # [可选] wvp在国标信令中使用的ip,此ip为摄像机可以访问到的ip, 置空使用 media.ip
+ sdp-ip: 127.0.0.1
+ # [可选] Hook IP, 默认使用sip.ip
+ hook-ip: 127.0.0.1
+ # [可选] sslport
+ http-ssl-port: 4443
+ rtp-proxy-port: 10000
+ rtmp-port: 10935
+ rtmp-ssl-port: 41935
+ rtsp-port: 5540
+ rtsp-ssl-port: 45540
+ # [可选]
+ secret: su6TiedN2rVAmBbIDX0aa0QTiBJLBdcf
+ # 启用多端口模式, 多端口模式使用端口区分每路流,兼容性更好。 单端口使用流的ssrc区分, 点播超时建议使用多端口测试
+ rtp:
+ # [可选] 是否启用多端口模式, 开启后会在portRange范围内选择端口用于媒体流传输
+ enable: false
+ # [可选]
+ port-range: 30000,30500
+ # [可选]
+ send-port-range: 50502,50506
+
+ record-path: /opt/media/record
+ record-day: 7
+ record-assist-port: 0
+user-settings:
+ auto-apply-play: true
+ play-timeout: 30000
+ wait-track: false
+ record-push-live: false
+ record-sip: false
+ stream-on-demand: true
+ interface-authentication: false
+ broadcast-for-platform: TCP-PASSIVE
+ push-stream-after-ack: true
+ send-to-platforms-when-id-lost: true
+ interface-authentication-excludes:
+ - /api/**
+ push-authority: false
+ allowed-origins:
+ - http://localhost:8080
+ - http://127.0.0.1:8080
+ - http://0.0.0.0:8080
+logging:
+ config: classpath:logback-spring.xml
+
diff --git a/docker/wvp/wvp/application-docker.yml b/docker/wvp/wvp/application-docker.yml
new file mode 100644
index 000000000..68c411e7b
--- /dev/null
+++ b/docker/wvp/wvp/application-docker.yml
@@ -0,0 +1,106 @@
+spring:
+ # 设置接口超时时间
+ mvc:
+ async:
+ request-timeout: 20000
+ thymeleaf:
+ cache: false
+ # [可选]上传文件大小限制
+ servlet:
+ multipart:
+ max-file-size: 10MB
+ max-request-size: 100MB
+ # REDIS数据库配置
+ redis:
+ # [必须修改] Redis服务器IP, REDIS安装在本机的,使用127.0.0.1
+ host: ${REDIS_HOST:127.0.0.1}
+ # [必须修改] 端口号
+ port: ${REDIS_PORT:6379}
+ # [可选] 数据库 DB
+ database: 1
+ # [可选] 访问密码,若你的redis服务器没有设置密码,就不需要用密码去连接
+ password:
+ # [可选] 超时时间
+ timeout: 30000
+ # mysql数据源
+ datasource:
+ type: com.zaxxer.hikari.HikariDataSource
+ driver-class-name: com.mysql.cj.jdbc.Driver
+ url: jdbc:mysql://${DATABASE_HOST:127.0.0.1}:${DATABASE_PORT:3306}/wvp?useUnicode=true&characterEncoding=UTF8&rewriteBatchedStatements=true&serverTimezone=PRC&useSSL=false&allowMultiQueries=true&allowPublicKeyRetrieval=true
+ username: ${DATABASE_USER:root}
+ password: ${DATABASE_PASSWORD:root}
+
+#[可选] 监听的HTTP端口, 网页和接口调用都是这个端口
+server:
+ port: 18978
+ ssl:
+ # [可选] 是否开启HTTPS访问
+ enabled: false
+# 作为28181服务器的配置
+sip:
+ # [必须修改] 本机的IP
+ ip: ${SIP_HOST:127.0.0.1}
+ # [可选]
+ port: 8116
+ # [可选]
+ domain: 3402000000
+ # [可选]
+ id: 34020000002000000001
+ password:
+ alarm: true
+
+# 默认服务器配置
+media:
+ id: polaris
+ # [必须修改] ZLM 内网IP与端口
+ ip: ${ZLM_HOST:127.0.0.1}
+ http-port: ${ZLM_PORT:6080}
+ # [可选] 返回流地址时的ip,置空使用 media.ip
+ stream-ip: ${STREAM_HOST:127.0.0.1}
+ # [可选] wvp在国标信令中使用的ip,此ip为摄像机可以访问到的ip, 置空使用 media.ip
+ sdp-ip: ${SIP_HOST:127.0.0.1}
+ # [可选] Hook IP, 默认使用sip.ip
+ hook-ip: ${SIP_HOST:127.0.0.1}
+ # [可选] sslport
+ http-ssl-port: 4443
+ rtp-proxy-port: 10000
+ rtmp-port: 10935
+ rtmp-ssl-port: 41935
+ rtsp-port: 5540
+ rtsp-ssl-port: 45540
+ # [可选]
+ secret: ${ZLM_SERCERT}
+ # 启用多端口模式, 多端口模式使用端口区分每路流,兼容性更好。 单端口使用流的ssrc区分, 点播超时建议使用多端口测试
+ rtp:
+ # [可选] 是否启用多端口模式, 开启后会在portRange范围内选择端口用于媒体流传输
+ enable: false
+ # [可选]
+ port-range: 30000,30500
+ # [可选]
+ send-port-range: 50502,50506
+
+ record-path: /opt/media/record
+ record-day: 7
+ record-assist-port: 0
+user-settings:
+ auto-apply-play: true
+ play-timeout: 30000
+ wait-track: false
+ record-push-live: false
+ record-sip: false
+ stream-on-demand: true
+ interface-authentication: false
+ broadcast-for-platform: TCP-PASSIVE
+ push-stream-after-ack: true
+ send-to-platforms-when-id-lost: true
+ interface-authentication-excludes:
+ - /api/**
+ push-authority: false
+ allowed-origins:
+ - http://localhost:8080
+ - http://127.0.0.1:8080
+ - http://0.0.0.0:8080
+ - ${NGINX_HOST}
+logging:
+ config: classpath:logback-spring.xml
+
diff --git a/docker/wvp/wvp/application.yml b/docker/wvp/wvp/application.yml
new file mode 100755
index 000000000..4496fb6a2
--- /dev/null
+++ b/docker/wvp/wvp/application.yml
@@ -0,0 +1,5 @@
+spring:
+ application:
+ name: wvp
+ profiles:
+ active: docker
\ No newline at end of file