欢迎关注作者的微信公众号:奋进的技术人
关注我获得前后端全套学习视频、各种学习资料,以及最及时的技术文章分享
项目开发中需要使用开源的第三方插件来实现某个功能时如何处理呢?通用的处理方式自然是使用包管理工具从镜像仓库直接下载,如前端的npm,java开发中的maven。
现在我们不妨将这个问题升维一下。如果公司的业务较为复杂,社区里开源的第三方工具已经难以满足公司业务实现的需求了,那这个时候我们就需要去github或者gitee等开源仓库把功能实现相近的开源软件源码下载下来,再根据自己公司的业务去修改或者扩展部分功能,甚至直接公司开发一个全新的工具供各项目组同事直接使用。这种情况下直接将开发好的软件源码文件夹复制到项目文件夹中直接使用明显不现实,因为没有版本管理,工具源码后续的升级维护工作将会难以开展。这个时候我们就可以通过搭建私有镜像服务来解决这个问题。事实上大厂因为业务较为复杂,创新性的业务和功能也较多都会搭建自己企业专属的镜像服务。
当公司项目体量比较大的时候搭建企业私服的收益还是比较大的,优点主要表现在如下几方面:
私有包管理:私服允许存储和管理私有包,这些包不会公开到公共仓库中。有些私有包可能包含公司的私有代码或者算法,部署私有镜像服务管理公司私有包可以保护公司知识产权。
版本控制和依赖管理:搭建私服可以很方便的进行包的版本管理,确保团队成员使用相同版本的依赖,减少“在我机器上可以运行,到你的电脑上就无法运行”的问题,提高团队协作效率。
加速下载和构建:相比于从远程的公共仓库下载依赖,从本地或内部网络中的私服下载可以显著加快下载速度,特别是在网络状况不佳或地理位置偏远的情况下。
自定义包发布流程:团队可以为发布到私服的包设置自定义的验证和构建流程,确保发布的包符合团队的编码标准和质量要求。
节省带宽和成本:对于大型团队或频繁下载大量依赖的项目,使用私服可以减少对外部网络的依赖,节省带宽和可能产生的网络成本。
安全性和合规性:私服允许你控制哪些包可以被下载和安装,有助于确保项目使用的依赖是安全且符合合规要求的。在内部网络中搭建私服可以提供额外的网络隔离层,保护项目免受外部网络攻击。
前端私服搭建
安装和配置npm私服
常用的前端npm私服软件包括Verdaccio、Nexus Repository Manager和Artifactory等。对于大多数团队来说,Verdaccio是一个很合适的选择,因为它安装和配置简单,且性能良好。下面我们就以Verdaccio为例搭建一个前端镜像服务,实现企业私有包的版本管理。
Verdaccio是基于Node.js开发的,因此Verdaccio的宿主环境需要先安装Node.js。
npm install -g verdaccio
安装完成后,Verdaccio会在默认位置(通常是~/.config/verdaccio/)生成配置文件config.yaml。可以通过编辑这个文件来完成npm私服相关配置,例如设置存储路径、访问权限等。
一个基本的config.yaml配置大致如下所示:
storage: ./storage
auth:
htpasswd:
file: ./htpasswd
uplinks:
npmjs:
url: https://registry.npmjs.org/
packages:
'@my-company/*':
access: $all
publish: $authenticated
unpublish: $authenticated
proxy: npmjs
'*':
access: $all
publish: $authenticated
unpublish: $authenticated
proxy: npmjs
server:
port: 4873
在这个配置中,storage指定了包存储的位置,auth设置了认证方式(这里使用htpasswd文件进行简单的用户名和密码管理),uplinks定义了上游仓库(用于代理请求到公共npm仓库),packages定义了包的访问和发布规则,server设置了npm私服的监听端口。
yaml配置文件一般在java等后端项目中应用比较多,对于前端同学来说可能有点陌生,这里简单介绍下:YAML文件是一种数据序列化格式,全称为“YAML Ain’t a Markup Language”(YAML不是一种标记语言),但实际上它也可以被理解为“Yet Another Markup Language”(仍是一种标记语言)。YAML文件主要用于表示数据结构和配置文件,具有可读性强、轻量级、支持多种数据类型以及扩展性强等特点。
配置完成后,可以通过以下命令启动Verdaccio:
verdaccio
启动后,可以通过http://localhost:4873来访问Verdaccio的管理界面。
配置npm以使用私服
配置npm以使用搭建好的私服,可以通过全局配置或项目配置来实现。
通过全局配置来设置默认的仓库地址,设置之后本机全局生效
// 如果将npm私服部署在了其他位置(如内部网络的其他主机上),请将URL替换为实际的地址。npm config set registry http://localhost:4873/
也可以在项目中的.npmrc文件中设置仓库地址,这样只对该项目生效
registry=http://localhost:4873/
发布和管理包
配置好npm以使用私服后,就可以像平常一样使用npm publish命令来发布包了,但这次它们会被发布到私服上,而不是公共的npm仓库。
在发布包之前,需要先登录到私服
npm login --registry http://localhost:4873/
输入用户名、密码和邮箱后,即可登录成功。
登录成功后,在要发布的包目录下运行npm publish命令即可。
随着时间的推移,可能需要管理私服上的包,包括添加用户、删除包、备份数据等。这通常可以通过编辑config.yaml文件和使用Verdaccio提供的命令行工具来完成。
我们可以通过以下命令来创建账号(verdaccio采用了htpasswd的认证方式):
htpasswd -c ./htpasswd weibo
执行这个命令后,系统会提示输入并确认用户的密码。-c选项用于创建新的htpasswd文件;如果文件已经存在,就应该去掉-c选项,以避免覆盖现有文件。
如果系统没有自带htpasswd程序,则会提示-bash: htpasswd: command not found。
可以通过以下命令进行安装:
sudo yum install httpd-tools
安装过程中,系统会询问您是否继续安装。输入y并按Enter键以确认安装。
安装完成后,再次执行上面的创建账号命令:
搭建部署的过程中确保npm私服有适当的安全措施,如使用强密码、限制访问IP等。此外,还可以考虑使用HTTPS来加密通信。定期备份npm私服数据以防万一。同时,也需要定期清理不再使用的包和缓存,以节省存储空间。
JAVA服务端私服搭建
常见的java私服产品有Nexus Repository Manager、Artifactory等,其中Nexus是使用最广泛,最受欢迎的产品,下面我们就以Nexus为例详细介绍java服务端私服搭建步骤。
首先,从Sonatype官方网站下载Nexus Repository Manager的最新版本。
# 下载Nexus Repository Manager
wget https://download.sonatype.com/nexus-community-edition-3-<version>-unix.tar.gz
# 解压文件到安装目录
tar -zxvf nexus-community-edition-3-<version>-unix.tar.gz -C /opt/
# 进入安装目录
cd /opt/nexus-community-edition-3-<version>/
下载解压缩之后,在启动Nexus之前,需要根据你的环境设置JAVA_HOME等基础配置。配置好了之后就可以启动nexus服务了。
./nexus start
启动服务之后通过浏览器访问http://[server-ip]:8081/,按照引导完成初始化配置。
在 sonatype-work\nexus3\etc\nexus.propertis 文件里更改端口号
创建物理存储库
进到管理界面,可以看到默认已经有一个名为default的存储库
填写必要条件,点击Create blob store即可
创建Proxy
现在我们的私有仓库是空的,设置我们的proxy连向阿里云仓库地址。当在私有仓库中拿不到对应的jar包,则会去proxy对应的仓库拉取jar包。
创建hosted
用于当我们要将本地jar包通过maven命令上传到私有库,我们这里会创建两个hosted:Release + Snapshot。
创建release hosted
创建snapshot hosted
创建group
创建用户