以下整理的在 CentOS 7 上使用 Docker 搭建 Maven 私有仓库(Nexus3)的步骤文档:
一、安装 Docker(基于官方文档优化)
1. 系统准备
# 更新系统包
sudo yum update -y
# 安装必要工具
sudo yum install -y yum-utils
2. 配置镜像源(加速下载)
# 使用阿里云镜像源(推荐)
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
3. 卸载旧版本 Docker(可选)
sudo yum remove -y docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
4. 安装 Docker CE
sudo yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
5. 启动并设置开机自启
sudo systemctl start docker
sudo systemctl enable docker
6. 验证安装
docker -v # 查看版本
docker ps # 查看容器状态
二、配置 Docker 镜像加速
# 创建配置文件目录
sudo mkdir -p /etc/docker
# 编辑 daemon.json(选择一个镜像源)
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
"https://docker.m.daocloud.io", # DaoCloud
"https://docker.1panel.live", # 1Panel
"https://hub.rat.dev" # RatDev
]
}
EOF
# 重载配置
sudo systemctl daemon-reload
# 重启 Docker
sudo systemctl restart docker
# 验证是否可用
docker ps # 查询正在运行的容器列表
三、使用 Docker 部署 Nexus3 搭建 Maven 仓库
1. 拉取 Nexus3 镜像
docker pull sonatype/nexus3:latest
2. 创建数据卷目录(持久化存储)
mkdir -p /opt/nexus/data
chmod 777 -R /data/nexus/data
3. 运行 Nexus3 容器
docker run -d \
--name nexus3 \
-p 8081:8081 \ # Web 管理界面端口
-p 8082:8082 \ # Maven 仓库端口(可选)
-v /opt/nexus/data:/nexus-data \
sonatype/nexus3
#查看日志
docker logs -f nexus3
# 停止容器,通过容器名称 nexus3 停止正在运行的容器。
docker stop nexus3
# 若需彻底移除服务(容器会因 --restart always 在 Docker 重启后自动恢复,需删除容器):
docker rm nexus3
# 或强制删除(若容器仍在运行):
docker rm -f nexus3
# 验证状态检查容器是否已停止/删除:
docker ps -a | grep nexus3
4. 访问 Nexus3 管理界面
- 地址:
http://<服务器IP>:8081
- 初始管理员密码:查看容器日志或文件
/opt/nexus/data/admin.password
# 查看初始密码(方法一)
docker logs nexus3 | grep 'Admin password'
# 查看初始密码(方法二)
cat /opt/nexus/data/admin.password
5. 配置 Maven 仓库(通过 Web 界面)
5.1、存储管理
在创建仓库之前,需要先指定存储目录,便于统一管理,就需要创建Blob Store,不创建则使用default存储目录。本文使用default存储目录。
5.2、Nexus仓库说明
默认仓库说明
maven-central:中央仓库,用于从公共的开源库下载
maven-releases:发布仓库,用于保存开发的稳定发行版本
maven-snapshots:快照仓库,用于保存开发过程中的不稳定版本 maven-public:组合仓库,组合多个仓库对外提供服务
maven-thirdparty:第三方仓库,用于存放不能从中央仓库获取的或者不开源的
5.3、修改中央仓库
由于网络限制,需要将默认的中央仓库地址改为国内的中央仓库地址。
默认的中央仓库地址:https://repo1.maven.org/maven2/ 修改为
阿里云的中央仓库地址:https://maven.aliyun.com/repository/public/
5.4、修改发布仓库
Nexus中发布仓库默认的“Deployment Policy”配置是“Disable Redeploy”,因此无法发布项目。要发布项目,需要设置为“Allow Redeploy”。
5.5、创建第三方仓库
第三方仓库是用于存放不能从公共中央仓库获取的或者不开源的库,这个通常是由内部人员自行下载之后发布上去。
Hosted有三种方式:Releases、Snapshot、Mixed
Releases: 稳定发行版本
Snapshot:未发布的不稳定版本
Mixed:混合的
Deployment设置选项有三个值:
Allow redeploy:允许同一个版本号下重复提交代码,nexus以时间区分
Disable redeploy:不允许同一个版本号下重复提交代码
Read-Only:不允许提交任何版本
原生的maven-releases库是Disable redeploy设置, maven-snapshots是Allow redeploy。
可通过页面上传第三方jar包
5.6、修改组合仓库
设置组成员,组成员仓库的顺序很重要,因为Nexus会按照仓库在列表中的顺序来解析依赖项。通常,加入group资源库的顺序应是:hosted仓库 > 国内proxy仓库 > 国外proxy仓库,这样做可以提高依赖项的下载速度。
四、Maven 客户端配置
settings.xml和pom.xml是Maven中两个非常重要的配置文件。
- settings.xml文件通常位于Maven安装目录的conf目录下,配置Maven的行为,如本地仓库地址、远程仓库地址等。它是Maven的全局配置,适用于所有项目。
- pom.xml文件位于每个项目中,包含了项目的配置信息,如项目依赖、插件配置、项目信息等。它是项目级别的配置。
在Maven中,settings.xml和pom.xml的优先级如下:
- pom.xml > settings.xml:即项目级别的配置pom.xml优先于全局级别的配置settings.xml。如果在pom.xml中配置了某个设置,那么它会覆盖settings.xml中相应的配置。
- 在实际使用中,通常只需要修改settings.xml文件来配置一些全局性的设置,而pom.xml中的配置更多关注于项目本身。
1、全局setting.xml配置
<!-- 本地仓库路径 -->
<localRepository>D:\ProgramData\Maven\repository</localRepository>
<!-- nexus服务器 -->
<servers>
<server>
<id>public</id>
<username>admin</username>
<password>admin123</password>
</server>
<server>
<id>snapshots</id>
<username>admin</username>
<password>admin123</password>
</server>
<server>
<id>releases</id>
<username>admin</username>
<password>admin123</password>
</server>
</servers>
<!-- 镜像仓库配置 -->
<mirrors>
<mirror>
<id>public</id>
<name>public</name>
<url>http://127.0.0.1:8081/repository/maven-public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
镜像仓库mirrors配置
<id>:此镜像的唯一标识符,可以是任何字符串,用于区分不同的镜像。
<name>:是用来指定镜像的名称的。这个名称通常是一个描述性的字符串。
<url>:镜像仓库的基本URL
<mirrorOf>:指定了该镜像适用于哪个 Maven 仓库。
settings.xml不做任何配置时是有默认的仓库的,这个仓库就是central仓库,URL地址是:https://repo.maven.apache.org/maven2/。在这个示例中,mirrorOf 设置为central,表示这个镜像仅适用于中央仓库。配置镜像仓库的目的是为了提高依赖库的下载速度。
如果<mirrorOf>被设置为 *,表示这个镜像对所有 Maven 仓库都生效,即所有的 Maven 仓库都会使用这个镜像。这在某些情况下可能是有用的,特别是在没有直接访问外网的情况下使用本地或内部镜像。
2、项目pom.xml配置
<!--构件发布信息,在执行mvn deploy后表示要发布的位置。 -->
<distributionManagement>
<!--构件的稳定版部署位置 -->
<repository>
<!-- id和settings.xml中server的id保持一致 -->
<id>releases</id>
<url>http://127.0.0.1:8081/repository/maven-releases/</url>
</repository>
<!-- 构件的快照版部署位置 -->
<snapshotRepository>
<!-- id和settings.xml中server的id保持一致 -->
<id>snapshots</id>
<url>http://127.0.0.1:8081/repository/maven-snapshots/</url>
</snapshotRepository>
</distributionManagement>
五、验证部署
- 上传测试:使用 Maven 命令部署一个测试包到私有仓库。
- 下载测试:在另一台机器上配置
settings.xml
后拉取测试包。
注意事项:
- 确保防火墙开放
8081
和8082
端口。 - 生产环境建议配置 HTTPS 和持久化存储备份。