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

Docker的私有仓库部署——Harbor

Harbor 简介

一、什么是Harbor

Harbor 是 VMware 公司开源的企业级 Docker Registry 项目,
其目标是帮助用户迅速搭建一个企业级的 Docker Registry 服务。
Harbor以 Docker 公司开源的 Registry 为基础,
提供了图形管理 UI 、基于角色的访问控制(Role Based AccessControl) 、
AD/LDAP 集成、以及审计日志(Auditlogging) 等企业用户需求的功能,同时还原生支持中文。
Harbor 的每个组件都是以 Docker 容器的形式构建的,使用 docker-compose 来对它进行部署。
用于部署 Harbor 的 docker-compose 模板位于 harbor/docker-compose.yml。

二、Harbor的特性

1、基于角色控制:用户和仓库都是基于项目进行组织的,而用户在项目中可以拥有不同的权限。
2、基于镜像的复制策略:镜像可以在多个Harbor实例之间进行复制(同步)。
3、支持 LDAP/AD:Harbor 可以集成企业内部已有的 AD/LDAP(类似数据库的一张表),用于对已经存在的用户认证和管理。
4、镜像删除和垃圾回收:镜像可以被删除,也可以回收镜像占用的空间。
5、图形化用户界面:用户可以通过浏览器来浏览,搜索镜像仓库以及对项目进行管理。
6、审计管理:所有针对镜像仓库的操作都可以被记录追溯,用于审计管理。
7、支持 RESTful API:RESTful API 提供给管理员对于 Harbor 更多的操控, 使得与其它管理软件集成变得更容易。
8、Harbor和docker registry的关系:Harbor实质上是对docker registry做了封装,扩展了自己的业务模板。

三、Harbor的构成

Harbor 在架构上主要有 Proxy、Registry、Core services、Database(Harbor-db)、Log collector(Harbor-log)、Job services 六个组件。
 
●Proxy: 是一个 nginx 的前端代理,Harbor 的 Registry、UI、Token 服务等组件,都处在 nginx 反向代理后边。 该代理将来自浏览器、docker clients 的请求转发到后端不同的服务上。
 
●Registry: 负责储存 Docker 镜像,并处理 Docker push/pull 命令。由于要对用户进行访问控制,即不同用户对 Docker 镜像 有不同的读写权限,Registry 会指向一个 Token 服务,强制用户的每次 Docker pull/push 请求都要携带一个合法的 Token, Registry 会通过公钥对 Token 进行解密验证。
 
●Core services: Harbor的核心功能,主要提供以下3个服务:
1)UI(harbor-ui): 提供图形化界面,帮助用户管理 Registry 上的镜像(image), 并对用户进行授权。
2)WebHook:为了及时获取Registry 上image 状态变化的情况,在Registry 上配置 Webhook,把状态变化传递给 UI 模块。
3)Token 服务:负责根据用户权限给每个 Docker push/pull 命令签发 Token。Docker 客户端向 Registry 服务发起的请求, 如果不包含 Token,会被重定向到 Token 服务,获得 Token 后再重新向 Registry 进行请求。
 
●Database(harbor-db):为core services提供数据库服务,负责储存用户权限、审计日志、Docker 镜像分组信息等数据。
 
●Job services: 主要用于镜像复制,本地镜像可以被同步到远程 Harbor 实例上。
 
●Log collector(harbor-log): 负责收集其他组件的日志到一个地方。
 
 
Harbor 的每个组件都是以 Docker 容器的形式构建的,因此,使用 Docker Compose 来对它进行部署。
总共分为7个容器运行,通过在docker-compose.yml所在目录中执行 docker-compose ps 命令来查看, 名称分别为:nginx、harbor-jobservice、harbor-ui、harbor-db、harbor-adminserver、registry、harbor-log。
其中 harbor-adminserver 主要是作为一个后端的配置数据管理,并没有太多的其他功能。harbor-ui 所要操作的所有数据都通过 harbor-adminserver 这样一个数据配置管理中心来完成。 

 四、Harbor 部署

1.部署 Docker-Compose 服务
//下载或者上传 Docker-Compose
curl -L https://github.com/docker/compose/releases/download/1.21.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-composechmod +x /usr/local/bin/docker-composedocker-compose -v

2. 部署 Harbor 服务 

#下载或上传 Harbor 安装程序
Harbor的压缩包下载地址:https://github.com/goharbor/harbor/releases
 
