更新manager;部署方式

This commit is contained in:
liu.chunxun 2026-04-02 16:25:05 +08:00
parent c28b433aa1
commit db03756946
11 changed files with 163 additions and 18 deletions

1
.gitignore vendored
View File

@ -1 +1,2 @@
.tmp
*.tar

View File

@ -2,10 +2,12 @@ FROM dockerproxy.com/library/ubuntu:22.04
ADD dotnet-runtime-3.1.32-linux-x64.tar.gz /root/dotnet
COPY libssl1.0.0_1.0.2g-1ubuntu4.20_amd64.deb /tmp
RUN apt update;dpkg --add-architecture i386;apt update;apt install -y --no-install-recommends libstdc++6 lib32stdc++6 libc6:i386 libc6 libgcc-s1 libicu70 liblttng-ust1 zlib1g vim zip unzip wget openssh-server inetutils-ping inetutils-telnet;\
RUN apt update;dpkg --add-architecture i386;apt update;apt install -y --no-install-recommends libstdc++6 lib32stdc++6 libc6:i386 libc6 libgcc-s1 libicu70 liblttng-ust1 zlib1g vim zip unzip wget openssh-server inetutils-ping inetutils-telnet jq;\
dpkg -i /tmp/libssl1.0.0_1.0.2g-1ubuntu4.20_amd64.deb;\
echo "PermitRootLogin yes\nPasswordAuthentication yes\n" >> /etc/ssh/sshd_config;\
echo root:123456 |chpasswd
echo root:123456 |chpasswd;\
echo "check_certificate = off\n" >> /etc/wgetrc
COPY localtime /etc
COPY nats-server /usr/bin/

View File

@ -1,11 +1,14 @@
# 软采基础镜像
包含dotnet 3.1 运行时i386 架构支持nats-server运行管理,可上线UIOT平台支持部署远程访问
### 编译
`docker build -t gitiot.mgm-iot.com/iot_images/yuzhen_base:vx.x.x .`
`docker build -t gitiot.mgm-iot.com/iot_images/yuzhen_base:vx.x.x .`
`docker build -t swr.cn-north-4.myhuaweicloud.com/cloud-yuzhen/yuzhen_base:vx.x.x ./`
### docker 运行命令
`docker run -d --name yzcol --restart always -v /etc/localtime:/etc/localtime gitiot.mgm-iot.com/iot_images/yuzhen_base:v1.0.4`
* -p 51001:51001/udp ,透传UDP端口
@ -17,13 +20,22 @@
* -v /etc/localtime:/etc/localtime ,保持和主机相同时区
### 设置自动重启
`docker update --restart=always ${CONTAINER}`
### 批量部署
使用docker-compose
将需要创建的网关ID 按照示例文件批量添加,同时在 yz_project.csv 中添加所有网关的配置信息
如上两个配置修改完成后,执行 `docker-compose up -d` 即可
更新日志
使用 generate_files.py 脚本,修改脚本中内容:
1. csv_line 内容中的平台信息
2. START_SN  其实虚拟网关序列号
3. COUNT 要生成的虚拟网关个数
执行Python脚本 python3 generate_files.py
同时启动过多容器可能会导致注册异常可使用如下Python脚本按顺序延时启动python3 deploy.py
### 更新日志
2024-12-10 09:52:45 factory升级v1.1.9
2024-12-20 17:46:40 支持批量部署。

41
deploy.py Normal file
View File

@ -0,0 +1,41 @@
import yaml
import time
import subprocess
# 配置:延时秒数
DELAY_SECONDS = 10
def start_containers():
try:
# 1. 读取 compose 文件获取服务列表
with open('docker-compose.yml', 'r') as f:
compose_data = yaml.safe_load(f)
services = list(compose_data.get('services', {}).keys())
if not services:
print("错误: 未在 docker-compose.yml 中找到任何服务。")
return
print(f"检测到 {len(services)} 个服务,将按顺序启动并延时 {DELAY_SECONDS}s...")
# 2. 逐个启动服务
for service in services:
print(f"正在启动容器: {service} ...")
# 使用 docker-compose up -d [服务名] 启动特定容器
subprocess.run(["docker-compose", "up", "-d", service], check=True)
# 最后一个容器启动后不需要等待
if service != services[-1]:
time.sleep(DELAY_SECONDS)
print(f"等待 {DELAY_SECONDS}s...")
print("\n所有容器已按序启动完成!")
except FileNotFoundError:
print("错误: 当前目录下找不到 docker-compose.yml")
except Exception as e:
print(f"运行出错: {e}")
if __name__ == "__main__":
start_containers()

