这次我们来看一个在龙芯 3B6000 平台上,使用 Docker 部署 Nexus 私有仓库的实战项目。对于使用龙芯架构的开发者或运维团队来说,如何高效地管理 Maven、npm、Docker 等各类依赖包是一个刚需。Nexus Repository Manager 作为业界广泛使用的仓库管理工具,通过 Docker 容器化部署,可以极大地简化安装、配置和维护流程。

本文将带你从零开始,在龙芯 3B6000 平台上完成 Docker 的安装、配置,并成功运行 Nexus 容器。整个过程重点关注龙芯平台下的环境适配、Docker 镜像的获取与运行、以及 Nexus 的基本配置与使用。无论你是个人开发者搭建测试环境,还是团队需要构建内部的制品仓库,这篇文章都能提供一套清晰、可落地的操作指南。

1. 核心能力速览

在龙芯 3B6000 平台上部署 Nexus,核心在于解决架构兼容性和容器化部署的便利性。下表概括了本次实践的关键信息:

能力项 说明
目标平台 龙芯 3B6000 (LoongArch 架构)
核心组件 Docker Engine, Nexus Repository Manager 3
部署方式 Docker 容器化部署,一键启动
主要功能 搭建 Maven、npm、Docker、PyPI 等私有仓库,代理远程仓库,管理制品依赖
资源需求 建议 4GB 以上内存,20GB 以上磁盘空间(用于存储制品)
网络要求 服务器需具备网络连接,以下载 Docker 镜像和代理外部仓库
管理界面 基于 Web 的图形化管理界面 (默认端口 8081)
适合场景 龙芯平台下的软件开发团队、CI/CD 流水线、内网依赖管理、离线环境部署准备

从表格可以看出,整个过程不涉及复杂的源码编译,主要依靠 Docker 的跨平台能力。关键在于找到或构建适用于 LoongArch 架构的 Nexus 镜像,并确保 Docker 环境本身在龙芯平台上运行正常。

2. 适用场景与使用边界

在龙芯生态中部署 Nexus,主要服务于特定的开发与运维需求。

适用场景包括:

  1. 龙芯原生应用开发团队 :开发基于龙芯平台的 Java、Node.js、Python 应用时,需要统一、高速的内网 Maven、npm、PyPI 仓库,加速构建过程。
  2. CI/CD 流水线集成 :在龙芯服务器上运行的 Jenkins、GitLab CI 等工具,需要稳定的私有仓库来拉取和推送构建产物。
  3. 依赖安全与审计 :通过 Nexus 代理外部仓库,可以过滤有害组件,并对内部使用的所有依赖进行统一审计和版本控制。
  4. 离线或内网环境 :在无法直接访问互联网的龙芯生产环境中,可以预先将所需依赖推送到内网 Nexus,确保构建的稳定性和安全性。
  5. 多架构制品管理 :虽然本文聚焦龙芯,但 Nexus 本身可以管理包括 x86、ARM、LoongArch 在内的多架构 Docker 镜像或其他制品。

使用边界与注意事项:

  1. 架构兼容性 :本文方法严格针对龙芯 3B6000 (LoongArch) 平台。其他龙芯型号(如 2K1000)或不同指令集架构需另行验证。
  2. 非生产就绪调优 :本文侧重于部署和基础功能验证。生产环境需考虑高可用、备份、性能调优(如 JVM 参数)、安全配置(如防火墙、HTTPS、访问控制)等。
  3. 镜像来源 :确保使用的 Docker 镜像来源可靠。由于官方 Nexus 镜像可能不直接提供 LoongArch 版本,可能需要从可信的第三方或自行构建。
  4. 资源占用 :Nexus 作为 Java 应用,运行时会消耗较多内存。在资源有限的龙芯开发板上运行需谨慎评估。
  5. 数据持久化 :务必通过 Docker 卷(volume)或绑定挂载(bind mount)持久化 Nexus 的数据和配置,避免容器重建后数据丢失。

3. 环境准备与前置条件

开始部署前,请确保你的龙芯 3B6000 服务器满足以下条件。

3.1 操作系统要求

  • 推荐系统 :统信 UOS、麒麟软件等基于 Linux 的、针对龙芯优化的发行版。本文以通用 Linux 命令为例,大部分操作在终端完成。
  • 权限要求 :需要拥有 root 权限或能通过 sudo 执行管理命令。

