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