nexus3 docker 快速搭建maven私有仓库
官方文档: https://help.sonatype.com/repomanager3#installation-docker
dockerFile:sonatype/nexus3:3.17.0
说明
maven仓库的依赖管理体系,已经成为java web项目不可或缺的组成部分,它大大降低了项目搭建过程中jar包选择的难度。而中央仓库使用量过高,导致访问速度过慢,同时企业内部的二方库也需要内部私有maven仓库进行管理。
nexus 是一个强大的 maven 仓库管理器,提供了内部仓库管理和外部仓库代理等功能,并支持LDAP安全身份认证,可以满足企业内部私有仓库搭建要求。nexus仓库分为专业版和OSS版,我们使用免费的oss版本搭建私有maven仓库。
注意:nexus3 安装要求,可用存储空间最小5G
;CPU 最少4核
。
一. 镜像获取
通过docker hub
官方搜索并选择合适的镜像版本,我们这里使用 sonatype/nexus3:3.17.0
版本
docker pull sonatype/nexus3:3.17.0
二. 容器创建
1、映射目录分配
根据dockerFile中的VOLUME
设置,映射规划如下:
/devops/nexus/data:/nexus-data
2、端口映射规划
nexus3 容器默认对外服务端口为 8081
,devops
体系中的映射规划如下:
18081:8081
3、容器创建
目录创建脚本
sudo mkdir -p /devops/nexus/data
注意:
由于sonatype/nexus3:3.17.0
容器内部程序采用nexus
用户(uid=200
)启动,外部映射目录必须允许该用户操作,本文将外部映射目录/devops/nexus/data
的权限为 777
:
chmod 777 /devops/nexus/data
容器创建脚本 (不执行)
docker run -d --name nexus --restart always \
--publish 18081:8081 \
-v /devops/nexus/data:/nexus-data \
sonatype/nexus3:3.17.0
三. nginx 域名代理
devops
体系中,nexus3 的外部访问使用 nexus.tysite.org
的80
端口,代理规划如下:
1、服务端配置:
在/usr/local/nginx/conf/conf.d
目录中增加 nexus.tysite.org.conf
配置文件,实现80
端口代理本机的18081
端口。
cd /usr/local/nginx/conf/conf.d
vi nexus.tysite.org.conf
server {
listen 80;
server_name nexus.tysite.org;
client_max_body_size 1G;
location / {
proxy_pass http://localhost:18081;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
2、客户端配置:
用户本地修改 hosts
文件,添加域名映射
192.168.43.150 nexus.tysite.org
四. devops 添加 nexus
根据容器创建规划,nexus
的docker-compose
语法模板如下,添加到devops
的docker-compose.yml
文件中即可。
nexus:
container_name: nexus
image: sonatype/nexus3:3.17.0
restart: always
ports:
- "18081:8081"
volumes:
- "./nexus/data:/nexus-data"
五. 配置私有maven仓库
1、访问 http://nexus.tysite.org
通过docker-compose up -d
命令创建nexus
容器,等待两三分钟的初始化,然后从浏览器访问域名 http://nexus.tysite.org
。
2、登录nexus
点击Sign in
按钮弹出登录框,根据登录提示获取账号和密码。
/nexus-data
已经映射到/devops/nexus/data
目录,故直接查看该目录下的admin.password
文件内容即可
然后,按照向导提示设置密码和允许
匿名访问。
注意: 开启匿名访问状态下,从私有仓库拉取jar包时无需用户登录(内网私有仓库建议开启)
- 开启/关闭方法:
Security
>Anonymous
>Allow anonymous users to access the server
3、关闭Outreach:Management
检查
在查看nexus的日志时,我们会发现如下错误。
解决方法: 点击左侧目录中的 System
> Capabilities
,然后在右侧列表中找到Outreach:Management
,设置 为Disable
即可。
4、修改 maven-central
的默认源
sonatype/nexus3:3.17.0
为我们提供了一组默认的maven2
仓库,可供我们直接使用:
maven-central
:代理仓库(Type <proxy
>),用于代理中央仓库的依赖包集合。maven-releases
:发布版仓库(Type <hosted
> ),用于存放项目组自行发布的jar包。maven-snapshots
:快照版仓库(Type<hosted
>、Version policy <Snapshot
>),用于存放项目组开发过程中的依赖jar包。maven-publish
:maven仓库集合(Type<group
>),用于整合以上三个仓库,用户可以直接使用集合仓库的地址拉取依赖jar包。
注意: 私有仓库URL请使用maven-publish
仓库的地址,以便同时使用代理仓库和内部jar仓库
代理仓库maven-central
的默认源地址为中央仓库http://repo1.maven.org/maven2
,考虑到访问效率问题,修改为阿里的源地址:http://maven.aliyun.com/nexus/content/groups/public
5、代理仓库健康检查
点击代理仓库maven-central
的Analyze
按钮,同意sonatype
服务协议即可启用代理服务。
六. 拉取依赖包
注意:
nexus3的私有仓库默认状态下并未获取中央仓库的索引和依赖包,而是maven工具从该私有仓库拉取依赖包时,该私有仓库从中央仓库拉取相关依赖包并下载到客户端。
这里我们以gradle项目为例。
1、gradle项目配置maven仓库
将原有maven仓库配置注释,并以如下形式配置私有仓库地址(匿名仓库credentials无需填写
)。
repositories {
maven {
url "http://nexus.tysite.org/repository/maven-public/"
credentials {
username "admin"
password "******"
}
}
}
说明:
repositories
:依赖仓库配置maven
:采用maven仓库方式url
:仓库地址,这里配置我们的私有仓库http://nexus.tysite.org/repository/maven-public/
credentials
:验证秘钥,允许匿名的私有仓库无需配置。
2、拉取依赖包
执行如下命令,构建依赖:
./gradlew build --refresh-dependencies
若本地已经安装gradle
客户端,则使用如下脚本
gradle build --refresh-dependencies
本地拉取效果:
nexus索引加载结果:
七. 二方库jar发布
注意:本文演示web管理端上传二方库 jar 包
用户登录 nexus
系统,选择Browse server contents
> Upload
的 maven-releases
仓库。
根据《阿里巴巴Java开发手册》对二方库
的命名规约,上传内部二方库common-1.0.0.jar
,相关定义如下:
Group ID
:org.tysiteArtifact ID
:commonVersion
:1.0.0
上传成功后,可以在Browse
> maven-releases
库查看已上传的二方库信息。
获取二方库common-1.0.0.jar
的拉取地址,可以通过nexus
网站的 Search
列表搜索 org.tysite
或者 common
,找到我们上传的 jar 包,查看 Usage
信息。
八. 迁移nexus3 maven私有仓库
sonatype/nexus3:3.17.0
版本的 nexus3
仓库迁移相对简单,只需要将原映射目录/nexus-data
中的内容打包,在新的 nexus docker
环境中映射即可。