部署nexus
飞牛OS Docker 私有化部署 Nexus Repository
适配飞牛OS NAS环境,提前规避权限、端口冲突等高频坑,主打可直接落地、长期稳定运行。
Nexus Repository 是主流的私有制品仓库,支持Maven、npm、Docker、PyPI、Go等几乎所有主流包类型,适合私有化部署管理内部依赖、镜像。
一、前置准备
1. 环境校验
- 最低配置要求:CPU≥2核,内存≥4G(推荐4核8G,低于2G会频繁GC卡死),存储空间预留≥20G(制品缓存会持续增长)。
- Docker服务确认:飞牛OS已安装并启动Docker服务,可通过
docker --version验证正常运行。 - 端口规划与冲突检查
Nexus默认核心端口为8081,如需配置Docker私有仓库,需额外预留端口,推荐规划如下,提前检查端口是否被占用:
端口占用检查命令(无输出即为可用):宿主机端口 容器端口 用途 2081 8081 Nexus Web管理页+核心API 25000 5000 Docker私有仓库(HTTP) 25001 5001 Docker私有仓库(HTTPS) 1
netstat -tulpn | grep 2081
2. 持久化目录创建与权限配置
方法1
ssh连接飞牛
一开始就用管理员权限创建目录
1 | |
!!! 注意:切记千万不要进入 /vol2/1000 等用户目录创建 nexus_data 目录,会导致权限问题!
方法2
Nexus容器内默认使用UID=200、GID=200的nexus用户运行,必须提前给挂载目录配置正确的所有者权限,否则会出现和GitLab一样的Permission denied报错。
在飞牛OS存储池(和GitLab同路径,方便管理)创建挂载目录:
1
2
3
4# 进入docker目录
cd /vol2
# 创建nexus目录及数据子目录
mkdir -p nexus_data/data核心权限配置(必须执行):
1
2
3
4# 递归修改目录所有者为容器内nexus用户的UID/GID 200
chown -R 200:200 /vol2/nexus_data
# 配置目录读写权限
chmod -R 755 /vol2/nexus_data飞牛OS Web端权限补充:
进入飞牛OS文件管理,找到/vol2/nexus_data文件夹,右键属性,给当前管理员用户、everyone用户组开放读写权限,保存设置(NAS系统Web端权限优先级高于命令行)。
二、部署方案(2选1,优先docker-compose,和GitLab部署习惯对齐)
方案1:docker-compose 部署(推荐,易维护、易修改)
适合长期稳定运行,配置可留存,一键启停/更新。
进入nexus目录:
1
cd /vol2/nexus_data创建
docker-compose.yml配置文件:1
vi docker-compose.yml粘贴以下完整配置,可直接使用,无需额外修改:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22version: '3.8'
services:
nexus:
image: sonatype/nexus3:latest
container_name: nexus
restart: always
# 端口映射,如需Docker仓库可放开对应端口
ports:
- "2081:8081"
- "25000:5000"
- "25001:5001"
# 数据持久化挂载
volumes:
- /vol2/nexus_data/data:/nexusData
# 共享内存配置,避免页面卡顿/报错
shm_size: '256m'
# 环境变量配置
environment:
# 时区设置,和国内时间一致
TZ: Asia/Shanghai
# JVM内存配置,根据NAS内存调整,最小建议2G,推荐4G
INSTALL4J_ADD_VM_PARAMS: "-Xms3G -Xmx3G -XX:MaxDirectMemorySize=1G"内存配置说明:
-Xms初始堆内存,-Xmx最大堆内存,两者建议设置相同值,避免GC波动;MaxDirectMemorySize建议为堆内存的一半。比如NAS内存8G,可设置-Xms3G -Xmx3G -XX:MaxDirectMemorySize=2G。后台启动容器:
1
docker-compose up -d
方案2:docker run 快速部署
适合临时测试,一键启动,无需额外配置文件,替换路径为实际路径即可执行:
1 | |
三、初始化与登录
关键提醒:Nexus首次启动初始化需要2-5分钟(根据NAS性能),请勿反复重启容器,否则会导致初始化失败。
查看启动状态与日志:
1
2# 实时查看启动日志,出现 Started Sonatype Nexus OSS 即为初始化完成
docker logs -f nexus获取初始管理员密码:
Nexus默认管理员账号为admin,初始密码存放在容器内的/nexusData/admin.password文件中,执行以下命令获取:1
docker exec -it nexus cat /nexusData/admin.password复制输出的字符串,即为初始密码。
访问与登录:
浏览器输入http://192.168.1.201:2081,打开Nexus管理页,点击右上角Sign in,账号admin,粘贴初始密码登录。- 首次登录会强制引导修改管理员密码,请设置强密码并妥善保存。
- 引导页会询问是否启用匿名访问,私有化部署建议关闭匿名访问,避免未授权人员拉取制品。
四、飞牛OS环境常见问题与解决方案
1. 启动报错:Permission denied / 无法写入/nexusData目录
- 核心原因:挂载目录的所有者/权限配置错误,容器内
nexus用户(UID=200)无读写权限。 - 解决方案:
1
2
3
4
5
6
7# 停止容器
docker stop nexus
# 重新配置权限,确保目录所有者为200:200
chown -R 200:200 /vol2/nexus_data/data
chmod -R 755 /vol2/nexus_data/data
# 重新启动容器
docker start nexus - 补充排查:确认飞牛OS Web端共享文件夹已开放读写权限,无只读限制。
2. 容器启动后一直重启/页面无法访问
- 原因1:内存不足,JVM启动失败。解决方案:调小
INSTALL4J_ADD_VM_PARAMS中的内存配置,或升级NAS内存。 - 原因2:端口冲突。解决方案:更换未被占用的宿主机端口,修改端口映射后重新启动。
- 原因3:防火墙未放行。解决方案:飞牛OS防火墙设置中,放开2081、25000、25001等端口的访问权限。
3. 初始化完成后,页面加载卡顿/操作无响应
- 核心原因:JVM内存配置不合理,或NAS性能不足。
- 优化方案:
- 调大JVM堆内存,建议最小2G,优先保证
-Xmx不超过NAS可用内存的50%。 - 关闭Nexus非必要的插件:登录后进入
设置-系统-插件,禁用不用的仓库类型插件(如NuGet、RubyGems等)。
- 调大JVM堆内存,建议最小2G,优先保证
五、常用核心配置(私有化部署必做)
1. 配置国内代理仓库(加速依赖拉取)
以最常用的Maven、npm为例,核心逻辑是:创建代理仓库→加入仓库组→本地项目配置仓库组地址,实现内网统一加速。
Maven 阿里云代理配置
- 登录Nexus,进入
设置-Repository-Repositories,点击Create repository。 - 选择
maven2 (proxy),填写仓库ID:maven-aliyun,名称自定义。 Remote storage填写阿里云代理地址:https://maven.aliyun.com/repository/public。- 其他保持默认,点击
Create repository保存。 - 找到默认的
maven-public仓库组,把刚创建的maven-aliyun加入组内,调整优先级到最上方,保存即可。
npm 淘宝代理配置
- 同上,创建
npm (proxy)仓库,ID:npm-taobao。 - 远程地址填写:
https://registry.npmmirror.com。 - 加入默认的
npm-all仓库组,调整优先级即可。
2. 外网访问配置
不建议直接将Nexus暴露到公网,优先使用飞牛OS自带的VPN远程访问、内网穿透服务;如需公网访问,建议配置HTTPS证书+域名,通过DDNS解析到公网IP,并做好防火墙IP白名单限制。
3. 数据备份
Nexus所有数据都存在/vol2/nexus_data/data目录中,直接定期备份该目录即可;也可在Nexus管理页设置-系统-Tasks中,创建定时备份任务,自动导出备份文件。