wget http://harbor.orientsoft.cn/harbor-1.2.2/harbor-offline-installer-v1.2.2.tgz
 
tar zxvf harbor-offline-installer-v1.2.2.tgz -C /usr/local/
 
 
#修改harbor安装的配置文件
vim /usr/local/harbor/harbor.cfg
--5行--修改,设置为Harbor服务器的IP地址或者域名
hostname = 192.168.73.107
--59行--指定管理员的初始密码,默认的用户名/密码是admin/Harbor12345
harbor_admin_password = Harbor12345

----------------------------------------------------------------------------------------------------------
关于 Harbor.cfg 配置文件中有两类参数:所需参数和可选参数
1、所需参数:这些参数需要在配置文件 Harbor.cfg 中设置。如果用户更新它们并运行 install.sh 脚本重新安装 Harbor, 参数将生效。具体参数如下:
●hostname:用于访问用户界面和 register 服务。它应该是目标机器的 IP 地址或完全限定的域名(FQDN),例如 192.168.73.107 或 hub.kgc.cn。不要使用 localhost 或 127.0.0.1 为主机名。
 
●ui_url_protocol:(http 或 https,默认为 http)用于访问 UI 和令牌/通知服务的协议。如果公证处于启用状态,则此参数必须为 https。
 
●max_job_workers:镜像复制作业线程。
 
●db_password:用于db_auth 的MySQL数据库root 用户的密码。
 
●customize_crt:该属性可设置为打开或关闭,默认打开。打开此属性时,准备脚本创建私钥和根证书,用于生成/验证注册表令牌。当由外部来源提供密钥和根证书时,将此属性设置为 off。
 
●ssl_cert:SSL 证书的路径,仅当协议设置为 https 时才应用。
 
●secretkey_path:用于在复制策略中加密或解密远程 register 密码的密钥路径。
 
2、可选参数:这些参数对于更新是可选的,即用户可以将其保留为默认值,并在启动 Harbor 后在 Web UI 上进行更新。如果进入 Harbor.cfg,只会在第一次启动 Harbor 时生效,随后对这些参数的更新,Harbor.cfg 将被忽略。
 
注意:如果选择通过 UI 设置这些参数,请确保在启动 Harbor 后立即执行此操作。具体来说,必须在注册或在 Harbor 中创建任何新用户之前设置所需的 auth_mode。当系统中有用户时(除了默认的 admin 用户), auth_mode 不能被修改。 具体参数如下:
●Email:Harbor 需要该参数才能向用户发送“密码重置”电子邮件,并且只有在需要该功能时才启用。请注意,在默认情况下 SSL 连接时没有启用。如果 SMTP 服务器需要 SSL,但不支持 STARTTLS,那么应该通过设置启用 SSL email_ssl = TRUE。
 
●harbor_admin_password:管理员的初始密码,只在 Harbor 第一次启动时生效。之后, 此设置将被忽略,并且应在 UI 中设置管理员的密码。请注意,默认的用户名/密码是admin/Harbor12345。
 
●auth_mode:使用的认证类型,默认情况下,它是 db_auth,即凭据存储在数据库中。对于LDAP身份验证,请将其设置为 ldap_auth。
 
●self_registration:启用/禁用用户注册功能。禁用时,新用户只能由 Admin 用户创建,只有管理员用户可以在 Harbor 中创建新用户。注意:当 auth_mode 设置为 ldap_auth 时,自注册功能将始终处于禁用状态,并且该标志被忽略。
 
●Token_expiration:由令牌服务创建的令牌的到期时间(分钟),默认为 30 分钟。
 
●project_creation_restriction:用于控制哪些用户有权创建项目的标志。默认情况下,每个人都可以创建一个项目。 如果将其值设置为“adminonly”,那么只有 admin 可以创建项目。
 
●verify_remote_cert:打开或关闭,默认打开。此标志决定了当Harbor与远程 register 实例通信时是否验证 SSL/TLS 证书。 将此属性设置为 off 将绕过 SSL/TLS 验证,这在远程实例具有自签名或不可信证书时经常使用。
 
另外,默认情况下,Harbor 将镜像存储在本地文件系统上。在生产环境中,可以考虑 使用其他存储后端而不是本地文件系统,如 S3、Openstack Swif、Ceph 等对象存储。但需要更新 common/templates/registry/config.yml 文件。
Harbor的默认镜像存储路径在 /data/registry 目录下,映射到docker容器里面的 /storage 目录下。
这个参数是在 docker-compose.yml 中指定的,在 docker-compose up -d 运行之前修改。
如果希望将 Docker 镜像存储到其他的磁盘路径,可以修改这个参数。