View File

@ -1,12 +1,23 @@
version: '3'
x-service-common: &service-common
image: gitiot.mgm-iot.com/iot_images/yuzhen_base:v1.0.9
image: swr.cn-north-4.myhuaweicloud.com/cloud-yuzhen/yuzhen_base:v1.0.11
restart: always
volumes:
- ./yz_project.csv:/home/yz_project.csv
services:
YZXHRC0125H070001:
YZXHRAX86NN2511250011:
<<: *service-common
command: [ "/home/start.sh", "YZXHRC0125H070001" ]
command: [ "/home/start.sh", "YZXHRAX86NN2511250011" ]
YZXHRAX86NN2511250012:
<<: *service-common
command: [ "/home/start.sh", "YZXHRAX86NN2511250012" ]
YZXHRAX86NN2511250013:
<<: *service-common
command: [ "/home/start.sh", "YZXHRAX86NN2511250013" ]
YZXHRAX86NN2511250014:
<<: *service-common
command: [ "/home/start.sh", "YZXHRAX86NN2511250014" ]
YZXHRAX86NN2511250015:
<<: *service-common
command: [ "/home/start.sh", "YZXHRAX86NN2511250015" ]

71
generate_files.py Normal file
View File

@ -0,0 +1,71 @@
import os
def generate_files(start_sn, count):
# 1. 解析起始序列号 (分离前缀和最后4位数字)
# 假设格式固定最后4位为数字
prefix = start_sn[:-4]
try:
start_num = int(start_sn[-4:])
except ValueError:
print("错误: 序列号最后4位必须是数字。")
return
csv_filename = "yz_project.csv"
docker_filename = "docker-compose.yml"
csv_content = []
docker_services = []
# docker-compose 头部定义
docker_header = """version: '3'
x-service-common: &service-common
image: swr.cn-north-4.myhuaweicloud.com/cloud-yuzhen/yuzhen_base:v1.0.11
restart: always
volumes:
- ./yz_project.csv:/home/yz_project.csv
services:"""
print(f"正在生成 {count} 个序列号,起始于: {start_sn}...")
for i in range(count):
# 计算当前数字并补零至4位 (例如: 1 -> 0001)
current_num = start_num + i
current_sn = f"{prefix}{current_num:04d}"
# --- 生成 CSV 行 ---
# 格式: ${device_SN},Horseman-A21,H21.0.0.1,192.168.1.244,1883,mxpoty5rco1jhwde|${device_SN}|2,pykqg5qpzspfce3w,0,192.168.1.244,http://192.168.1.244/dlp/v1/device/backupAndRestore?sn=${device_SN},,
csv_line = (
f"{current_sn},Horseman-A21,H21.0.0.1,192.168.1.244,1883,mxpoty5rco1jhwde|{current_sn}|2,pykqg5qpzspfce3w,0,192.168.1.244,http://192.168.1.244/dlp/v1/device/backupAndRestore?sn={current_sn}"
)
csv_content.append(csv_line)
# --- 生成 Docker Compose 服务块 ---
# 注意 YAML 缩进
service_block = f"""
{current_sn}:
<<: *service-common
command: [ "/home/start.sh", "{current_sn}" ]"""
docker_services.append(service_block)
# 2. 写入 CSV 文件
with open(csv_filename, 'w', encoding='utf-8') as f:
f.write("\n".join(csv_content))
# 如果文件末尾需要换行符,取消下面注释
# f.write("\n")
print(f"已创建: {csv_filename}")
# 3. 写入 Docker Compose 文件
with open(docker_filename, 'w', encoding='utf-8') as f:
f.write(docker_header)
f.write("".join(docker_services))
print(f"已创建: {docker_filename}")
if __name__ == "__main__":
# --- 配置区域 ---
START_SN = "YZXHRAX86NN2511250001" # 起始序列号
COUNT = 166 # 需要生成的个数
# ----------------
generate_files(START_SN, COUNT)

View File