3.2 系统更新与依赖检查 首先更新系统包并安装基础工具。

sudo apt update && sudo apt upgrade -y
sudo apt install -y curl wget vim gnupg lsb-release ca-certificates

3.3 内核与架构确认 确认系统内核支持容器运行,并明确当前架构。

# 查看内核版本
uname -r
# 确认处理器架构,应显示 loongarch64
uname -m

输出 loongarch64 即表示当前是龙芯架构。

3.4 磁盘空间规划 为 Nexus 规划存储目录,建议选择空间充足的磁盘分区。

# 例如,创建在 /data 目录下
sudo mkdir -p /data/nexus-data
sudo chown -R 1000:1000 /data/nexus-data # Nexus容器内默认以UID 1000运行

/data/nexus-data 将用于持久化存储 Nexus 的所有数据。

4. Docker 安装与配置

由于龙芯平台非 Docker 官方首要支持架构,安装方式可能与 x86/ARM 略有不同。

4.1 安装 Docker Engine 龙芯平台通常可通过系统包管理器或从龙芯社区提供的软件源安装 Docker。

# 方法一:尝试通过系统包管理器安装(如统信UOS)
# sudo apt install docker.io

# 方法二:更推荐使用龙芯社区或发行版提供的Docker安装脚本或包
# 例如,下载安装脚本(请从可信源获取)
# curl -fsSL https://get.docker.com -o get-docker.sh
# sudo sh get-docker.sh

# 安装后启动Docker并设置开机自启
sudo systemctl start docker
sudo systemctl enable docker

4.2 验证 Docker 安装 安装完成后,运行以下命令验证 Docker 是否正常工作。

# 查看Docker版本信息,确认Client和Server都已安装
docker version
# 运行一个测试容器,检查基础功能
sudo docker run --rm hello-world

如果 hello-world 镜像不存在,Docker 会尝试拉取。但由于龙芯架构,通用的 hello-world 镜像可能无法直接运行,可能会提示架构不匹配。这属于正常现象,关键看 Docker 服务本身是否运行。

4.3 配置 Docker 镜像加速器(可选但推荐) 为了加速拉取兼容龙芯架构的镜像,建议配置国内镜像加速器。编辑 Docker 守护进程配置文件。

sudo vim /etc/docker/daemon.json

添加以下内容(以阿里云镜像加速器为例,具体地址需查询对应服务商是否支持龙芯镜像仓库):