3. 启动 Harbor

cd /usr/local/harbor/
在配置好了 harbor.cfg 之后,执行
 ./prepare      #为 harbor 启动的容器生成一些必要的文件(环境)
 ./install.sh   # 以 pull 镜像并启动容器

 

4.查看 Harbor 启动镜像 
 cd /usr/local/harbor/
docker-compose ps
 
##以下命令均在在habor的配置目录下运行
docker-compose up -d      #启动
docker-compose stop       #停止
docker-compose restart    #重新启动

 

5. 创建一个新项目

1. 浏览器访问:http://192.168.146.20 登录 Harbor WEB UI 界面,
默认的管理员用户名和密码是 admin/Harbor12345

 2. 输入用户名和密码登录界面后可以创建一个新项目。点击“+项目”按钮

3. 填写项目名称为“myproject-kgc”,点击“确定”按钮,创建新项目 

4. 此时可使用 Docker 命令在本地通过 127.0.0.1 来登录和推送镜像。默认情况下,Registry 服务器在端口 80 上侦听。
//登录 Harbor
方法一:docker login -u admin -p Harbor12345 http://127.0.0.1
 
方法二:docker login http://127.0.0.1 

//下载镜像进行测试
docker pull nginx
 
//将镜像打标签
格式:docker tag 镜像:标签  仓库IP/项目名称/镜像名:标签
docker tag nginx:latest 127.0.0.1/myproject-kgc/nginx:v1
 
//上传镜像到 Harbor
docker push 127.0.0.1/myproject-kgc/nginx:v1 

5. 在 Harbor 界面 myproject-kgc 目录下可看见此镜像及相关信息

在其他客户端上传镜像  

以上操作都是在 Harbor 服务器本地操作。如果其他客户端登录到 Harbor,就会报如下错误。
出现这问题的原因为Docker Registry 交互默认使用的是 HTTPS,
但是搭建私有镜像默认使用的是 HTTP 服务,所以与私有镜像交互时出现以下错误。
 
docker login -u admin -p Harbor12345 http://192.168.146.20
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
Error response from daemon: Get https://192.168.146.20/v2/: dial tcp 192.168.146.20:443: connect: connection refused

 

在 Docker 客户端配置操作  

//解决办法是:在 Docker server 启动的时候,增加启动参数,默认使用 HTTP 访问。
vim /usr/lib/systemd/system/docker.service
--13行--修改
ExecStart=/usr/bin/dockerd -H fd:// --insecure-registry 192.168.146.20 --containerd=/run/containerd/containerd.sock

ExecStart=/usr/bin/dockerd --insecure-registry 192.168.146.20

重启 Docker,再次登录
systemctl daemon-reload
systemctl restart docker

再次登录 Harbor
docker login -u admin -p Harbor12345 http://192.168.146.20
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
 
Login Succeeded
 
//将自动保存凭据到/root/.docker/config.json,下次登录时可直接使用凭据登录 Harbor 

下载镜像进行测试
docker pull 192.168.146.20/myproject-kgc/nginx:v1

上传镜像进行测试
docker pull cirros
docker tag cirros:latest 192.168.146.20/myproject-kgc/cirros:v2
docker push 192.168.146.20/myproject-kgc/cirros:v2

 

  刷新 Harbor 的 Web 管理界面进行查看,会发现 myproject-kgc 项目里面有两个镜像

6. 维护管理Harbor 

通过 Harbor Web 创建项目

在 Harbor 仓库中,任何镜像在被 push 到 regsitry 之前都必须有一个自己所属的项目。
单击“+项目”,填写项目名称,项目级别若设置为"私有",则不勾选。
如果设置为公共仓库,则所有人对此项目下的镜像拥有读权限,
命令行中不需要执行"Docker login"即可下载镜像,镜像操作与 Docker Hub 一致。

创建用户并分配权限

在 Web 管理界面中单击系统管理 -> 用户管理 -> +用户,
填写用户名为“kgc-zhangsan”,邮箱为“kgc-zhangsan@kgc.com”,全名为“zhangsan”,
密码为“Abc123456”,注释为“管理员”(可省略)。
附:用户创建成功后,单击左侧“...”按钮可将上述创建的用户设置为管理员角色或进行删除操作,本例不作任何设置。
 