@ -2,8 +2,13 @@
echo "start ssh"
service ssh start
echo "start set project"
/yuzhen_iot/prod_manage/app/plumber -project /home/yz_project.csv -S $1
# 检查 Prod_connect.json 文件中 user 字段是否包含 $1 参数
if jq --arg param "$1" '(.product.user | split("|") | contains([$param]))' /yuzhen_iot/prod_manage/cfg/Prod_connect.json; then
echo "Parameter $1 found in Prod_connect.json user field. Skipping plumber execution."
else
echo "Parameter $1 not found in Prod_connect.json user field. Starting plumber..."
/yuzhen_iot/prod_manage/app/plumber -project /home/yz_project.csv -S $1
fi
echo "start scheduler"
/yuzhen_iot/service_manage/manage/app/scheduler

View File

@ -1,3 +1,5 @@
hardware_sn,hardware_mode,hardware_ver,uiot_addr,uiot_port,uiot_name,uiot_key,uiot_authmode,ntp_host,register_url ,frp_server_addr,frp_server_port
YZXHRC0125H070001,Horseman-A21,H21.0.0.1,106.75.75.68,1883,mxpoty5rco1jhwde|YZXHRC0125H070001|2,"pykqg5qpzspfce3w
",0,106.75.75.68,,,
YZXHRAX86NN2511250011,Horseman-A21,H21.0.0.1,106.75.75.68,1883,mxpoty5rco1jhwde|YZXHRAX86NN2511250011|2,pykqg5qpzspfce3w,0,106.75.75.68,http://106.75.75.68/dlp/v1/device/backupAndRestore
YZXHRAX86NN2511250012,Horseman-A21,H21.0.0.1,106.75.75.68,1883,mxpoty5rco1jhwde|YZXHRAX86NN2511250012|2,pykqg5qpzspfce3w,0,106.75.75.68,http://106.75.75.68/dlp/v1/device/backupAndRestore
YZXHRAX86NN2511250013,Horseman-A21,H21.0.0.1,106.75.75.68,1883,mxpoty5rco1jhwde|YZXHRAX86NN2511250013|2,pykqg5qpzspfce3w,0,106.75.75.68,http://106.75.75.68/dlp/v1/device/backupAndRestore
YZXHRAX86NN2511250014,Horseman-A21,H21.0.0.1,106.75.75.68,1883,mxpoty5rco1jhwde|YZXHRAX86NN2511250014|2,pykqg5qpzspfce3w,0,106.75.75.68,http://106.75.75.68/dlp/v1/device/backupAndRestore
YZXHRAX86NN2511250015,Horseman-A21,H21.0.0.1,106.75.75.68,1883,mxpoty5rco1jhwde|YZXHRAX86NN2511250015|2,pykqg5qpzspfce3w,0,106.75.75.68,http://106.75.75.68/dlp/v1/device/backupAndRestore
1 hardware_sn YZXHRAX86NN2511250011 hardware_mode Horseman-A21 hardware_ver H21.0.0.1 uiot_addr 106.75.75.68 uiot_port 1883 uiot_name mxpoty5rco1jhwde|YZXHRAX86NN2511250011|2 uiot_key pykqg5qpzspfce3w uiot_authmode 0 ntp_host 106.75.75.68 register_url http://106.75.75.68/dlp/v1/device/backupAndRestore frp_server_addr frp_server_port
2 YZXHRC0125H070001 YZXHRAX86NN2511250012 Horseman-A21 Horseman-A21 H21.0.0.1 H21.0.0.1 106.75.75.68 106.75.75.68 1883 1883 mxpoty5rco1jhwde|YZXHRC0125H070001|2 mxpoty5rco1jhwde|YZXHRAX86NN2511250012|2 pykqg5qpzspfce3w pykqg5qpzspfce3w 0 0 106.75.75.68 106.75.75.68 http://106.75.75.68/dlp/v1/device/backupAndRestore
3 YZXHRAX86NN2511250013 Horseman-A21 H21.0.0.1 106.75.75.68 1883 mxpoty5rco1jhwde|YZXHRAX86NN2511250013|2 pykqg5qpzspfce3w 0 106.75.75.68 http://106.75.75.68/dlp/v1/device/backupAndRestore
4 YZXHRAX86NN2511250014 Horseman-A21 H21.0.0.1 106.75.75.68 1883 mxpoty5rco1jhwde|YZXHRAX86NN2511250014|2 pykqg5qpzspfce3w 0 106.75.75.68 http://106.75.75.68/dlp/v1/device/backupAndRestore
5 YZXHRAX86NN2511250015 Horseman-A21 H21.0.0.1 106.75.75.68 1883 mxpoty5rco1jhwde|YZXHRAX86NN2511250015|2 pykqg5qpzspfce3w 0 106.75.75.68 http://106.75.75.68/dlp/v1/device/backupAndRestore