当前位置: 首页 > news >正文

4

【任务 1】容器云平台搭建[5 分]
【题目 1】平台部署–部署容器云平台[1.5 分]
【题目 2】平台部署–部署 Istio 服务网格[0.5 分]
【题目 3】平台部署–部署 KubeVirt 虚拟化[1 分]
【题目 4】平台部署–部署 Harbor 仓库及Helm 包管理工具[1 分]
【题目 5】集群管理–备份 ETCD 数据[1 分]

【任务 1】容器云平台搭建[5 分]

(1)安装Docker
Kubernetes默认的容器运行时仍然是Docker,使用的是kubelet中内置dockershim CRI实现。
所有节点安装Docker-ce:

yum install -y yum-utils device-mapper-persistent-data lvm2

yum install -y docker-ce

启动Docker:

systemctl start docker

systemctl enable docker

(2)安装docker-compose
在master节点安装docker-conpose:

cp -rfv /opt/paas/docker-compose/v1.25.5-docker-compose-Linux-x86_64 /usr/local/bin/docker-compose

chmod +x /usr/local/bin/docker-compose

docker-compose version

docker-compose version 1.25.5, build 8a1c60f6

【题目 1】平台部署–部署容器云平台[1.5 分]
登录OpenStack 私有云平台,使用 CentOS7.9 镜像创建两台云主机,使用 kubeeasy 工具完成Kubernetes 1.22.1 集群的搭建。然后使用 nginx 镜像在 default 命名空间下创建一个名为exam 的Pod,并为该 Pod 设置环境变量 exam,其值为 2022。 完成后提交 master 节点的用户名、密码和 IP 到答题框。
1.Kubernetes 集群部署成功得 1 分;
2.Pod 创建成功且环境变量设置正确得 0.5 分。
(1)两台节点(一台master,一台node),将提供的安装包 chinaskills_cloud_paas_v2.0.2.iso 上传至 master 节点/root 目录,并解压 到/opt 目录
[root@localhost ~]# mount -o loop chinaskills_cloud_paas_v2.0.2.iso /mnt/
[root@localhost ~]# cp -rfv /mnt/* /opt/
[root@localhost ~]# umount /mnt/
(2)安装 kubeeasy依赖
[root@localhost ~]# mv /opt/kubeeasy /usr/bin/kubeeasy
[root@localhost ~]# kubeeasy install depend \
–host 10.24.2.10,10.24.2.11 \
–user root
–password Abc@1234
–offline-file /opt/dependencies/base-rpms.tar.gz

–host:所有主机节点 IP,如:10.24.1.2-10.24.1.10,中间用“-”隔开,表示 10.24.1.2 到 10.24.1.10 范围内的所有 IP。若 IP 地址不连续,则列出所有节点 IP,用逗号隔开,如: 10.24.1.2,10.24.1.7,10.24.1.9。
–user:主机登录用户,默认为 root。
–password:主机登录密码,所有节点需保持密码一致。
–offline-file:离线安装包路径。

(3)在master节点执行以下命令部署Kubernetes集群:
[root@localhost ~]# kubeeasy install kubernetes
–master 10.24.2.10
–worker 10.24.2.11
–user root
–password Abc@1234
–version 1.22.1
–offline-file /opt/kubernetes.tar.gz
部分参数解释如下:
–master:Master节点IP。
–worker:Node节点IP,如有多个Node节点用逗号隔开。
–version:Kubernetes版本,此处只能为1.22.1。
可通过命令“tail -f /var/log/kubeinstall.log”查看安装详情或排查错误。

若集群部署失败或出现故障,可重置集群重新部署,重置命令如下:
[root@k8s-master-node1 ~]# kubeeasy reset
重置完成后再次执行步骤1.1-1.2即可重新部署集群。

部署完成后查看集群状态:
[root@k8s-master-node1 ~]# kubectl cluster-info
Kubernetes control plane is running at https://apiserver.cluster.local:6443
CoreDNS is running at https://apiserver.cluster.local:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