角色                权限说明
访客                对于指定项目拥有只读权限
开发人员            对于指定项目拥有读写权限,但没用删除权限
维护人员            对于指定项目拥有读写权限,也能对修改其它配置,比如创建 Webhooks
项目管理员            除了读写权限,同时拥有用户管理/镜像扫描等管理权限

 添加项目成员

单击项目 -> myproject-kgc-> 成员 -> + 成员,
填写上述创建的用户 kgc-zhangsan 并分配角色为“开发人员”。
附:此时单击左侧“...”按钮仍然可对成员角色进行变更或者删除操作

在客户端上使用普通账户操作镜像

//删除上述打标签的本地镜像
docker rmi 192.168.146.20/myproject-kgc/cirros:v2

//先退出当前用户,然后使用上述创建的账户 kgc-zhangsan 登录
docker logout 192.168.146.20
 
docker login 192.168.146.20

docker login -u kgc-zhangsan -p Abc123456 http://192.168.146.20 

//下载和上传镜像进行测试
docker pull 192.168.146.20/myproject-kgc/cirros:v2
 
docker tag cirros:latest 192.168.146.20/myproject-kgc/cirros:v3
docker push 192.168.146.20/myproject-kgc/cirros:v3

  查看日志 

Web 界面日志,操作日志按时间顺序记录用户相关操作

注意:docker pull时,公开项目的镜像可以被任意用户拉取
                    私有项目的镜像必须先登录项目的相关用户才能拉取
      docker  push时,必须先登录相关项目的用户,且登录的用户是具有上传权限的角色才能推送镜像

相关文章:

Docker的私有仓库部署——Harbor

