如果你正在使用龙芯 3B6000 这样的国产 CPU 平台进行软件开发,那么搭建一个私有的、稳定的依赖仓库,很可能是你当前最迫切的需求之一。在 x86 或 ARM 生态下,这通常不是问题,Docker Hub 和各大镜像仓库提供了丰富的官方镜像。但切换到龙芯的 LoongArch64 架构后,你会发现很多熟悉的工具链“水土不服”,尤其是像 Nexus Repository Manager 这样核心的制品库,官方并未提供原生支持。
这意味着,当你的团队需要在龙芯平台上统一管理 Maven、npm、Docker 镜像时,要么忍受从外网缓慢拉取依赖,要么就得自己动手从源码编译。前者严重影响开发效率,后者则是一个技术门槛高、耗时长的“深坑”。
好消息是,社区已经为我们铺好了路。本文要解决的核心问题,就是如何在龙芯 3B6000 平台上,利用社区预构建的 Docker 镜像,快速、稳定地部署一个功能完整的 Nexus 3 仓库。这不仅仅是“能跑起来”,而是要构建一个生产可用的、能真正融入你开发流程的私有制品库。
我们将从一个真实的部署场景出发,不仅提供可复现的docker-compose.yml配置,还会深入讲解在龙芯架构下部署 Nexus 可能遇到的网络、存储、权限等特有“坑点”,并给出最佳实践建议。读完本文,你将获得一套从零到一、开箱即用的龙芯 Nexus 私有仓库部署方案。
1. 为什么在龙芯平台上部署 Nexus 是刚需?
在 x86/ARM 生态中,Docker 和 Nexus 的部署教程遍地都是,但在龙芯平台上,这却是一个实实在在的“痛点”。其必要性源于三个核心矛盾:
第一,架构兼容性与开发效率的矛盾。龙芯 3B6000 采用的 LoongArch64 指令集,与主流的 x86_64 和 ARM64 不兼容。这意味着,绝大多数为后者预编译的二进制软件包和 Docker 镜像,无法直接在龙芯上运行。开发团队如果依赖互联网上的公共仓库,每一次mvn install或npm install都可能因为架构不匹配而失败,或者需要漫长的交叉编译等待,开发流程会被严重拖慢。
第二,安全合规与外部依赖的矛盾。在许多对安全有严格要求的内部开发环境中,尤其是涉及信创或特定行业的项目,直接连接外网下载依赖是不被允许的。企业需要在内网搭建一个统一的、可控的制品仓库。Nexus 作为业界事实标准的仓库管理器,是解决这个问题的核心组件。没有它,龙芯平台上的软件供应链就存在缺口。
第三,社区资源稀缺与运维成本的矛盾。虽然龙芯生态在快速发展,但针对特定中间件(如 Nexus)的、开箱即用的解决方案仍然不多。如果从源码开始编译 Nexus,你需要处理复杂的 Java 环境、依赖库的适配、以及可能出现的各种底层库链接问题,这对运维人员是巨大的挑战。一个预构建的、经过验证的 Docker 镜像,能直接将运维成本从“天”级别降低到“分钟”级别。
因此,在龙芯 3B6000 上部署 Nexus,不是一个“锦上添花”的玩具,而是一个打通内网开发流水线、提升团队协作效率、保障供应链安全的关键基础设施。接下来,我们将从核心概念入手,厘清 LoongArch64 与 Docker 镜像的关系。
2. 核心概念:LoongArch64、Docker 与 Nexus 镜像
在开始动手之前,我们需要明确几个关键概念,这能帮助你理解我们正在搭建的系统是如何工作的,以及在遇到问题时知道从哪里排查。
LoongArch64 (loong64):这是龙芯公司自主研发的 CPU 指令集架构。在软件生态中,它对应一个特定的系统架构标识。在 Docker 的语境下,当我们说一个镜像是linux/loong64架构时,意味着这个镜像内的所有二进制文件(如java、bash)都是针对 LoongArch64 指令集编译的,只能在龙芯 CPU 上正常运行。这与常见的linux/amd64(x86-64) 和linux/arm64(ARMv8) 是并列的架构。
Docker 多架构镜像与 Manifest:一个理想的 Docker 镜像仓库(如 Docker Hub)应该支持“多架构镜像”。即同一个镜像标签(如nginx:latest)背后,实际上关联着一个“清单”,这个清单列出了该标签在不同架构下的具体镜像摘要。当你在龙芯机器上执行docker pull nginx:latest时,Docker 客户端会识别你的系统架构是loong64,然后从清单中拉取对应的linux/loong64架构镜像。然而,许多软件的官方镜像并未提供loong64版本,这就是我们需要社区预构建镜像的原因。
Nexus Repository Manager 3:这是 Sonatype 公司开发的一款强大的仓库管理软件。它不仅仅是一个简单的文件服务器,而是一个支持多种仓库格式的“代理中心”和“托管中心”。它可以代理远程的 Maven Central、npm Registry、Docker Hub 等,将依赖缓存到本地;也可以创建托管仓库,用于存储团队内部开发的 Jar 包、npm 包或 Docker 镜像。其核心价值在于“统一管理”和“加速访问”。
社区预构建镜像的价值:搜索材料中提到的kubernetes-loong64/nexus-loong64项目,正是社区为填补上述空白所做的努力。它将 Nexus 3 的发行版(一个复杂的 Java Web 应用)及其运行环境(如 JRE、基础系统库)一起,针对loong64架构进行了完整的构建和打包,封装成一个可直接运行的 Docker 镜像。这省去了我们手动安装 JDK、解压 War 包、配置系统服务的所有步骤。
理解这些概念后,你就会明白,我们接下来的部署,本质上是将这个已经“龙芯化”的 Nexus 应用,通过 Docker 容器化的方式,以可控、可复现的模式运行起来。
3. 环境准备:龙芯 3B6000 服务器与 Docker 环境
部署的前提是拥有一台运行着 Linux 的龙芯 3B6000 服务器,并且 Docker 环境已经就绪。以下是详细的环境检查与准备步骤。
3.1 操作系统与硬件确认
首先,通过 SSH 登录到你的龙芯服务器,执行以下命令确认系统架构:
uname -m如果系统是龙芯 3B6000,你应该会看到输出loongarch64。这确认了我们的硬件平台。
接下来,检查操作系统版本,这关系到后续安装 Docker 的软件源选择:
cat /etc/os-release常见的龙芯平台操作系统包括 Loongnix(基于 Fedora)、UOS、麒麟等。本文的演示环境以 Loongnix 或 Debian/Ubuntu 衍生版为例,其包管理工具为apt。如果你的系统是 CentOS/RHEL 系(使用yum或dnf),命令需要相应调整。
3.2 Docker 安装与验证
龙芯平台上的 Docker 安装与 x86 平台类似,但需要确保使用支持loong64架构的软件源。
1. 卸载旧版本(如有):
sudo apt-get remove docker docker-engine docker.io containerd runc2. 安装依赖工具:
sudo apt-get update sudo apt-get install -y \ ca-certificates \ curl \ gnupg \ lsb-release3. 添加 Docker 官方 GPG 密钥和软件源:对于龙芯架构,通常需要从国内镜像站或龙芯社区源获取 Docker。这里以添加 Docker 官方源为例(官方源通常已支持多架构,包括 loong64):
# 创建密钥环目录 sudo mkdir -p /etc/apt/keyrings # 下载并导入GPG密钥 curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg # 添加软件源 echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null注意:如果$(lsb_release -cs)获取的代号不被 Docker 官方支持,可能需要替换为如bullseye等稳定的 Debian 代号。
4. 安装 Docker Engine:
sudo apt-get update sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin5. 验证安装并检查架构:安装完成后,启动 Docker 服务并设置开机自启:
sudo systemctl start docker sudo systemctl enable docker运行一个测试容器,验证 Docker 能否正常工作,并确认其识别的主机架构:
sudo docker run --rm hello-world sudo docker version --format '{{.Server.Arch}}'第一条命令应输出 “Hello from Docker!” 等欢迎信息。第二条命令应输出loong64,这证明 Docker 守护进程正确运行在龙芯架构上。
6. (可选)配置非 root 用户运行 Docker:为了避免每次命令都加sudo,可以将当前用户加入docker组:
sudo usermod -aG docker $USER执行此命令后,需要退出当前 SSH 会话并重新登录,用户组变更才会生效。
至此,Docker 环境已经准备就绪。接下来,我们需要获取专为龙芯构建的 Nexus 镜像。
4. 获取与验证 LoongArch64 架构的 Nexus 镜像
正如开篇所述,Sonatype 官方并未提供linux/loong64架构的 Nexus 镜像。我们需要使用社区维护的预构建镜像。根据网络搜索材料,我们可以从阿里云镜像仓库拉取。
1. 拉取镜像:搜索材料中给出了一个具体的镜像地址:registry.cn-qingdao.aliyuncs.com/xuxiaoweicomcn/nexus3-loong64:3.93.1。这是一个托管在国内阿里云上的镜像,拉取速度会快很多。
docker pull registry.cn-qingdao.aliyuncs.com/xuxiaoweicomcn/nexus3-loong64:3.93.1拉取过程会显示镜像的各层信息。完成后,可以使用docker images命令查看。
2. 验证镜像架构:拉取完成后,务必确认该镜像的架构是loong64,而不是被错误地拉取了amd64版本。
docker image inspect registry.cn-qingdao.aliyuncs.com/xuxiaoweicomcn/nexus3-loong64:3.93.1 --format='{{.Architecture}}'该命令应返回loong64。这是最关键的一步,确保我们拉取的是正确的镜像。
3. (可选)为镜像添加标签:为了在docker-compose.yml中更方便地引用,可以为其添加一个更简短的标签。
docker tag registry.cn-qingdao.aliyuncs.com/xuxiaoweicomcn/nexus3-loong64:3.93.1 nexus3-loong64:3.93.1现在,我们拥有了可以在龙芯 3B6000 上运行的 Nexus 3 镜像。接下来,我们将使用 Docker Compose 来定义和运行这个服务,这是管理容器化应用的最佳实践。
5. 使用 Docker Compose 编排 Nexus 服务
直接使用docker run命令启动容器虽然简单,但参数冗长且不易管理。Docker Compose 允许我们使用一个 YAML 文件来定义整个应用的服务、网络、卷,实现一键启动和停止。我们将基于搜索材料中的docker-compose.yml进行扩展和详细解释。
5.1 创建项目目录与 Compose 文件
首先,创建一个专属目录来存放所有 Nexus 相关的文件,这样便于管理。
mkdir -p ~/nexus-loongarch && cd ~/nexus-loongarch在该目录下,创建docker-compose.yml文件:
vim docker-compose.yml将以下内容复制到文件中。这个配置比搜索材料中的更完善,增加了环境变量、资源限制等生产环境常用配置。
version: '3.8' services: nexus: # 使用拉取到的龙芯架构 Nexus 镜像 image: registry.cn-qingdao.aliyuncs.com/xuxiaoweicomcn/nexus3-loong64:3.93.1 container_name: nexus-loongarch restart: unless-stopped # 容器退出时总是重启,除非手动停止 ports: - "8081:8081" # Nexus Web 管理界面端口 - "8443:8443" # Nexus HTTPS 端口(如需) # Docker 仓库推送/拉取端口(如果需要托管Docker镜像) - "5000-5002:5000-5002" environment: # Nexus 数据目录,容器内路径,不要修改 - NEXUS_DATA=/nexus-data # 设置JVM堆内存大小,根据服务器内存调整。4G内存的机器建议设为 2G - INSTALL4J_ADD_VM_PARAMS=-Xms2g -Xmx2g -XX:MaxDirectMemorySize=2g # 时区设置为上海 - TZ=Asia/Shanghai volumes: # 将宿主机目录挂载到容器数据目录,实现数据持久化 - ./nexus-data:/nexus-data # (可选)挂载本地Maven仓库缓存,加速构建 # - ~/.m2/repository:/tmp/maven-repo networks: - nexus-network dns: - 114.114.114.114 # 设置容器内DNS,解决可能的域名解析问题 - 8.8.8.8 # 资源限制,防止容器占用过多资源 deploy: resources: limits: memory: 4G reservations: memory: 2G # 健康检查,确保服务真正就绪 healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8081"] interval: 30s timeout: 10s retries: 3 start_period: 60s # 定义自定义网络,便于未来扩展其他服务(如CI/CD工具) networks: nexus-network: driver: bridge # 定义命名卷(如果使用上面的路径挂载,则不需要此卷定义) # volumes: # nexus-data: # driver: local5.2 关键配置项详解
这个docker-compose.yml文件包含了多个重要配置,理解它们有助于故障排查和性能调优:
- 镜像 (
image): 明确指定了我们拉取的龙芯架构镜像。 - 端口映射 (
ports):8081:8081: Nexus 的 Web UI 和管理 API 端口。8443:8443: 如果配置了 HTTPS,则使用此端口。5000-5002:5000-5002:这是为 Docker 私有仓库预留的端口范围。如果你计划用这个 Nexus 托管 Docker 镜像,客户端需要配置--insecure-registry your-server-ip:5000来推送/拉取。你可以根据需要映射单个端口,如- "5000:5000"。
- 数据持久化 (
volumes):./nexus-data:/nexus-data是最关键的配置。它将容器内的/nexus-data目录挂载到宿主机的./nexus-data目录。这样,即使容器被删除,Nexus 的所有配置、仓库数据和日志都会保留在宿主机上。 - JVM 参数 (
environment):INSTALL4J_ADD_VM_PARAMS用于设置 Nexus 的 Java 虚拟机参数。-Xms和-Xmx设置了堆内存的初始值和最大值。对于 Nexus,适当增加堆内存(如 2G-4G)可以显著提升性能,尤其是在处理大量元数据时。MaxDirectMemorySize也需要相应增加。 - DNS 配置 (
dns): 在容器内设置 DNS 服务器,可以避免因容器内默认 DNS 解析失败而导致 Nexus 无法代理远程仓库的问题。这是一个非常实用的技巧。 - 健康检查 (
healthcheck): 该配置让 Docker 可以感知 Nexus 服务的健康状态。只有当健康检查通过后,容器才被认为是“运行正常”的。这对于编排工具(如 Docker Swarm, Kubernetes)和监控非常有用。 - 资源限制 (
deploy.resources): 限制容器使用的最大内存,防止 Nexus 进程因内存泄漏等问题拖垮整个宿主机。
配置文件准备就绪后,就可以启动服务了。
6. 启动 Nexus 服务与初始化配置
6.1 启动容器
在docker-compose.yml文件所在目录,执行以下命令启动服务:
docker-compose up -d-d参数表示在后台运行(detached mode)。命令执行后,Docker Compose 会拉取镜像(如果本地没有)、创建网络、挂载卷,并启动容器。
使用以下命令查看容器状态和日志:
# 查看容器运行状态 docker-compose ps # 查看实时日志(用于观察启动过程) docker-compose logs -f nexus当你在日志中看到类似“Started Sonatype Nexus OSS 3.93.1-01”的信息时,说明 Nexus 应用已启动完成。首次启动需要较长时间(可能几分钟),因为 Nexus 需要初始化数据库和文件系统。
6.2 获取管理员初始密码
Nexus 首次启动后,会生成一个随机的管理员密码,并存储在数据目录下的admin.password文件中。根据我们的docker-compose.yml配置,这个文件在宿主机的./nexus-data目录下。
执行以下命令查看初始密码:
cat ./nexus-data/admin.password你会得到一串类似“a1b2c3d4-e5f6-7890-g1h2-i3j4k5l6m7n8”的 UUID。请复制这个密码。
6.3 完成 Web UI 初始化
- 打开浏览器,访问
http://你的服务器IP地址:8081。 - 点击右上角的 “Sign in” 按钮。
- 用户名输入
admin,密码粘贴刚才复制的初始密码。 - 登录后,系统会强制要求你更改密码。请设置一个强密码并妥善保管。
- 接下来会提示是否启用匿名访问。对于内网私有仓库,建议选择 “Disable anonymous access” (禁用匿名访问),以增强安全性。这样所有用户都必须经过认证才能拉取依赖。
- 完成设置后,你将进入 Nexus 的主管理界面。
至此,一个基于龙芯 3B6000 的 Nexus 3 私有仓库已经成功运行。但这只是第一步,接下来我们需要对其进行配置,使其真正能为我们的开发工作流服务。
7. 核心配置:创建仓库与配置客户端
一个空的 Nexus 没什么用。我们需要创建代理仓库(Proxy)来缓存远程公共仓库,创建托管仓库(Hosted)来存放私有构件,以及创建仓库组(Group)来统一对外提供服务。
7.1 创建 Maven 代理仓库
这是最常用的功能,用于代理 Maven Central 等远程仓库,加速本地构建。
- 在 Nexus 管理界面,点击顶部导航栏的 “齿轮” 图标进入Administration。
- 在左侧菜单选择Repository > Repositories。
- 点击Create repository。
- 选择仓库类型为maven2 (proxy)。
- 填写配置信息:
- Name:
maven-central(可自定义) - Remote storage:
https://repo1.maven.org/maven2/(这是 Maven Central 的地址) - Blob store: 选择
default。 - 其他选项保持默认,点击Create repository。
- Name:
你可以用同样的方法创建其他代理仓库,例如阿里云 Maven 镜像(https://maven.aliyun.com/repository/public),这样能进一步加速国内访问。
7.2 创建 Maven 托管仓库
用于发布团队内部开发的 Jar 包。
- Create repository,选择maven2 (hosted)。
- 填写配置:
- Name:
maven-releases(通常用于发布正式版) - Version policy:
Release(严格版本控制) - Deployment policy:
Allow redeploy(根据团队规范选择)
- Name:
- 同样方法再创建一个maven2 (hosted)仓库:
- Name:
maven-snapshots(用于发布快照版) - Version policy:
Snapshot - Deployment policy:
Allow redeploy
- Name:
7.3 创建 Maven 仓库组
仓库组将多个仓库(代理和托管)聚合起来,对外提供一个统一的访问地址。
- Create repository,选择maven2 (group)。
- 填写配置:
- Name:
maven-public(这是对外暴露的组名) - Member repositories: 在左侧 “Available” 列表中,将
maven-central、maven-releases、maven-snapshots移到右侧的 “Members” 列表中。顺序很重要,Nexus 会按此顺序搜索构件。通常将速度快的代理仓库(如阿里云镜像)放在前面,托管仓库次之,最后是中央仓库。
- Name:
- 点击Create repository。
现在,你的 Maven 客户端只需要配置这个maven-public组地址,就可以访问到所有仓库的构件。
7.4 配置 Maven 客户端(settings.xml)
在你的开发机器(可以是 x86 也可以是另一台龙芯机器)的 Mavensettings.xml文件中,添加镜像和服务器配置。
找到~/.m2/settings.xml文件(如果没有则创建),添加以下内容:
<settings> <mirrors> <!-- 配置 Nexus 仓库组作为所有仓库的镜像 --> <mirror> <id>nexus-loongarch</id> <name>Nexus LoongArch Repository</name> <url>http://你的Nexus服务器IP:8081/repository/maven-public/</url> <mirrorOf>*</mirrorOf> <!-- 匹配所有仓库请求 --> </mirror> </mirrors> <servers> <!-- 配置部署到托管仓库所需的认证信息 --> <server> <id>nexus-releases</id> <username>admin</username> <!-- 建议创建专用部署用户,而非admin --> <password>你的部署用户密码</password> </server> <server> <id>nexus-snapshots</id> <username>admin</username> <password>你的部署用户密码</password> </server> </servers> <profiles> <profile> <id>nexus</id> <repositories> <repository> <id>central</id> <url>http://你的Nexus服务器IP:8081/repository/maven-public/</url> <releases><enabled>true</enabled></releases> <snapshots><enabled>true</enabled></snapshots> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>central</id> <url>http://你的Nexus服务器IP:8081/repository/maven-public/</url> <releases><enabled>true</enabled></releases> <snapshots><enabled>true</enabled></snapshots> </pluginRepository> </pluginRepositories> </profile> </profiles> <activeProfiles> <activeProfile>nexus</activeProfile> </activeProfiles> </settings>配置完成后,在开发机上执行mvn clean compile,Maven 就会从你的龙芯 Nexus 仓库拉取依赖。首次拉取会稍慢,因为需要从远程代理,之后就会享受本地缓存带来的极速体验。
7.5 (可选)配置 Docker 私有仓库
如果你的团队也使用 Docker,可以在 Nexus 中创建 Docker 托管仓库。
- 在Repository > Repositories中,点击Create repository。
- 选择类型docker (hosted)。
- 填写配置:
- Name:
docker-hosted - HTTP: 填写一个端口,例如
5000。这个端口需要与docker-compose.yml中映射的端口一致。 - Allow anonymous docker pull: 根据安全策略选择。
- Deployment policy:
Allow redeploy。
- Name:
- 创建完成后,需要在
docker-compose.yml中确保端口5000已映射(我们之前已经映射了5000-5002)。 - 在 Docker 客户端机器上,配置 insecure registry(因为默认使用 HTTP):
- Linux: 编辑
/etc/docker/daemon.json,添加{ "insecure-registries": ["你的Nexus服务器IP:5000"] },然后重启 Docker。 - 配置完成后,即可使用
docker push/pull 你的Nexus服务器IP:5000/镜像名:标签来推送和拉取镜像。
- Linux: 编辑
8. 常见问题与排查思路
在龙芯平台上部署 Nexus,除了常规问题,还可能遇到一些架构特有的情况。以下是一个快速排查指南。
| 问题现象 | 可能原因 | 排查方式 | 解决方案 |
|---|---|---|---|
容器启动失败,提示exec format error | 拉取的 Docker 镜像架构不正确,不是loong64。 | docker image inspect <镜像名> --format='{{.Architecture}}' | 确认镜像地址正确,重新拉取专为龙芯构建的镜像。 |
访问http://IP:8081超时或连接拒绝 | 1. Nexus 容器未成功启动。 2. 防火墙/安全组未开放 8081 端口。 3. 容器端口映射错误。 | 1.docker-compose logs -f nexus查看日志。2. sudo ufw status或firewall-cmd --list-all检查防火墙。3. docker-compose ps和docker port nexus-loongarch检查端口映射。 | 1. 根据日志修复启动错误。 2. 开放端口: sudo ufw allow 8081。3. 检查 docker-compose.yml的ports配置。 |
| Nexus 启动极慢,日志卡住 | 首次启动需要初始化数据库,龙芯平台 JVM 性能可能稍弱,需要耐心等待。同时,JVM 堆内存设置过小也可能导致 GC 频繁。 | 查看日志是否有持续输出,观察docker stats查看容器 CPU/内存使用率。 | 等待 5-10 分钟。检查INSTALL4J_ADD_VM_PARAMS环境变量,适当增加-Xmx值(如4g)。确保数据卷挂载的磁盘有足够空间和 IO 性能。 |
| Maven 构建时无法从 Nexus 下载依赖 | 1. Mavensettings.xml配置错误。2. Nexus 仓库组未包含所需仓库。 3. 网络不通或 DNS 解析失败。 | 1. 检查settings.xml中 URL 的 IP 和端口是否正确。2. 在 Nexus UI 的 maven-public组中检查成员仓库。3. 在服务器上 curl http://localhost:8081测试容器内连通性;在客户端ping/telnetNexus 服务器。 | 1. 修正settings.xml。2. 将对应的代理仓库(如 maven-central)加入maven-public组。3. 检查网络和防火墙。在 docker-compose.yml中配置正确的 DNS。 |
Docker 客户端推送镜像失败,报http: server gave HTTP response to HTTPS client | Docker 客户端默认要求与仓库使用 HTTPS 通信,而我们的 Nexus Docker 仓库使用的是 HTTP。 | 在 Docker 客户端配置 insecure registry。 | 编辑 Docker 客户端的daemon.json文件,添加"insecure-registries": ["Nexus服务器IP:5000"],并重启 Docker 服务。 |
| Nexus 管理界面登录后,操作卡顿或报错 | 浏览器缓存问题,或 JVM 内存不足。 | 清除浏览器缓存,或使用无痕模式访问。观察容器日志是否有内存溢出错误。 | 清除缓存。增加docker-compose.yml中INSTALL4J_ADD_VM_PARAMS的-Xmx值,并重启容器。 |
| 磁盘空间不足 | Nexus 缓存了大量构件,占满磁盘。 | 在 Nexus UI 的Administration > System > File System Blob Stores查看存储使用情况。 | 1. 定期清理:Administration > Repository > Cleanup policies设置清理策略。 2. 手动删除:在Repository > Browse中浏览并删除无用构件。 3. 扩展数据卷磁盘空间。 |
9. 最佳实践与生产环境建议
将 Nexus 用于生产环境,除了能跑起来,还需要考虑稳定性、安全性和可维护性。以下是在龙芯平台上运行 Nexus 的进阶建议。
1. 数据备份与恢复:
- 定期备份:Nexus 的所有数据都在
/nexus-data目录。最简单的备份方式就是定期打包这个目录。
```bash # 在宿主机上,进入 docker-compose.yml 所在目录 tar -czf nexus-data-backup-$(date +%Y%m%d).tar.gz ./nexus-data/ # 将备份文件传输到远程存储或另一台机器 ```- 恢复数据:停止 Nexus 容器,清空当前
./nexus-data目录,将备份文件解压到此目录,然后重新启动容器。
2. 安全加固:
- 禁用匿名访问:在初始化后或Security > Anonymous中设置。
- 创建专属用户:不要长期使用
admin账户进行日常操作和 CI/CD 集成。为不同用途(如部署、只读拉取)创建具有最小权限的专属用户和角色。 - 启用 HTTPS:生产环境强烈建议为 Nexus 配置 SSL/TLS 证书。这需要修改 Nexus 的
jetty.xml等配置,并可能需要在docker-compose.yml中挂载证书文件。过程较为复杂,可参考 Nexus 官方文档。 - 防火墙策略:只对必要的 IP 段开放 8081(管理)和 5000(Docker)端口。
3. 性能与监控:
- JVM 调优:根据服务器物理内存大小调整
-Xms和-Xmx。对于 8G 内存的服务器,设置为-Xms4g -Xmx4g -XX:MaxDirectMemorySize=4g是一个不错的起点。监控容器内存使用 (docker stats),避免频繁 Full GC。 - 存储优化:将
nexus-data目录挂载到 SSD 磁盘或高性能存储上,能极大提升元数据操作和构件检索速度。 - 日志管理:Nexus 日志位于
./nexus-data/log。可以配置日志轮转,或使用 ELK 等工具集中管理。
4. 高可用考虑(进阶):对于关键业务,单点 Nexus 存在风险。可以考虑以下方案:
- 定期冷备:如上所述,定期备份数据。
- Nexus Repository Manager 3 集群:商业版 Nexus 支持集群部署,但需要额外的许可证。社区版(OSS)不支持原生集群。
- 架构层面的冗余:一种折中方案是,在另一台龙芯服务器上部署一个完全相同的 Nexus 实例,定期从主实例同步备份数据。虽然不能实现无缝切换,但能在主实例故障时快速恢复服务。
5. 版本升级:当有新的社区镜像版本发布时,升级步骤如下:
- 备份当前的
./nexus-data目录。 - 修改
docker-compose.yml中的镜像标签为新版本。 - 执行
docker-compose pull拉取新镜像。 - 执行
docker-compose down停止旧容器。 - 执行
docker-compose up -d启动新容器。 - Nexus 通常会自动完成数据迁移,但务必在升级前查阅社区镜像的发布说明,确认是否有不兼容的变更。
通过以上步骤,你不仅能在龙芯 3B6000 上部署 Nexus,更能构建一个健壮、安全、高效的私有制品仓库,为整个团队的龙芯原生开发提供坚实的供应链基础。这套方案的成功部署,标志着你在信创环境下的 DevOps 基础设施建设中,迈出了关键且扎实的一步。