亲历的企业级微服务的完整构建过程-系列文章目录
本人参与了这次的企业级微服务的完整构建,想要记录下来以便以后复习,同时也想分享给小伙伴们,抛砖引玉,欢迎大家提出自己的意见和建议,大家一起探讨一起成长。以下为该系列所有文章的链接:
- 搭建和使用Maven私有仓库(Nexus)(更新中。。。)
- API网关(待发布)
- 认证中心(待发布)
- Redis框架(待发布)
- RabbitMQ(待发布)
- MyBatis(待发布)
- Web模块(待发布)
- 低代码(待发布)
- Core
- 监控和告警(待发布)
- MongoDB(待发布)
搭建和使用Maven私有仓库(Nexus)-系列文章目录
说明:
- 以下部分模块,绝大多数人,在日常工作中都是用不到的,所以我就没有介绍,毕竟时间是最重要的成本,没必要花大量时间在我们用不到的内容上。
- 下面的“1 通用”章节,系列文章中的每一篇内容都相同,介绍一些背景、约定和官网链接等,大家只要知道这些内容了,就不用每篇文章都去看了。
- 安装步骤
- 登录和界面
- 备份和恢复
- 管理:讲述了Nexus的管理功能,包括用户管理、权限管理、任务管理等
- 使用Nexus仓库:讲述了使用(而非管理) Nexus Repository 的方方面面的知识
- 仓库管理器概念:使用 Nexus 需要先理解一些概念,该节内容提供了必要的背景和知识
- 用户界面概述
- 搜索组件(暂时用不到,略)
- 浏览仓库和仓库组
- 管理当前登录用户的资料
- 上传组件
- 查看标签(仅可用于Pro版本,略)
- 集成(主要讲述了如何使用 APIs 和 集成外部工具)(暂时用不到,略)
- Maven中配置和使用Nexus
本文目录
正文
1 通用
1.1 前言
在构建微服务之前,需要先做一些准备工作,比如Maven私有仓库的管理。因为有些微服务模块是作为公共组件被其他微服务引用的,这些公共的微服务,就要设置为依赖,并用Maven仓库管理起来,将自定义的依赖上传到Maven中央仓库并不是一个明智的选择。原因有3个:
- 最重要的是隐私和安全问题,我们不可能把企业内部开发的组件上传到公共网络,让所有人能够随便下载;
- 上传很麻烦,上传方法详见 https://blog.youkuaiyun.com/agonie201218/article/details/124800163;
- 可能不允许上外网,则无法上传;
- 可能会有网络延迟、上传缓慢的问题。
- 降低了中央仓库的负担。
综上,我们最好是搭建自己的私有Maven仓库,而当前最流行的就是 Sonatype Nexus Repository Manager
,以下简称 Nexus
。
1.2 约定
- 我使用的版本是
OSS 3.40.1-01
,整个系列的文章都是在该版本上展开介绍,你们可能使用的是 Pro 版,少数模块是我的 OSS 版上没有的。不过一般使用的话,OSS 版已经够用了 - 文中出现的
Repository
,中文称之为“仓库” - 文中出现的变量
$install-dir
,值为/opt/sonatype/nexus
- 文中出现的变量
$data-dir
,值为/opt/sonatype/sonatype-work/nexus3
,或/nexus-data
,两者都是在docker容器nexus中的路径,一个是软链接,一个是实际路径 - 文中出现的变量
${jetty.etc}
,值为/opt/sonatype/nexus/etc/jetty
- NXRM:Nexus Repository Manager,即 Nexus 仓库管理器
- RBAC:Role-Based Access Control,即 基于角色的访问控制
1.3 官方文档
提供Nexus的官方文档:https://help.sonatype.com/repomanager3/
官方文档包含了系统要求、搭建方法,以及各种操作方法等,内容已经非常全面了。
2 仓库管理
仓库是提供给用户的组件的容器。
仓库的二进制部分存储在 blob 存储中。
2.1 仓库类型
-
Proxy Repository
代理仓库,是链接到远程仓库的仓库。对组件的任何请求都会根据代理仓库的本地内容进行验证。如果没有找到本地组件,则将请求转发到远程仓库。然后检索该组件并将其本地存储在仓库管理器中,该仓库管理器充当缓存。然后从本地存储满足对同一组件的后续请求,因此消除了再次从远程仓库检索组件的网络带宽和时间开销。默认情况下,仓库管理器附带以下配置的代理仓库:
maven-central
此代理仓库访问Central Repository
,以前称为Maven Central
。它是内置在Apache Maven
中的默认组件仓库,并受到 Gradle、SBT 或 Ant/Ivy 等其他构建工具的良好支持。nuget.org-proxy
此代理仓库访问NuGet Gallery
。它是用于 .Net 开发的 nuget 包管理工具使用的默认组件仓库。(因为我是用Java开发,暂时忽略该项) -
Hosted Repository
托管仓库,将组件存储在仓库管理器中,而仓库管理器是这些组件的权威存储位置。默认情况下,仓库管理器附带以下配置的托管仓库:
-
maven-releases
此托管仓库使用maven2仓库格式和发布版本策略。它旨在成为你的组织发布内部版本的仓库。你还可以将此仓库用于外部仓库中不可用的第三方组件,因此无法通过配置的代理仓库进行检索。这些组件的示例可以是商业专有库,例如你的组织可能引用的 Oracle JDBC 驱动程序。 -
maven-snapshots
此托管仓库使用maven2仓库格式和快照版本策略。它旨在成为你的组织发布内部开发版本(也称为快照)的仓库。 -
nuget-hosted
此托管仓库是你的组织可以使用nuget仓库格式在仓库中发布内部版本的地方。你还可以将此仓库用于外部仓库中不可用的第三方组件,这些组件可能被代理以获得对组件的访问权限。(因为我是用Java开发,暂时忽略该项)
-
-
Repository Group
仓库组,代表了Nexus Repository Manager
的一项强大功能。它们允许你在单个仓库中组合多个仓库和其他仓库组。这反过来意味着你的用户可以依赖单个 URL 来满足他们的配置需求,而管理员可以添加更多仓库(以及组件)到仓库组。仓库管理器附带以下组:
-
maven-public
是maven2格式仓库的仓库组,它将中央仓库的重要外部代理仓库与托管仓库 maven-releases 和 maven-snapshots结合在一起。这允许你将中央仓库的组件以及你的内部组件公开在一个单一的、易于使用的仓库和 URL 中。 -
nuget-group
该组将nuget格式的仓库 nuget-hosted 和 nuget.org-proxy 组合到一个仓库中,用于使用 NuGet 进行 .Net 开发。(因为我是用Java开发,暂时忽略该项)
-
2.2 管理仓库和仓库组
要访问该模块,用户必须拥有 nx-all
或 nx-repository-admin
权限。
- 仓库列表
下图是仓库列表,列出了所有的仓库和仓库组:
列表中每一列的含义:
- Name - 仓库或仓库组的唯一名称
- Type -仓库的类型,其值为
proxy
、hosted
或group
- Format - 用于存储在仓库中的仓库格式,如 maven2、nuget 或 其他
- Status - 仓库的状态以及有关状态的更多信息。正常运行的仓库将显示状态为 Online
- URL -复制按钮会提示一个对话框,其中包含公开仓库的直接 URL 路径
- Health Check -显示来自先前运行的 Repository Health Check 的仓库健康统计分析信息,或用于开始分析的按钮
- 仓库详情
下图是2个仓库的详情页面:
其中:
-
Online:设置此仓库是否可用于客户端工具
-
Storage:每个仓库都需要配置一个
blob store
来确定组件的存储位置。下拉列表允许你从所有已配置的blob store
中进行选择。关于创建blob store
的文档可在Storage Guide 中找到。
Strict Content Type Validation
允许你激活验证,来检查发布到仓库中的所有文件的 MIME 类型,以符合特定仓库格式的允许类型。 -
Hosted:包括托管配置部分中的部署策略配置。它的设置控制托管仓库如何允许或禁止组件部署。
该项只有在Type
为hosted
的 Repository 中才有。如果策略设置为
Read-only
,则不允许部署。如果此策略设置为
Disable redeploy
,则客户端只能部署一次特定组件,任何再次部署组件的尝试都将导致错误。禁用重新部署是默认值,因为大多数客户端工具假定组件是不可变的,并且不会检查仓库中已在本地检索和缓存的已更改组件。如果策略设置为
Allow redeploy
,客户端可以将组件部署到此仓库并在后续部署中覆盖相同的组件。如果你使用复制,此策略会自动设置为仅通过复制部署。 这将阻止所有部署到托管仓库,但内部复制机制除外。你不应手动将此策略设置为
Deploy by Replication Only
。如果你禁用复制,Nexus Repository 会自动恢复你之前的部署策略。 -
HTTP:配置访问远程仓库所需的详细信息
包括:Authentication
和HTTP request settings
。
- 仓库组详情
仓库组和仓库的配置类似,仓库组多了一个Group
的配置项,配置哪些仓库需要成为 该仓库组的成员。左侧是所有可用的仓库,右侧是所有的配置过来的成员。大家一看就懂了。
2.3 Blob Stores
是组件及其资产的二进制部分的内部存储机制。它们可以是本地文件系统或基于云(使用 Amazon S3(Pro 和 OSS)或 Microsoft Azure(仅限 Pro))。每个 blob store
可用于一个或多个仓库和仓库组。你可以在 存储指南 中了解有关 blob 存储以及 如何配置 它们以及 规划存储策略 的更多信息。