To further debug and diagnose cluster problems, use ‘kubectl cluster-info dump’.
查看节点负载情况:
[root@k8s-master-node1 ~]# kubectl top nodes --use-protocol-buffers
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
k8s-master-node1 389m 4% 6926Mi 43%
k8s-worker-node1 875m 10% 3365Mi 21%
(4)使用nginx镜像在default命名空间下创建一个名为exam的Pod,并为该Pod设置环境变量exam,其值为2022

docker load < /opt/extended-images/nginx_latest.tar

cat pod.yaml

apiVersion: v1
kind: Pod
metadata:
name: exam
spec:
containers:

  • name: nginx
    image: nginx
    imagePullPolicy: IfNotPresent
    env:
    • name: “exam”
      value: “2022”
      使用命令进行创建:

kubectl apply -f pod.yaml

使用命令进行验证安装的集群环境及Pod:

kubectl cluster-info

Kubernetes control plane is running at https://apiserver.cluster.local:6443
CoreDNS is running at https://apiserver.cluster.local:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
To further debug and diagnose cluster problems, use ‘kubectl cluster-info dump’.

kubectl exec exam – printenv

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=exam
exam=2022

【题目 2】平台部署–部署 Istio 服务网格[0.5 分]
在 Kubernetes 集群上完成 Istio 服务网格环境的安装,然后新建命名空间 exam,为该命名空间开启自动注入 Sidecar。 完成后提交 master 节点的用户名、密码和 IP 到答题框。
1.Istio 所有组件运行成功得 0.3 分;
2.命名空间 exam 自动注入成功得 0.2 分。
(1)安装istio服务
在master节点执行以下命令进行Istio服务网格环境的安装:
[root@k8s-master-node1 ~]# kubeeasy add --istio istio
查看Pod:
[root@k8s-master-node1 ~]# kubectl -n istio-system get pods
NAME READY STATUS RESTARTS AGE
grafana-6ccd56f4b6-twwjv 1/1 Running 0 5m15s
istio-egressgateway-7f4864f59c-nxz2l 1/1 Running 0 5m34s
istio-ingressgateway-55d9fb9f-jzhnb 1/1 Running 0 5m34s
istiod-555d47cb65-jwkgp 1/1 Running 0 5m40s
jaeger-5d44bc5c5d-h9t29 1/1 Running 0 5m15s
kiali-79b86ff5bc-v9sfk 1/1 Running 0 5m15s
prometheus-64fd8ccd65-5px64 2/2 Running 0 5m15s
查看Istio版本信息:
[root@k8s-master-node1 ~]# istioctl version
client version: 1.12.0
control plane version: 1.12.0
data plane version: 1.12.0 (2 proxies)
Istio可视化
访问Grafana(http://master_IP:33000),如图5所示:

图5 Grafana访问界面
访问Prometheus(http://master_IP:30090),如图6所示:

图6访问Prometheus
查看Targets,如图7所示:

图7查看Targets
访问Jaeger(http://master_IP:30686),如图所示:

图8访问Jaeger
访问Kiali(http://master_IP:20001),如图9所示:

图9访问Kiali

(2)在Kubernetes集群上完成Istio服务网格环境的安装,然后新建命名空间exam,为该命名空间开启自动注入Sideca

kubectl create namespace exam

kubectl label namespace exam istio-injection=enabled

在master节点执行kubectl -n istio-system get all命令和kubectl get ns exam --show-labels命令进行验证:

kubectl -n istio-system get all

NAME READY STATUS RESTARTS AGE
pod/grafana-6ccd56f4b6-ssmbl 1/1 Running 0 81s
pod/istio-egressgateway-7f4864f59c-qm7wn 1/1 Running 0 97s
pod/istio-ingressgateway-55d9fb9f-jd4pn 1/1 Running 0 97s
pod/istiod-555d47cb65-p5cmq 1/1 Running 0 104s
pod/jaeger-5d44bc5c5d-xqvbj 1/1 Running 0 81s
pod/kiali-9f9596d69-2wsjl 1/1 Running 0 80s
pod/prometheus-64fd8ccd65-w2zrg 2/2 Running 0 80s

kubectl get ns exam --show-labels

NAME STATUS AGE LABELS
exam Active 28s istio-injection=enabled
【题目 3】平台部署–部署 KubeVirt 虚拟化[1 分]
在 Kubernetes 集群上完成KubeVirt 虚拟化环境的安装。完成后提交 master 节点的用户名、密码和 IP 到答题框。
1.KubeVirt 所有组件运行成功得 1 分。
(1)在master节点执行以下命令安装KubeVirt
[root@k8s-master-node1 ~]# kubeeasy add --virt kubevirt
查看Pod:
[root@k8s-master-node1 ~]# kubectl -n kubevirt get pods
NAME READY STATUS RESTARTS AGE
virt-api-8d998846b-2xx5m 1/1 Running 0 86s
virt-api-8d998846b-tqwhq 1/1 Running 0 86s
virt-controller-76b86f6965-gz8m4 1/1 Running 0 62s
virt-controller-76b86f6965-pjjv5 1/1 Running 0 62s
virt-handler-hvf45 1/1 Running 0 62s
virt-handler-x7bvj 1/1 Running 0 62s
virt-operator-579f86869c-k9nw4 1/1 Running 0 2m22s
virt-operator-579f86869c-vtrkn 1/1 Running 0 2m22s

【题目 4】平台部署–部署 Harbor 仓库及Helm 包管理工具[1 分]
在 master 节点上完成Harbor 镜像仓库及Helm 包管理工具的部署。然后使用 nginx 镜像自定义一个 Chart,Deployment 名称为 nginx,副本数为 1,然后将该 Chart 部署到 default 命名空间下,Release 名称为 web。 完成后提交 master 节点的用户名、密码和 IP 到答题框。
1.Harbor 仓库部署成功得 0.5 分;
2.Helm 工具安装成功得 0.2 分;
3.Chart 包部署成功得 0.3 分。
(1)在master节点执行以下命令进行Harbor仓库的安装
[root@k8s-master-node1 ~]# kubeeasy add --registry harbor
部署完成后查看Harbor仓库状态:
[root@k8s-master-node1 ~]# systemctl status harbor
● harbor.service - Harbor
Loaded: loaded (/usr/lib/systemd/system/harbor.service; enabled; vendor preset: disabled)
Active: active (running) since Mon 2021-12-06 14:34:49 CST; 30s ago
在Web端通过http://master_ip访问Harbor
使用管理员账号(admin/Harbor12345)登录Harbor
(3)使用nginx镜像自定义一个Chart,Deployment名称为nginx,副本数为1,然后将该Chart部署到default命名空间下,Release名称为web
[root@k8s-master-node1 ~]# helm create mychart
Creating mychart
[root@k8s-master-node1 ~]# rm -rf mychart/templates/*
[root@k8s-master-node1 ~]# vi mychart/templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
creationTimestamp: null
labels:
app: nginx
name: nginx
spec:
replicas: 1
selector:
matchLabels:
app: nginx
strategy: {}
template:
metadata:
creationTimestamp: null
labels:
app: nginx
spec:
containers:
- image: nginx
name: nginx
resources: {}
status: {}
[root@k8s-master-node1 ~]# helm install web mychart
NAME: web
LAST DEPLOYED: Tue Sep 13 16:23:12 2022
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
在master节点执行helm status web命令进行验证:
[root@k8s-master-node1 ~]# helm status web
NAME: web
LAST DEPLOYED: Tue Sep 13 16:23:12 2022
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None

【题目 5】集群管理–备份 ETCD数据[1 分]
Kubernetes 使用 ETCD 来存储集群的实时运行数据,为防止服务器宕机导致 Kubernetes集群数据丢失,请将Kubernetes 集群数据备份到/root/etcd.db 中。完成后提交 master 节点的 IP 地址、用户名和密码到答题框。
1.etcdctl 工具安装成功得 0.2 分;
2.ETCD 数据备份成功得 0.8 分。
在master节点执行:
(1)安装etcd
首先在master节点安装etcd
[root@master ~]# yum install etcd -y
查看etcd版本
[root@master ~]# etcdctl -version
etcdctl version: 3.3.11
API version: 2
(2)将Kubernetes 集群数据备份到/root/etcd.db 中
[root@master ~]# ETCDCTL_API=3 etcdctl --endpoints 192.168.248.128:2379 \

–cert=/etc/kubernetes/pki/etcd/server.crt
–key=/etc/kubernetes/pki/etcd/server.key
–cacert=/etc/kubernetes/pki/etcd/ca.crt
snapshot save /root/etcd.db
Snapshot saved at /root/etcd.db

相关文章:

4

【任务 1】容器云平台搭建[5 分] 【题目 1】平台部署–部署容器云平台[1.5 分] 【题目 2】平台部署–部署 Istio 服务网格[0.5 分] 【题目 3】平台部署–部署 KubeVirt 虚拟化[1 分] 【题目 4】平台部署–部署 Harbor 仓库及Helm 包管理工具[1 分] 【题目 5】集群管理–备份 ET…...

C++ Day04 this指针,友元函数,重载

this指针 概念 谁调用 this 所在的函数 ,this 就存储谁的地址 特点 1, 在当前类的非静态成员函数中调用本类非静态成员时 , 默认有 this 关键字 2, 静态成员函数 , 没有 this 指针。 示例 #include <iostream> #include <cstring> using namespace std; class S…...

2023做车载测试真的可以远离内耗!转行车载月入20K!

2023年&#xff0c;车载测试正处于一个发展阶段&#xff0c;随着新能源汽车的蓬勃发展&#xff0c;电气化、智能化逐渐成为发展趋势。在汽车开发过程中&#xff0c;测试是非常重要的一个环节。现在软件越来越多地被应用到汽车上&#xff0c;对软件测试的需求也越来越多、越来越…...

LINUXZ

10.6.2 AT24C02 访问方法 设备地址 从芯片手册上可以知道&#xff0c;AT24C02 的设备地址跟它的 A2、A1、A0 引脚有关&#xff1a; 图 10.36 AT24C02 设备地址引脚配置 294 / 577 打开 I2C 模块的原理图&#xff1a; 开发板配套网盘资料\04_开发板原理图\ 04_Extend_modules\通…...

C#单例模式懒汉式与饿汉式

单例模式一般分为懒汉模式和饿汉模式&#xff0c;懒汉式单例在第一次引用时创建实例&#xff0c;不是在类加载时&#xff1b;饿汉式单例模式是一种在类加载时就创建实例的方式&#xff0c;因此也称为静态初始化。 单例模式实现的技巧时构造私有&#xff0c;向外提供静态实例。…...

小微初创企业,如何利用媒体宣传快速成长

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 对于小微初创企业来说&#xff0c;利用媒体宣传可以快速提升品牌知名度、扩大影响力&#xff0c;进而促进企业的成长。 1.确定宣传目标&#xff1a;是增加销售、提升品牌知名度、还是推…...

【封装UI组件库系列】全局样式的定义与重置

封装UI组件库系列第二篇样式 ​​​​​​&#x1f31f;前言 &#x1f31f;定义全局样式 生成主题色和不同亮度的颜色 ​编辑 中性色及其他变量 &#x1f31f;样式重置 &#x1f31f;总结 ​​​​​​​​​​​​​​&#x1f31f;前言 在前端开发中&#xff0c;大家…...

opencv将32位深图片合成视频跳帧解决办法

在合成视频时候&#xff0c;大多数的图片都是24位深度的&#xff08;即RGB三通道&#xff0c;一个通道8位&#xff09;&#xff0c;但是也存在少量的32位深的图片&#xff08;RGBA&#xff0c;三个颜色通道加上A这个透明度通道&#xff09;&#xff0c;32位和24位的格式是不一样…...

华为obs上传下载-Java版 2023-11-23

弄了半天&#xff0c;老师帮弄成功了&#xff0c;经过同意&#xff0c;分享到网上&#xff0c;希望能帮助更多人&#xff0c;至于怎么弄的&#xff0c;我也不知道。 创建idea项目后&#xff0c;项目结构&#xff0c;对应文件没有的创一个 pom.xm 注意改Java版本&#xff0c;我…...

2023年中国农业机器人行业市场规模及发展趋势分析[图]

农业机器人是一种机器&#xff0c;是机器人在农业生产中的运用&#xff0c;是一种可由不同程序软件控制&#xff0c;以适应各种作业,能感觉并适应作物种类或环境变化&#xff0c;有检测(如视觉等)和演算等人工智能的新一代无人自动操作机械。 农业机器人分类 资料来源&#xf…...

12英寸双轴半自动划片机:颠覆传统划切工艺的五大优势

随着科技的飞速发展&#xff0c;半导体行业对精密划切设备的需求日益增长。在这篇文章中&#xff0c;我们将深入探讨12英寸双轴半自动划片机的优势&#xff0c;这种划片机在半导体制造过程中扮演着至关重要的角色。以下是这种划片机的五大优势。 一、高精度划切 12英寸双轴半自…...

动态神经网络时间序列预测

大家好&#xff0c;我是带我去滑雪&#xff01; 神经网络投照是否存在反锁与记忆可以分为静态神经网络与动态神经网络。动态神经网络是指神经网络带有反做与记忆功能&#xff0c;无论是局部反馈还是全局反锁。通过反馈与记忆&#xff0c;神经网络能将前一时刻的数据保留&#x…...

Unity 三维场景的搭建 软件构造实验报告

实验2&#xff1a;仿真系统功能实现 1.实验目的 &#xff08;1&#xff09;熟悉在Unity中设置仿真场景&#xff1b; &#xff08;2&#xff09;熟悉在Unity中C#语言的使用&#xff1b; &#xff08;3&#xff09;熟悉仿真功能的实现。 2.实验内容 新建一个仿真场景&#x…...

2024贵州大学计算机考研分析

24计算机考研|上岸指南 贵州大学 贵州大学计算机科学与技术学院&#xff08;贵州大学省级示范性软件学院&#xff09;位于贵州省贵阳市花溪区贵州大学东校区。 计算机科学与技术学院&#xff08;软件学院&#xff09;自1972年创办计算机软件本科专业开始&#xff0c;至今已有…...

Spring高级bean的实例化方法

bean的实例化方法 构造方法 实例化bean第一种&#xff1a;使用默认无参构造函数(常用) 第二种创建bean实例&#xff1a;静态工厂实例化&#xff08;了解&#xff09; 第三种&#xff1a;实例工厂&#xff08;了解&#xff09;与FactoryBean&#xff08;实用&#xff09;...

Vue2系列 — 渲染函数 (render + createElement)

官网文档&#xff1a;https://v2.cn.vuejs.org/v2/guide/render-function.html 1 render 函数 render 函数 不使用模板&#xff0c;使用 js 生成虚拟 dom 2 createElement() 接受的参数&#xff1a; 参数1 节点类型参数2 attribute参数3 子节点 3 DEMO <template>&…...

加载SSL证书

使用JDK1.8 开发工具包bin目录下的keytool.exe工具生成ssl密钥&#xff1a; keytool -genkey -alias mykey -keyalg RSA -keysize 2048 -validity 365 -keystore mykeystore.p -genkey&#xff1a; 表示创建密钥。-alias&#xff1a; 保存时的别名。-keyalg&#xff1a;加密算…...

redis 非关系型数据库

redis 非关系型数据库 redis 非关系型数据库&#xff0c;缓存型数据库 关系型数据库和非关系型数据库的区别&#xff1a; 关系型数据库是一个结构化的数据库&#xff0c;行和列 列&#xff1a;声明对象 行&#xff1a;记录对象的属性 表与表之间是有关联的&#xff0c;使用…...

Python配置与测试利器:Hydra + pytest的完美结合

简介&#xff1a;Hydra 和 pytest 可以一起使用&#xff0c;基于 Hydra Pytest 的应用可以轻松地管理复杂配置&#xff0c;并编写参数化的单元测试&#xff0c;使得Python开发和测试将变得更为高效。 安装&#xff1a; pip install hydra-core pytest案例源码&#xff1a;my…...

5.基于飞蛾扑火算法(MFO)优化的VMD参数(MFO-VMD)

代码的使用说明 基于飞蛾扑火算法优化的VMD参数 优化算法代码原理 飞蛾扑火优化算法&#xff08;Moth-Flame Optimization&#xff0c;MFO&#xff09;是一种新型元启发式优化算法&#xff0c;该算法是受飞蛾围绕火焰飞行启发而提出的&#xff0c;具有搜索速度快、寻优能力强的…...

STM32上电后第一行代码在哪?手把手带你读懂MAP文件里的启动秘密

STM32上电后第一行代码在哪&#xff1f;手把手带你读懂MAP文件里的启动秘密 当你的STM32项目突然无法启动&#xff0c;或者运行中出现难以解释的异常时&#xff0c;你是否曾盯着调试器陷入困惑&#xff1f;作为嵌入式开发者&#xff0c;我们常常把注意力集中在main函数之后的逻…...

League Akari:英雄联盟玩家的终极智能助手 - 三大核心功能全面提升游戏体验

League Akari&#xff1a;英雄联盟玩家的终极智能助手 - 三大核心功能全面提升游戏体验 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power &#x1f680;. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit League…...

CodeFire:本地开发工作流自动化工具,提升多项目管理效率

1. 项目概述&#xff1a;一个为开发者打造的“代码管家”如果你和我一样&#xff0c;是个经常泡在代码里的开发者&#xff0c;肯定遇到过这样的场景&#xff1a;手头同时开着好几个项目&#xff0c;每个项目都有自己的依赖、环境变量、启动脚本和数据库配置。每次切换项目&…...

Godot可停靠面板插件:基于二进制树布局的模块化UI解决方案

1. 项目概述与核心价值如果你在Godot引擎里做过稍微复杂一点的编辑器工具或者游戏内UI&#xff0c;肯定遇到过这样的烦恼&#xff1a;用户想要自由拖拽、停靠、组合各种面板&#xff0c;比如一个地图编辑器里同时有图层面板、属性面板、资源浏览器和主视图。用Godot原生的TabCo…...

别再只问Wi-Fi几代了!手把手教你从802.11a到ax看懂路由器参数(附避坑指南)

从Wi-Fi 4到Wi-Fi 6&#xff1a;普通人也能看懂的选购实战手册 每次打开电商页面&#xff0c;看到"双频千兆"、"MU-MIMO"、"OFDMA"这些术语就头疼&#xff1f;别担心&#xff0c;今天我们就用最生活化的比喻&#xff0c;带你轻松掌握路由器的核心…...

《源·觉·知·行·事·物:生成论视域下的统一认知语法》第十一章 认知科学与心理学的生成语法

原创声明&#xff1a;本文为作者周林东原创学术理论著作《源觉知行事物&#xff1a;生成论视域下的统一认知语法》的博客连载版。本书所述技术方案已提交中国发明专利申请&#xff0c;受相关法律保护。任何形式的商业使用&#xff0c;请与作者联系取得授权。欢迎基于学术目的的…...

多模态大语言模型评估基准SONIC-O1的设计与实践

1. 项目背景与核心价值去年我在参与一个跨模态智能客服项目时&#xff0c;团队花了整整三周时间争论"到底该用哪个测试集来评估系统的视频理解能力"。市面上现有的基准要么只测单一模态&#xff08;如纯文本或纯图像&#xff09;&#xff0c;要么测试维度过于狭窄&am…...

为什么83%的MCP 2026早期部署团队在第47小时触发级联超时?——基于127个集群日志的智能调度阈值预警模型首次公开

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;为什么83%的MCP 2026早期部署团队在第47小时触发级联超时&#xff1f;——基于127个集群日志的智能调度阈值预警模型首次公开 这一现象并非偶然故障&#xff0c;而是MCP 2026调度器在默认配置下与真实工…...

【无标题】舞台灯光系统报价详解:一套下来要多少钱?(2026实战分析)

舞台灯光系统报价详解&#xff1a;一套下来要多少钱&#xff1f;&#xff08;2026实战分析&#xff09; 灯光系统的预算&#xff0c;在商业空间投资里&#xff0c;往往是最让人心里没底的一项。找一个刚开业的酒吧老板问&#xff0c;他可能告诉你灯光花了8万&#xff0c;但同样…...

Wecom酱:企业微信消息推送开源方案全解析

Wecom酱&#xff1a;企业微信消息推送开源方案全解析 【免费下载链接】wecomchan 微信推送服务Server酱的开源替代。通过企业微信向微信推送消息的配置文档、直推函数和可自行搭建的在线服务代码。 项目地址: https://gitcode.com/gh_mirrors/we/wecomchan Wecom酱是一…...