{
  “registry-mirrors”: [“https://your-mirror.mirror.aliyuncs.com”]
}

保存后,重启 Docker 服务使配置生效。

sudo systemctl daemon-reload
sudo systemctl restart docker

5. 获取与运行 Nexus 容器

这是核心步骤,我们需要获取一个能在 loongarch64 架构上运行的 Nexus 镜像。

5.1 寻找 LoongArch 架构的 Nexus 镜像 目前 Docker Hub 上由 Sonatype 官方发布的 sonatype/nexus3 镜像可能不直接提供 loongarch64 版本。我们可以尝试以下途径:

  1. 搜索社区镜像 :在 Docker Hub 或国内镜像仓库(如阿里云容器镜像服务)搜索关键词 nexus3 loongarch nexus3 loongarch64 ,看是否有第三方构建的版本。
  2. 使用多架构镜像标签 :尝试拉取 sonatype/nexus3:latest 镜像,Docker 会根据当前主机架构自动选择匹配的镜像。如果仓库提供了该架构的版本,则会成功拉取。
  3. 自行构建 :如果找不到,最后的手段是下载 Nexus 的 .tar.gz 发行版,编写 Dockerfile 在龙芯平台上自行构建镜像。

假设我们找到了一个可用的镜像,例如 some-registry/nexus3:loongarch64 。首先尝试拉取镜像。

sudo docker pull some-registry/nexus3:loongarch64

请将 some-registry/nexus3:loongarch64 替换为你实际找到的镜像名称。

5.2 运行 Nexus 容器 拉取镜像成功后,使用 docker run 命令启动容器。关键是将之前准备好的数据目录挂载到容器内。

sudo docker run -d \
  --name nexus \
  --restart unless-stopped \
  -p 8081:8081 \
  -v /data/nexus-data:/nexus-data \
  -e INSTALL4J_ADD_VM_PARAMS="-Xms1024m -Xmx1024m -XX:MaxDirectMemorySize=2g" \
  some-registry/nexus3:loongarch64

参数解释:

  • -d : 后台运行容器。
  • --name nexus : 为容器指定一个名称,便于管理。
  • --restart unless-stopped : 设置容器自动重启策略(除非手动停止)。
  • -p 8081:8081 : 将宿主机的 8081 端口映射到容器的 8081 端口(Nexus 默认服务端口)。
  • -v /data/nexus-data:/nexus-data : 将宿主机的 /data/nexus-data 目录挂载到容器内的 /nexus-data 路径,实现数据持久化。
  • -e INSTALL4J_ADD_VM_PARAMS=... : 设置 Nexus 的 JVM 运行参数,这里分配了最小 1GB,最大 1GB 的堆内存,可根据服务器内存调整。
  • some-registry/nexus3:loongarch64 : 你拉取的 Nexus 镜像名。

5.3 检查容器运行状态 容器启动后,查看其运行状态和日志。

# 查看容器是否在运行
sudo docker ps | grep nexus
# 查看容器实时日志,观察启动过程
sudo docker logs -f nexus

等待几分钟,直到在日志中看到类似 “Started Sonatype Nexus OSS 3.x.x” 的消息,表示 Nexus 启动成功。

6. 初始访问与基础配置

Nexus 服务启动后,即可通过浏览器进行访问和初始化配置。

6.1 访问 Nexus Web 界面 在服务器本机或同一网络内的另一台机器上,打开浏览器,访问:

http://<你的龙芯服务器IP地址>:8081

如果一切正常,你将看到 Nexus 的欢迎界面。

6.2 获取初始管理员密码 首次登录需要管理员密码。该密码存储在容器内的 admin.password 文件中,由于我们做了数据卷挂载,也可以在宿主机上查看。

# 在宿主机上查看初始密码
sudo cat /data/nexus-data/admin.password

复制输出的一长串随机密码。

6.3 完成初始化向导

  1. 在登录页面,用户名输入 admin ,密码粘贴上一步获取的随机密码。
  2. 登录后,系统会强制要求修改密码。请设置一个强密码并妥善保管。
  3. 随后,可能会提示是否允许匿名访问。对于内网私有仓库, 建议选择“Disable anonymous access” (禁止匿名访问),以增强安全性。
  4. 完成向导,进入 Nexus 主管理界面。

7. 功能测试与验证

部署完成后,我们需要验证 Nexus 的核心功能是否正常工作。这里以创建代理 Maven 中央仓库为例。

7.1 创建 Maven 代理仓库

  1. 点击顶部齿轮图标进入 “Administration” (管理)界面。
  2. 在左侧菜单选择 “Repositories” (仓库)。
  3. 点击 “Create repository” (创建仓库)。
  4. 选择仓库类型为 maven2 (proxy)
  5. 填写配置信息:
    • Name : maven-central (自定义名称)
    • Remote storage : https://repo1.maven.org/maven2/ (Maven 中央仓库地址)
    • 其他选项可保持默认。
  6. 点击 “Create repository” 完成创建。

7.2 测试仓库连通性 创建完成后,该代理仓库会出现在仓库列表中。我们可以通过一个简单的命令测试其是否能够代理下载构件。 在龙芯服务器或网络互通的其他机器上执行:

# 使用curl测试下载一个常见的公共jar包(例如Guava)
curl -v -o /dev/null http://<nexus服务器IP>:8081/repository/maven-central/com/google/guava/guava/32.1.3-jre/guava-32.1.3-jre.pom 2>&1 | grep -E “HTTP|<”

如果看到 HTTP/1.1 200 OK 或类似成功状态码,说明 Nexus 代理仓库工作正常,成功从远程中央仓库获取了文件。

7.3 配置本地 Maven 使用 Nexus 为了实际使用,需要在开发机的 Maven settings.xml 文件中配置 Nexus 为镜像仓库。

<mirrors>
    <mirror>
        <id>nexus-loongson</id>
        <name>Nexus on Loongson</name>
        <url>http://<你的龙芯服务器IP>:8081/repository/maven-central/</url>
        <mirrorOf>*</mirrorOf>
    </mirror>
</mirrors>

配置后,本地 Maven 项目的依赖下载请求将被转发到你的龙芯 Nexus 服务器。

8. 接口 API 与自动化管理

Nexus 提供了完善的 REST API,支持通过脚本或工具进行自动化管理,这对于集成到 CI/CD 流水线中非常有用。

8.1 启用 API 并获取认证 默认情况下,Nexus 的 API 是启用的。访问 API 通常需要身份认证。我们可以使用 HTTP Basic Auth 或 Token。

# 使用curl通过用户名密码调用API示例:获取仓库列表
curl -u admin:你的管理员密码 -X GET “http://<nexus服务器IP>:8081/service/rest/v1/repositories” -H “accept: application/json”

成功调用会返回一个包含所有仓库信息的 JSON 数组。

8.2 常用 API 示例

  • 搜索组件
    curl -u admin:密码 -X GET “http://<nexus服务器IP>:8081/service/rest/v1/search?repository=maven-central&name=guava”
    
  • 上传组件 (以 Maven 为例):
    curl -u admin:密码 -X POST “http://<nexus服务器IP>:8081/service/rest/v1/components?repository=maven-releases” \
      -F “maven2.groupId=com.example” \
      -F “maven2.artifactId=demo” \
      -F “maven2.version=1.0.0” \
      -F “maven2.asset1=@./demo-1.0.0.jar” \
      -F “maven2.asset1.extension=jar”
    
  • 创建清理策略
    curl -u admin:密码 -X POST “http://<nexus服务器IP>:8081/service/rest/v1/script” \
      -H “Content-Type: application/json” \
      -d ‘{
        “name”: “cleanup”,
        “type”: “groovy”,
        “content”: “repository.getRepositoryManager().browse()...(清理脚本内容)”
      }’
    

注意 :生产环境中,建议为自动化任务创建具有最小必要权限的专用用户和 Token,而非直接使用管理员账号。

9. 资源占用与性能观察

在龙芯平台上运行 Java 应用和 Docker 容器,监控资源使用情况很重要。

9.1 观察容器资源占用 使用 docker stats 命令可以实时查看容器的 CPU、内存、网络 I/O 等使用情况。

sudo docker stats nexus

启动初期和首次处理请求时,资源占用会较高。稳定运行后,主要观察内存占用是否在设定的 JVM 参数范围内。

9.2 观察宿主机资源 在另一个终端,使用系统命令观察整体资源。

# 查看内存使用情况
free -h
# 查看磁盘使用情况,特别是挂载了nexus-data的分区
df -h /data
# 查看CPU和进程情况
top

重点关注 /data 分区的磁盘空间增长情况,定期清理不需要的旧快照(Snapshot)或发布(Release)构件,可以通过 Nexus 内置的清理任务或 API 实现。

9.3 性能调优建议

  1. JVM 参数 :根据服务器物理内存大小调整 -Xms -Xmx 。对于 8GB 内存的服务器,设置为 -Xms2g -Xmx4g 可能是合理的起点。 -XX:MaxDirectMemorySize 通常设置为 -Xmx 的两倍。
  2. 存储性能 :Nexus 的 IO 操作频繁,建议将数据目录 /data/nexus-data 放在 SSD 磁盘上,以提升响应速度。
  3. 网络配置 :确保 Nexus 服务器与外部仓库(如 Maven Central)之间的网络通畅,避免因网络超时导致构建失败。

10. 常见问题与排查方法

在龙芯平台部署过程中,可能会遇到一些特有或常见的问题。

问题现象 可能原因 排查方式 解决方案
docker pull 失败,提示 no matching manifest 镜像仓库中没有适用于 linux/loongarch64 平台的镜像。 docker pull 命令的错误信息。 1. 确认镜像标签是否支持多架构。
2. 主动搜索 loongarch64 标签的镜像。
3. 考虑自行构建 Docker 镜像。
容器启动后,访问 http://IP:8081 失败。 1. 容器启动失败或异常退出。
2. 宿主机防火墙未开放 8081 端口。
3. Nexus 服务在容器内启动慢。
1. docker ps -a 查看容器状态。
2. docker logs nexus 查看容器日志。
3. sudo ufw status iptables -L 检查防火墙。
4. curl localhost:8081 在宿主机内测试。
1. 根据日志修复错误(如权限、端口冲突)。
2. 开放防火墙端口: sudo ufw allow 8081/tcp
3. 等待几分钟再访问,首次启动较慢。
日志显示 Permission denied 错误,无法写入 /nexus-data 宿主机数据目录的权限与容器内运行 Nexus 的用户(UID 1000)不匹配。 ls -ld /data/nexus-data 查看目录权限和所有者。 确保目录所有者是 UID 1000 或权限为 777(不安全): sudo chown -R 1000:1000 /data/nexus-data
Nexus 界面可以访问,但代理仓库下载依赖超时或失败。 1. Nexus 服务器无法访问外网。
2. 远程仓库地址配置错误。
3. DNS 解析问题。
1. 在容器内测试网络: docker exec nexus ping 8.8.8.8
2. 检查代理仓库的 “Remote storage” URL。
3. 检查容器内的 /etc/resolv.conf
1. 配置服务器的网络代理或路由。
2. 更正远程仓库地址。
3. 在 docker run 时通过 --dns 指定 DNS 服务器。
上传构件或搜索时,操作非常缓慢。 1. 服务器资源(CPU、内存、磁盘 IO)不足。
2. 数据库(内嵌的 OrientDB)需要优化或损坏。
1. 使用 docker stats top 监控资源。
2. 检查磁盘 IO 使用率 ( iotop )。
3. 查看 Nexus 日志中是否有数据库相关警告。
1. 升级服务器硬件或优化 JVM 参数。
2. 将数据目录移至性能更好的磁盘。
3. 定期进行仓库清理和维护任务。
忘记管理员密码。 密码丢失。 - 1. 如果未修改过,查看 /data/nexus-data/admin.password
2. 如果修改过且忘记,需要重置。停止容器,删除 /data/nexus-data/admin.password 文件,并编辑 /data/nexus-data/keystores/nexus.jks (此操作复杂,请参考官方文档)。建议备份密码。

11. 最佳实践与使用建议

为了在龙芯平台上稳定、高效地使用 Nexus,遵循以下实践建议。

  1. 镜像与数据分离 :始终使用 -v 参数将 nexus-data 目录挂载到宿主机。这样即使容器被删除或重建,你的仓库数据、配置和用户信息都能保留。
  2. 定期备份 :定期备份 /data/nexus-data 目录。可以考虑使用 tar rsync 命令,结合 cron 定时任务实现自动化备份。
    # 简单备份示例
    tar -czf /backup/nexus-data-$(date +%Y%m%d).tar.gz -C /data nexus-data
    
  3. 安全加固
    • 修改默认端口 :在 docker run 时使用 -p 宿主机端口:8081 将 8081 映射到其他非标准端口。
    • 配置 HTTPS :为 Nexus 配置 SSL/TLS 证书,避免明文传输。这通常需要在 Nexus 前配置 Nginx 等反向代理。
    • 严格的访问控制 :禁用匿名访问,为不同团队或项目创建独立的用户和角色,分配最小必要权限。
  4. 仓库维护
    • 设置清理策略 :定期清理过时的快照(Snapshot)构件,释放存储空间。
    • 合理规划仓库 :不要将所有类型的构件都堆在一个仓库。为 Maven 发行版、快照版、Docker 镜像、npm 包等创建独立的托管或代理仓库。
  5. 监控与日志 :将 Docker 容器日志和 Nexus 应用日志接入统一的日志管理系统(如 ELK Stack),便于问题追踪和性能分析。
  6. 版本升级 :升级 Nexus 版本时,建议先在一个测试环境进行。升级流程通常是:备份数据 -> 拉取新版本镜像 -> 使用相同的数据卷启动新容器。务必查阅官方升级指南。

在龙芯 3B6000 平台上通过 Docker 部署 Nexus,成功的关键在于解决基础镜像的架构兼容性问题。一旦 Docker 环境和合适的 Nexus 镜像就绪,后续的部署、配置和使用流程与在其他架构上基本一致。这套方案为龙芯生态下的软件开发提供了可靠的私有制品仓库管理能力,是构建完整自主可控技术栈的重要一环。建议在正式投入使用前,充分进行功能和压力测试,并根据团队实际需求规划仓库结构和备份策略。

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