部署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
2
3
4
5
6
sudo su
cd /vol2
mkdir -p nexus_data/data
cd nexus_data
pwd
ll

!!! 注意:切记千万不要进入 /vol2/1000 等用户目录创建 nexus_data 目录,会导致权限问题!

方法2

Nexus容器内默认使用UID=200GID=200nexus用户运行,必须提前给挂载目录配置正确的所有者权限,否则会出现和GitLab一样的Permission denied报错。

  1. 在飞牛OS存储池(和GitLab同路径,方便管理)创建挂载目录:

    1
    2
    3
    4
    # 进入docker目录
    cd /vol2
    # 创建nexus目录及数据子目录
    mkdir -p nexus_data/data
  2. 核心权限配置(必须执行):

    1
    2
    3
    4
    # 递归修改目录所有者为容器内nexus用户的UID/GID 200
    chown -R 200:200 /vol2/nexus_data
    # 配置目录读写权限
    chmod -R 755 /vol2/nexus_data
  3. 飞牛OS Web端权限补充:
    进入飞牛OS文件管理,找到/vol2/nexus_data文件夹,右键属性,给当前管理员用户、everyone用户组开放读写权限,保存设置(NAS系统Web端权限优先级高于命令行)。


二、部署方案(2选1,优先docker-compose,和GitLab部署习惯对齐)

方案1:docker-compose 部署(推荐,易维护、易修改)

适合长期稳定运行,配置可留存,一键启停/更新。

  1. 进入nexus目录:

    1
    cd /vol2/nexus_data
  2. 创建docker-compose.yml配置文件:

    1
    vi docker-compose.yml
  3. 粘贴以下完整配置,可直接使用,无需额外修改:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    version: '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

  4. 后台启动容器:

    1
    docker-compose up -d

方案2:docker run 快速部署

适合临时测试,一键启动,无需额外配置文件,替换路径为实际路径即可执行:

1
2
3
4
5
6
7
8
9
10
11
docker run -d \
--name nexus \
--restart always \
-p 2081:8081 \
-p 25000:5000 \
-p 25001:5001 \
-v /vol2/nexus_data/data:/nexusData \
--shm-size 256m \
-e TZ=Asia/Shanghai \
-e INSTALL4J_ADD_VM_PARAMS="-Xms3G -Xmx3G -XX:MaxDirectMemorySize=1G" \
sonatype/nexus3:latest

三、初始化与登录

关键提醒:Nexus首次启动初始化需要2-5分钟(根据NAS性能),请勿反复重启容器,否则会导致初始化失败。

  1. 查看启动状态与日志:

    1
    2
    # 实时查看启动日志,出现 Started Sonatype Nexus OSS 即为初始化完成
    docker logs -f nexus
  2. 获取初始管理员密码:
    Nexus默认管理员账号为admin,初始密码存放在容器内的/nexusData/admin.password文件中,执行以下命令获取:

    1
    docker exec -it nexus cat /nexusData/admin.password

    复制输出的字符串,即为初始密码。

  3. 访问与登录:
    浏览器输入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性能不足。
  • 优化方案:
    1. 调大JVM堆内存,建议最小2G,优先保证-Xmx不超过NAS可用内存的50%。
    2. 关闭Nexus非必要的插件:登录后进入设置-系统-插件,禁用不用的仓库类型插件(如NuGet、RubyGems等)。

五、常用核心配置(私有化部署必做)

1. 配置国内代理仓库(加速依赖拉取)

以最常用的Maven、npm为例,核心逻辑是:创建代理仓库→加入仓库组→本地项目配置仓库组地址,实现内网统一加速。

Maven 阿里云代理配置

  1. 登录Nexus,进入设置-Repository-Repositories,点击Create repository
  2. 选择maven2 (proxy),填写仓库ID:maven-aliyun,名称自定义。
  3. Remote storage填写阿里云代理地址:https://maven.aliyun.com/repository/public
  4. 其他保持默认,点击Create repository保存。
  5. 找到默认的maven-public仓库组,把刚创建的maven-aliyun加入组内,调整优先级到最上方,保存即可。

npm 淘宝代理配置

  1. 同上,创建npm (proxy)仓库,ID:npm-taobao
  2. 远程地址填写:https://registry.npmmirror.com
  3. 加入默认的npm-all仓库组,调整优先级即可。

2. 外网访问配置

不建议直接将Nexus暴露到公网,优先使用飞牛OS自带的VPN远程访问、内网穿透服务;如需公网访问,建议配置HTTPS证书+域名,通过DDNS解析到公网IP,并做好防火墙IP白名单限制。

3. 数据备份

Nexus所有数据都存在/vol2/nexus_data/data目录中,直接定期备份该目录即可;也可在Nexus管理页设置-系统-Tasks中,创建定时备份任务,自动导出备份文件。


部署nexus
https://cszy.top/20250712-部署nexus/
作者
csorz
发布于
2025年7月12日
许可协议