搭建自己的私服仓库Nexus
为什么需要Nexus?
团队所需要的依赖构件都重复的从maven和npm仓库下载,加大的仓库的负载和外网带宽,网速较慢会影响项目进程。团队开发的公共构件怎么让其他项目使用
Nexus:Maven&Npm私服
文章目录
一、运维篇
1、编辑docker-compose.yml
version: '3'
services:
nexus:
restart: always
image: sonatype/nexus3
container_name: nexus3
ports:
- 8081:8081
volumes:
- /usr/local/docker/nexus/nexus-data:/nexus-data
2、启动
docker-compose up -d
启动成功,访问8081
注意:登录admin,初始密码在文件/sonatype-work/nexus/admin.password中,登录后修改密码
3、如何高可用
通过keepalive+inotify+rsync做到主从ip漂移以及数据同步
4、数据迁移
(1)仓库迁移
Nexus的构件仓库都保存在sonatype-work目录中,该目录的位置由nexus/conf/nexus.properties配置文件指定。
仓库迁移需要两个过程:备份和还原
(2)备份仓库
将sonatype-work文件夹整体备份即可,也可以选择只备份最重要的两个文件夹索引indexer、和仓库storage、
(3)还原仓库
将备份好的sonatype-work文件拷贝到新的服务器中。然后修改nexus/conf/nexus.properties配置文件,重新指定仓库的目录。
二、使用篇
1、仓库说明
(1)默认仓库说明:
- maven-central:maven 中央库,默认从 https://repo1.maven.org/maven2/ 拉取 jar
- maven-releases:私库发行版 jar,初次安装请将 Deployment policy 设置为 Allow redeploy
- maven-snapshots:私库快照调试版本、jar
- maven-public:仓库分组,把上面三个仓库组合在一起对外提供服务,在本地 maven 基础配置 settings.xml 或项目 pom.xml 中使用
(2)仓库类型说明:
- group:这是一个仓库聚合的概念,用户仓库地址选择 Group 的地址,即可访问 Group 中配置的,用于方便开发人员自己设定的仓库。maven-public 就是一个 Group 类型的仓库,内部设置了多个仓库,访问顺序取决于配置顺序,3.x 默认为 Releases、Snapshots、Central,当然你也可以自己设置。
- hosted:私有仓库,内部项目的发布仓库,专门用来存储我们自己生成的 jar 文件
- snapshots:本地项目的快照仓库
- releases: 本地项目发布的正式版本
- proxy:代理类型,从远程中央仓库中寻找数据的仓库可以点击对应的仓库的 Configuration 页签下 Remote Storage 属性的值即被代理的远程仓库的路径、,如可配置阿里云 maven 仓库
- central:中央仓库
2、创建仓库
选择仓库类型NPM、MAVEN、
创建代理仓库
Name:就是为代理起个名字
Remote Storage: 代理的地址,Maven的地址为: https://repo1.maven.org/maven2/
Blob Store: 选择代理下载包的存放路径
创建私有仓库
deployments pollcy: 是否允许重复发布
创建仓库组
注意:私有仓库在前,代理仓库在后
注意仓库的顺序。maven查找依赖时会依次遍历仓库组中的仓库。
3、权限管理
三、接入篇
1、后端【MAVEN】
(1)maven setting.xml
<servers>
<server>
<id>nexus</id>
<username>maven</username>
<password>thinkmacro@maven</password>
</server>
</servers>
<mirrors>
<mirror>
<id>nexus</id>
<name>nexus repository</name>
<url>https://repo.thinkmacro.cn/repository/maven-public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
注意:server的ID和mirror的ID 需要保持一致
(2)pom.xml
<distributionManagement>
<repository>
<id>nexus</id>
<name>Nexus Release Repository</name>
<url>https://repo.thinkmacro.cn/repository/maven-releases/</url>
</repository>
<snapshotRepository>
<id>nexus</id>
<name>Nexus Snapshot Repository</name>
<url>https://repo.thinkmacro.cn/repository/maven-snapshots/</url>
</snapshotRepository>
</distributionManagement>
(3)发布上传到nexus
或执行命令
mvn clean deploy
上传成功
2、前端【NPM】
(1)设置npm仓库
npm config get registry #http://registry.cnpmjs.org/
npm config set registry http://192.168.0.136:8081/repository/npm-group/
(2)配置package.json
"publishConfig" : {
"registry" : "http://192.168.0.136:8081/repository/npm-hosted/"
}
(3)登录私服
npm login –registry=http://192.168.0.136:8081/repository/npm-hosted/
(4)发布上传到nexus
npm publish –registry=http://192.168.0.136:8081/repository/npm-hosted/
注意!publish失败401有可能是nexus缺少npm token登录配置
上传成功