Nexus 使用阿里云对象储存 OSS

版本说明

  1. 3.87.0(含)开始,Nexus 不支持使用 阿里云对象储存 OSS。原因是 Nexus 使用了 AWS S3 增加了 x-amz-content-sha256
    An error occurred saving data. ValidationErrorXO{id='*', message='aws-chunked encoding is not supported with the specified x-amz-content-sha256 value. (Service: S3, Status Code: 400, Request ID: 6A248419FE8E013034A7B0FB) (SDK Attempt Count: 1)'}
    
  2. 最高支持 阿里云对象储存 OSS 的 Nexus 版本是 3.86.3
  3. Alibaba Cloud OSS Incompatibility — `aws-chunked encoding is not supported` Since Nexus 3.87.0 · Issue #1012 · sonatype/nexus-public · GitHub
  4. Sonatype Nexus Repository 3.87.0 - 3.87.2 发布说明
  5. AWS SDK Java 1.x:S3:已于 2025 年 12 月 31 日停止维护
  6. AWS SDK Java 2.x:S3
  7. 解决分片上传时因aws-chunked与x-amz-content-sha256值不兼容导致的0017-00000804错误-对象存储-阿里云
  8. AWS SDK Java 1.x → 2.x 迁移及阿里云 OSS 兼容性问题 · Issue #586 · aliyun/aliyun-oss-java-sdk · GitHub

使用 docker compose 部署

  • 数据储存在 /srv/nexus/nexus-data 文件夹中

  • 数据文件夹 /srv/nexus/nexus-data 需要授权 200,见:docker-nexus3/Dockerfile at main · sonatype/docker-nexus3 · GitHub

    mkdir -p /srv/nexus/nexus-data
    chown -R 200 /srv/nexus/nexus-data
    
  • docker-compose.yml

    services:
      nexus:
        image: 'sonatype/nexus3:${VERSION:-3.86.3}'
        restart: always
        ports:
          - '48081:8081'
        volumes:
          - '/srv/nexus/nexus-data:/nexus-data'
        container_name: nexus
    
  • 部署命令

    docker compose up -d
    

默认密码

  • 默认用户名:admin
  • 默认密码储存在 /srv/nexus/nexus-data/admin.password 文件中
    cat admin.password && echo
    

配置阿里云对象存储

  • Bucket 名称:xuxiaowei-nexus-test
  • 地域:华北1(青岛)
  • Endpoint:oss-cn-qingdao.aliyuncs.com
  • 注意:Nexus 要求不同的 Blob Stores 不能使用同一个 Bucket

进入设置

创建储存

选择 S3

S3 信息填写说明

  • NameNexus 显示的名字,没有特殊要求,唯一即可。用于创建仓库时选择使用。
  • Region区域,不能为空,可固定选择 us-east-1
  • Bucket在阿里云对象储存 OSS 中的 Bucket Name,同样也会在 Bucket 中创建一个和 Bucket Name 一样名字的文件夹,不能为空,效果:https://Bucket.Endpoint/Bucket
  • Prefix此处的效果是 Bucket 根目录下与 Bucket Name 同名目录下的目录,可为空,效果:https://Bucket.Endpoint/Bucket/Prefix
  • Access Key ID密钥 ID
  • Secret Access Key密钥 凭证
  • Endpoint URL填写 https://Bucket.Endpoint
  • Use path-style access✅ 勾选

示例1

  • NameA1
  • Regionus-east-1
  • Bucketxuxiaowei-nexus-test
  • Prefix(空)
  • Access Key ID密钥 ID
  • Secret Access Key密钥 凭证
  • Endpoint URLhttps://xuxiaowei-nexus-test.oss-cn-qingdao.aliyuncs.com
  • Use path-style access✅ 勾选

示例2

  • NameA2
  • Regionus-east-1
  • Bucketxuxiaowei-nexus-test
  • Prefix/s3-path-prefix
  • Access Key ID密钥 ID
  • Secret Access Key密钥 凭证
  • Endpoint URLhttps://xuxiaowei-nexus-test.oss-cn-qingdao.aliyuncs.com
  • Use path-style access✅ 勾选
  • 注意:Nexus 要求不同的 Blob Stores 不能使用同一个 Bucket

你好,我是从 github 的 issue 看到的,因为我们开发了一个可以平替 Nexus 的软件,代码完全开源,也支持一键从 Nexus 迁移到 nexus-plus ,且我们已经在生产环境运行很久了。想调研下,因为 Nexus 的开源免费功能部分限制的越来越多的情况下,是否有兴趣切到 nexus-plus 来。附项目地址:GitHub - klboke/nexus-plus: Nexus-compatible self-hosted artifact repository · GitHub

感谢分享,后面试一下

@klboke 我自己使用 spring-cloud-gateway 做了一个简单的 产物网关 artifact-gateway:基于 spring-cloud-gateway,支持 OAuth2 authorization_code、Basic 等协议 ,直接对接阿里云的对象储存,还方便控制权限