Harbor 简介 一、什么是Harbor Harbor 是 VMware 公司开源的企业级 Docker Registry 项目, 其目标是帮助用户迅速搭建一个企业级的 Docker Registry 服务。 Harbor以 Docker 公司开源的 Registry 为基础, 提供了图形管理 UI 、基于角色的访问控制(Role…...

JavaScript反爬虫技巧详细攻略

在互联网时代,网站采取了各种手段来防止被爬虫抓取数据,其中最常见的就是JavaScript反爬虫技巧。本文将揭示一些常用的JavaScript反爬虫技巧,并提供一些实际操作建议,帮助您保护自己的爬虫免受检测和封禁。 1、为什么网站使用Java…...

C++基础入门学习笔记

问题1:什么是 C 中的多态?如何实现多态? 回答1:C 中的多态是指同一种类型的实体,可以在不同的情况下表现出不同的行为。实现多态的方式有两种:虚函数和模板函数。虚函数是在基类中声明为虚函数的函数&…...

手机cpu架构查看及armeabi、armeabi-v7a、arm64-v8a及x86等说明

一、如何查看cpu加购 winR,输入cmd 填下指令如下 adb shell getprop ro.product.cpu.abi 二、架构描述 1.armeabiv-v7a: 第7代及以上的 ARM 处理器。2011年15月以后的生产的大部分Android设备都使用它. 2.arm64-v8a: 第8代、64位ARM处理器,很少设备&a…...

node-sass报错,node16运行node14的项目

原来项目是node14的版本,现在用node16运行npm i 会报以下错误 node-sass4.14.1 postinstall: node scripts/build.js npm ERR! Exit status 1 npm ERR! npm ERR! Failed at the node-sass4.14.1 postinstall script. npm ERR! This is probably not a problem with …...

在Linux中掌握不同的命令,让创建文件变得易如反掌

在Linux中创建一个新文件很简单,但也有一些令人惊讶和灵巧的技术。​在本教程中,学习如何从Linux终端创建文件。​ 先决条件 访问命令行/终端窗口(Ctrl-Alt-F2或Ctrl-Alt-T) 具有sudo权限的用户帐户(对于某些文件/目录是可选的) 从命令行创建新的Linux文件 Linux的设计…...

iOS 14 YYAnimatedImageView加载图片失败处理

升级到iOS14,之前使用的YYimage框架全部不能正常显示图片,当然动态图正常显示,静态图无法显示; 原因是:14.0 系统调用了下面方法,YYAnimatedImageView没有正确处理 -(void)displayLayer:(CALayer )layer; 1 可以用以下…...

兴趣社如何搭建一个兴趣社区?

社交产品的本质是帮助用户提升社交的质量与效率,而兴趣则是找到本质的捷径。用户对兴趣社区的使用主要是围绕兴趣爱好,社交属性以及粉丝活动三个方向。对感兴趣的话题,用户天然有更强的分享讨论欲,更期待与人社交互动。“越垂直的…...

腾讯wifi码推广如何代理?方法详解!

腾讯wifi码推广是一种利用微信扫码连接商家wifi的方式,用户看完广告后就可以免费上网,而推广者则可以获得广告收益。 那么怎样代理腾讯wifi码推广呢? 答案是腾讯官方没有这个项目,那是怎么回事呢,腾讯wifi码正确的名称…...

linux下读取socket相关的系统调用总结

recv 函数原型 /* Read N bytes into BUF from socket FD.Returns the number read or -1 for errors.This function is a cancellation point and therefore not marked with__THROW. */ extern ssize_t recv (int __fd, void *__buf, size_t __n, int __flags); 所属文件…...

kafka生产者发送消息报错 Bootstrap broker localhost:9092 (id: -1 rack: null) disconnected

报这个错误是因为kafka里的配置要修改下 在config目录下 server.properties配置文件 这下发送消息就不会一直等待,就可以发送成功了...

内存文件初始化

要在内存中初始化一个SQLite数据库文件&#xff0c;可以使用SQLite提供的特殊URI格式进行连接。以下是一种常见的方法&#xff1a; #include <sqlite3.h>int main() {sqlite3* db;// 在内存中创建或打开数据库文件int ret sqlite3_open(":memory:", &db)…...

【`opencv_core` 和 `opencv_imgcodecs` 是 OpenCV(开源计算机视觉库)的两个主要模块】

opencv_core 和 opencv_imgcodecs 是 OpenCV&#xff08;开源计算机视觉库&#xff09;的两个主要模块。下面简要描述这两个模块的主要功能&#xff1a; opencv_core: 这是 OpenCV 的核心模块&#xff0c;为其他 OpenCV 模块提供了基础的数据结构和函数。它包含了基本的数据类型…...

系统架构师备考倒计时24天(每日知识点)

模块独立性的度量 聚合&#xff1a;衡量模块内部各元素结合的紧密程度偶然聚合&#xff1a;模块完成的动作之间没有任何关系&#xff0c;或者仅仅是一种非常松散的关系。逻辑聚合&#xff1a;模块内部的各个组成在逻辑上具有相似的处理动作&#xff0c;但功能用途上彼此无关。…...

多无人机编队集群飞行

matlab2016b可直接运行 多无人机集群编队飞行&#xff08;8架无人机&#xff09;资源-CSDN文库...

【C++杂货铺】一文带你走进哈希:哈希冲突 | 哈希函数 | 闭散列 | 开散列

文章目录 一、unordered 系列关联式容器二、unordered_map1.1 unordered_map 介绍1.2 unordered_map 的接口说明1.2.1 unordered_map 的构造1.2.2 unordered_map 的容量1.2.3 unordered_map 的迭代器1.2.4 unordered_map 的元素访问1.2.5 unordered_map 的查询1.2.6 unordered_…...

docker 搭建本地Chat GPT

要在CentOS7上安装Docker&#xff0c;您可以按照以下步骤进行操作&#xff1a; 1、更新系统包列表 sudo yum update2、安装Docker存储库的必要软件包 sudo yum install -y yum-utils device-mapper-persistent-data lvm23、添加Docker存储库 sudo yum-config-manager --add…...

电脑怎么剪辑视频?高手分享的独家秘诀

视频剪辑是一项有趣而具有创造性的活动&#xff0c;可以帮助您将录制的视频片段转化为有趣、有启发性的作品。无论您是想创建家庭影片、Vlog视频、教程&#xff0c;还是其他任何类型的视频&#xff0c;掌握视频剪辑技巧都是必要的。那电脑怎么剪辑视频呢&#xff1f;在本篇文章…...

LCR 171.训练计划 V

​​题目来源&#xff1a; leetcode题目&#xff0c;网址&#xff1a;LCR 171. 训练计划 V - 力扣&#xff08;LeetCode&#xff09; 解题思路&#xff1a; 双指针。node1 指向headA&#xff0c;node2 指向headB&#xff0c;将两节点每次移动一个节点直至两指针指向同一节点或…...

CH6-中断和异常处理

6.1 中断和异常处理概述 中断和异常概述&#xff08;INTERRUPT AND EXCEPTION OVERVIEW&#xff09; 中断和异常向量&#xff1a;中断和异常在处理器中都有对应的编号&#xff0c;被称为向量。当中断或异常发生时&#xff0c;处理器会根据向量找到相应的中断处理程序或异常处理…...

Hive的文件合并

背景:Flink数据写入到stage层,然后再入ods层,中间导致hive数据实时性不强,随后做优化,Flink之间以orc格式写入到hive 问题:单表日800亿数据量,产生过多的小文件,影响Impala查询 解决:对hive小文件进行合并, ALTER TABLE lt_ipsy_xdr_temp PARTITION (day20230829, hour9,type…...

Mac删除不在程序坞的程序

现象描述&#xff1a;删除某个程序时&#xff08;通过‘程序’列表中将该应用移动到废纸篓里&#xff09;&#xff0c;该应用程序正在运行中&#xff0c;删除过程该程序未提示正在运行中&#xff0c;仅仅删除了图标&#xff08;在此吐槽下该程序的交互&#xff0c;产品没有考虑…...

c#删除数组中符合条件的元素

错误写法 List<int> list new List<int>() { 1, 2, 3, 4 }; for (int i 0; i < sz; i){if (i 1 || i 2)list.RemoveAt(i);}在迭代过程中删除数组元素会有很大的问题&#xff0c;例如删除后位置移动&#xff0c;导致不该被删除的元素被删除。还可能导致数组…...

sqoop 脚本密码管理

1&#xff1a;背景 生产上很多sqoop脚本的密码都是铭文&#xff0c;很不安全&#xff0c;找了一些帖子&#xff0c;自己尝试了下&#xff0c;记录下细节&#xff0c;使用的方式是将密码存在hdfs上然后在脚本里用别名来替代。 2&#xff1a;正文 第一步&#xff1a;创建密码对…...

微信小程序使用CryptoJS加密PassWord(MD5)

微信小程序使用CryptoJS加密PassWord(MD5) 背景及环境&#xff1a; 微信小程序登录页面&#xff0c;需要加密登录密码发送给后端&#xff0c;使用 MD5 来加密密码 开发工具&#xff1a;微信开发者工具 npm安装CryptoJS 查看有哪些crypto的包 npm search crypto 找到自己需要的包…...

国有企业合同领域的合规管理

随着中国经济的快速发展和市场经济体制的完善&#xff0c;国有企业在国民经济中的地位和作用日益凸显。作为经济主体之一&#xff0c;国有企业必须积极适应市场环境的变化&#xff0c;加强合同管理&#xff0c;提高合规水平&#xff0c;以实现持续发展目标。本文将围绕国有企业…...

Joe主题魔改:正文内容实现图片懒加载

引言 有个哥们问我Joe主题的正文部分&#xff0c;如何同样图片懒加载&#xff0c;于是便研究了一下。 探索过程 因为PHP语言我用的很少&#xff0c;并不擅长&#xff0c;于是我去网上搜了一下。 方案一&#xff1a;用一个叫Jquery Lazyload的JavaScript脚本&#xff0c;我尝…...

网络爬虫实践小结

背景 近期工作中要解决两个问题&#xff0c;一个是数据组需要网爬一些图片数据&#xff0c;另外一个是要批量爬取公司用于文档协同的一个网站上的附件。于是乎&#xff0c;就写了两个脚本去完成任务。 爬虫思路 第一步&#xff1a;向确定的url发送请求&#xff0c;接收服务器…...

逍遥魔兽:如何在服务器上挂机器人?

逍遥魔兽是一款备受欢迎的魔兽世界经典版本&#xff0c;对于许多玩家来说&#xff0c;为了提升游戏体验和效率&#xff0c;他们希望能够在服务器上挂机器人。本文将为您详细讲解如何实现在逍遥魔兽服务器上挂机器人&#xff0c;以提高游戏进程的自动化效率。 第一部分&#x…...

软件工程与计算总结(九)软件体系结构基础

目录 ​编辑 一.体系结构的发展 二.理解体系结构 1.定义 2.区分体系结构的抽象与实现 3.部件 4.连接件 5.配置 三.体系结构风格初步 1.主程序/子程序 2.面向对象式 3.分层 4.MVC 一.体系结构的发展 小规模编程的重点在于模块内部的程序结构非常依赖于程序设计语言…...