网心业务部署教程(docker版)
需要解决的问题:
一台设备同时满足网心业务需求,也可以以root权限操作宿主机进行边缘配套业务
1.需要的设备
所有硬件按照网心官网配置
https://help.onethingcloud.com/1f8d/37ac
https://docs.qq.com/doc/DY3V2dWJUZXBBdkph?nlc=1
上方是非API版本,下方是API版本
2.配置宿主机环境
需要Ubuntu server22.04.5 或 Debian(debian没试过自行找老kernel) 准备好后谨慎update upgrade
下方为网心API docker 需要的环境,在官方未升级之前,必须按照下方环境配置,避免兼容性问题
1.先安装Ubuntu serve 22.04 注意安装时候最好就把网络配置好,进入系统再去改的话会麻烦一点,Ubuntu应该在netplan里面修改,注意如果修改netplan则格式要正确,系统正常安装在系统盘,此时业务盘应为空闲,另外如果网络涉及到vlan等情况,需要在配置宿主机环境之前就把网络部分规划好,切记不可跳过规划直接操作
由于宿主机开启ufw可能影响业务跑量故设备处于暴露状态,SSH密钥应设置极为复杂,遵循密码异地双备份原则。
2.lsblk---观察块设备文件,应按照当时情况去判断块设备。
mywxserver@mywxserver:~$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
loop0 7:0 0 55.5M 1 loop /snap/core18/3084
loop1 7:1 0 63.9M 1 loop /snap/core20/2318
loop2 7:2 0 74M 1 loop /snap/core22/2955
loop3 7:3 0 25.2M 1 loop /snap/etcd/249
loop4 7:4 0 87M 1 loop /snap/lxd/29351
loop5 7:5 0 75.7M 1 loop /snap/powershell/405
loop6 7:6 0 38.8M 1 loop /snap/snapd/21759
sda 8:0 0 119.2G 0 disk
├─sda1 8:1 0 1G 0 part /boot/efi
├─sda2 8:2 0 2G 0 part /boot
└─sda3 8:3 0 116.2G 0 part
└─ubuntu--vg-ubuntu--lv 253:0 0 58.1G 0 lvm /
sdb 8:16 0 119.2G 0 disk
mywxserver@mywxserver:~$
3.sudo mkfs.ext4 /dev/sdb---如上结果,实验平台是sdb,那么格式化这个设备,如果是生产环境,那么应按照当时情况去执行对应命令
4.sudo mkdir -p /mnt/storage1---按照网心要求去创建storage注意从1开始递增,本实验平台只有一个业务盘,故只有storage1,实际需按照生产设备调整
5.sudo mount /dev/sdb /mnt/storage1---将刚才格式化的sdb挂载到刚才的storage1上面,生产环境应按照当时环境判断进行,一般生产环境不止一块数据盘
6.df -h---去看一下是否成功后进行下一步,如果有问题,应立即停止下面操作,寻找问题出在哪里,并解决
mywxserver@mywxserver:~$ df -h
Filesystem Size Used Avail Use% Mounted on
tmpfs 1.6G 1.9M 1.6G 1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv 57G 7.5G 47G 14% /
tmpfs 7.8G 0 7.8G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
/dev/sda2 2.0G 134M 1.7G 8% /boot
/dev/sda1 1.1G 6.1M 1.1G 1% /boot/efi
tmpfs 1.6G 4.0K 1.6G 1% /run/user/1000
/dev/sdb 117G 24K 111G 1% /mnt/storage1
7.sudo blkid /dev/sdb---使用sudo权限拿到设备UUID
mywxserver@mywxserver:~$ sudo blkid /dev/sdb
/dev/sdb: UUID="52d14668-8ebe-44c7-aa6a-46da3e0b5357" BLOCK_SIZE="4096" TYPE="ext4"
8.sudo cp /etc/fstab /etc/fstab.bak---将fstab进行备份,以免出现问题
9.sudo vim /etc/fstab---以sudo权限去编辑fstab
10.UUID=你的UUID /mnt/storage1 ext4 defaults 0 2---注意!在末尾“行”按照实际内容添加对应UUID另外此文件若出现问题则无法开机,完成后应不保存,反而复制所有内容给AI进行核查,以避免格式问题等因素。
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point> <type> <options> <dump> <pass>
# / was on /dev/ubuntu-vg/ubuntu-lv during curtin installation
/dev/disk/by-id/dm-uuid-LVM-BBHyuZC06AyOibyd22IvoLRobfNLC10qRkVeJIRxj7OBSyp79tJNKOOZzEeACMND / ext4 defaults 0 1
# /boot was on /dev/sda2 during curtin installation
/dev/disk/by-uuid/80a6e9ab-1cd5-43e7-8aff-f79441a5b52f /boot ext4 defaults 0 1
# /boot/efi was on /dev/sda1 during curtin installation
/dev/disk/by-uuid/422C-97BA /boot/efi vfat defaults 0 1
/swap.img none swap sw 0 0
UUID=52d14668-8ebe-44c7-aa6a-46da3e0b5357 /mnt/storage1 ext4 defaults 0 2
11.sudo systemctl daemon-reload---将systemd重新装填
12.sudo mount -a---立即检查是否有挂载错误,如果有,必须立即回滚!
13.sudo reboot---配置完成后立即重启主机,重启后验证生产环境下所有盘符对应设备,如果无误,则可以进行下一步
14.在完成网络以及盘符配置后,可以检查一下ipv6模块,以下内容摘自网心官方,遇到ipv6问题必须解决否则无法启动容器
如果跑ipv6,宿主机需要开启ipv6相关内核功能,必须具备ip6table_mangle 模块
IPV6 相关内核功能是否开启检查方式如下:
1、ipv6 是否开启 cat /proc/sys/net/ipv6/conf/all/disable_ipv6 ,输出为1 ,需要开启v6 sysctl -w net.ipv6.conf.all.disable_ipv6=0
2、内核是否具有ipv6模块:lsmod | grep ipv6
3、是否启用IPv6的Netfilter功能: cat /proc/net/ip6_tables_names 输出需要包含 mangle 字段,若没有该字段,需要查看 系统是否具备 ip6table_mangle 模块,若无输出 ,则表示没有 ip6table_mangle 模块,需要检查内核是否编译 ip6table_mangle 支持,查看方式如下:
方式一、zcat /proc/config.gz | grep CONFIG_IP6TABLE_MANGLE 若输出 CONFIG_IP6TABLE_MANGLE=y 或 =m,则内核支持该模块(y 表示内置,m 表示可加载模块)
方式二、cat /boot/config-$(uname -r) | grep CONFIG_IP6TABLE_MANGLE,输出同上
如果内核支持,但模块未加载,sudo modprobe ip6table_mangle 可手动加载,若内核没启用,需要重新编译内核,配置选项 CONFIG_IP6TABLE_MANGLE=y 或 =m
跑v6资源如果不按照上面提示配置,会影响结算收益统计
4、最新版本已经去掉cgroup2 版本支持,如果有cgroup2版本,请降级为cgroup1,否则会影响计费结算
15.stat -fc %T /sys/fs/cgroup/---查看当前Control Groups版本信息如果为cgroup2则进行下面步骤
16.sudo cp /etc/default/grub /etc/default/grub.bak---由于必须使用cgroup1所以,在设置之前先备份文件
17.sudo vim /etc/default/grub---打开grub
18.GRUB_CMDLINE_LINUX_DEFAULT="systemd.unified_cgroup_hierarchy=0 systemd.legacy_systemd_cgroup_controller=1 cgroup_enable=memory swapaccount=1"
(注意,将此值写入原来的GRUB_CMDLINE_LINUX_DEFAULT,但是写入之前要看一下当前情况)
19.sudo update-grub---更新grub
20.reboot---重启后再次验证cgroup是否修改成功
21.stat -fc %T /sys/fs/cgroup/---验证结果是否为tmpfs
22.dpkg -l | grep -E '^ii\s+linux-(generic|image-generic|headers-generic)'---查看这三个包的状态确认核心版本,如果没有问题则执行下一步
23.sudo apt-mark hold linux-generic linux-image-generic linux-headers-generic---执行hold锁住这三个包,注意以后谨慎upgrade生产环境中升级行为必须谨慎!!!
24.apt-mark showhold---马上验证这三个包是否被锁定,如果没有锁,则解决此问题
25.apt list --upgradable 2>/dev/null | grep -E 'linux-(generic|image-generic|headers-generic)'---验证这三个包是否是在升级列表中,如果没有输出则正确
26.uname -r---再次确认kernel版本如果没有问题,则宿主机环境准备完毕(网络另算)
3.docker配置
1.for pkg in docker.io docker-compose docker-compose-v2 docker-doc docker-buildx podman-docker containerd runc; do
if dpkg-query -W -f='${Status}' "$pkg" 2>/dev/null | grep -q 'install ok installed'; then
sudo apt-get remove -y "$pkg"
fi
done---移除可能存在的docker版本,存在则删除,不存在则跳过
2.(cd ~)(mkdir mytools)(cd mytools)---分别去home后建立mytools然后进到mytools里面把配套的工具放在里面
3.sudo dpkg -i *.deb---直接在mytools目录用dpkg把包安装上
4.sudo usermod -aG docker $USER---当前用户加入docker组
5.newgrp docker---在当前终端生效
6.sudo apt-mark hold docker-ce docker-ce-cli containerd.io---把三个包锁住
7.apt-mark showhold---验证是否锁定
8.(./env_check_x86)---复制命令直接去check环境观察是否有问题,有问题去解决,没有问题则下一步,注:check工具只能作为参考,具体问题具体判断程序记得chmod + x
9.docker pull images-cluster.snodehub.com/wxedge-v4/wxedge:latest---顺手把镜像拉下来,不知道官方什么时候更新,最好每次部署都去拉新版本,不要自己下好留着
4.业务配置(500043为商户号)
1.sudo mkdir -p /usr/local/wxedge---V4 的"身份+配置"目录,放系统盘
2.sudo touch /usr/local/wxedge/run_params.yaml---去创建对应的yaml文件,或把yaml文件拉进去
3.sudo cp ~/mytools/run_params.yaml /usr/local/wxedge/---把tools里面的yaml文件拷贝过来
4.sudo modprobe iptable_mangle---加载模块
5.sudo modprobe ip6table_mangle---加载模块
6.echo -e "iptable_mangle\nip6table_mangle" | sudo tee /etc/modules-load.d/wxedge-netfilter.conf---开机自动加载模块
7.docker run -d --privileged --name=wxedge --network=host --restart=unless-stopped -v /usr/local/wxedge:/app_config -v /mnt/storage1:/storage1 images-cluster.snodehub.com/wxedge-v4/wxedge:latest---run起容器,但是需要按照情况来配置
8.docker run -d --privileged --name=wxedge --network=host --restart=unless-stopped -v /usr/local/wxedge:/app_config -v /mnt/storage1:/storage1 -v /mnt/storage2:/storage2 -v /mnt/storage3:/storage3 -v /mnt/storage4:/storage4 -v /mnt/storage5:/storage5 images-cluster.snodehub.com/wxedge-v4/wxedge:latest---如果是多盘的话根据情况去run多盘,如果不是的话此条忽略即可
9.docker ps---去看一下是否存在docker容器进程
10.curl http://127.0.0.1:18080/v1.0/devices/get_base_info---验证是否成功后重启
5.离开前的检查
# ① 模块持久化文件(必须两行都在;重启后靠它自动加载)
cat /etc/modules-load.d/wxedge-netfilter.conf
# ② docker 开机自启(正常输出 enabled;否则 sudo systemctl enable docker)
systemctl is-enabled docker
# ③ 容器重启策略(正常输出 unless-stopped)
docker inspect -f '{{.HostConfig.RestartPolicy.Name}}' wxedge
# ④ 容器状态(应 Up;若之前手动 stop 过 → docker start wxedge)
docker ps --filter name=wxedge
# ⑤ 缓存盘挂载(重启后靠 fstab 自动挂)
findmnt /mnt/storage1
额外注意,此配置没有涉及到网络配置,网络直接承接host,具体网络情况应由现场情况进行判断,在host层面设置好网络。所有配置完毕后,必须多次重启,确定没有任何问题后才可以离开,并且需要留出大概半天或1天时间观察实际业务是否按照预想中运行,确认无误后方可离开机器!!!