更新manager;部署方式
This commit is contained in:
parent
c28b433aa1
commit
db03756946
1
.gitignore
vendored
1
.gitignore
vendored
@ -1 +1,2 @@
|
|||||||
.tmp
|
.tmp
|
||||||
|
*.tar
|
||||||
|
|||||||
@ -2,10 +2,12 @@ FROM dockerproxy.com/library/ubuntu:22.04
|
|||||||
ADD dotnet-runtime-3.1.32-linux-x64.tar.gz /root/dotnet
|
ADD dotnet-runtime-3.1.32-linux-x64.tar.gz /root/dotnet
|
||||||
COPY libssl1.0.0_1.0.2g-1ubuntu4.20_amd64.deb /tmp
|
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;\
|
dpkg -i /tmp/libssl1.0.0_1.0.2g-1ubuntu4.20_amd64.deb;\
|
||||||
echo "PermitRootLogin yes\nPasswordAuthentication yes\n" >> /etc/ssh/sshd_config;\
|
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 localtime /etc
|
||||||
COPY nats-server /usr/bin/
|
COPY nats-server /usr/bin/
|
||||||
|
|||||||
22
README.md
22
README.md
@ -1,11 +1,14 @@
|
|||||||
# 软采基础镜像
|
# 软采基础镜像
|
||||||
|
|
||||||
包含dotnet 3.1 运行时,i386 架构支持,nats-server,运行管理,可上线UIOT平台,支持部署,远程访问
|
包含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 运行命令
|
||||||
|
|
||||||
`docker run -d --name yzcol --restart always -v /etc/localtime:/etc/localtime gitiot.mgm-iot.com/iot_images/yuzhen_base:v1.0.4`
|
`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端口
|
* -p 51001:51001/udp ,透传UDP端口
|
||||||
@ -17,13 +20,22 @@
|
|||||||
* -v /etc/localtime:/etc/localtime ,保持和主机相同时区
|
* -v /etc/localtime:/etc/localtime ,保持和主机相同时区
|
||||||
|
|
||||||
### 设置自动重启
|
### 设置自动重启
|
||||||
|
|
||||||
`docker update --restart=always ${CONTAINER}`
|
`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-10 09:52:45 factory升级v1.1.9
|
||||||
2024-12-20 17:46:40 支持批量部署。
|
2024-12-20 17:46:40 支持批量部署。
|
||||||
41
deploy.py
Normal file
41
deploy.py
Normal 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()
|
||||||
@ -1,12 +1,23 @@
|
|||||||
version: '3'
|
version: '3'
|
||||||
|
|
||||||
x-service-common: &service-common
|
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
|
restart: always
|
||||||
volumes:
|
volumes:
|
||||||
- ./yz_project.csv:/home/yz_project.csv
|
- ./yz_project.csv:/home/yz_project.csv
|
||||||
|
|
||||||
services:
|
services:
|
||||||
YZXHRC0125H070001:
|
YZXHRAX86NN2511250011:
|
||||||
<<: *service-common
|
<<: *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
71
generate_files.py
Normal 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)
|
||||||
9
start.sh
9
start.sh
@ -2,8 +2,13 @@
|
|||||||
echo "start ssh"
|
echo "start ssh"
|
||||||
service ssh start
|
service ssh start
|
||||||
|
|
||||||
echo "start set project"
|
# 检查 Prod_connect.json 文件中 user 字段是否包含 $1 参数
|
||||||
/yuzhen_iot/prod_manage/app/plumber -project /home/yz_project.csv -S $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"
|
echo "start scheduler"
|
||||||
/yuzhen_iot/service_manage/manage/app/scheduler
|
/yuzhen_iot/service_manage/manage/app/scheduler
|
||||||
|
|||||||
0
yuzhen_iot/service_manage/manage/app/Version-1.0.19
Normal file
0
yuzhen_iot/service_manage/manage/app/Version-1.0.19
Normal file
Binary file not shown.
Binary file not shown.
@ -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
|
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
|
||||||
YZXHRC0125H070001,Horseman-A21,H21.0.0.1,106.75.75.68,1883,mxpoty5rco1jhwde|YZXHRC0125H070001|2,"pykqg5qpzspfce3w
|
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
|
||||||
",0,106.75.75.68,,,
|
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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user