Sonatype Nexus 运维的两大痛点
使用 Sonatype Nexus 作为 maven 私服,有两个无法避免的运维问题。
一个是为了避免单点故障,要做服务及数据备份,比如:跨机房备份。
另一个是随着时间的推移,数据量不断增大,磁盘空间会逐渐变得不足,每次在面对这个问题的时候,不得不申请一个磁盘更大的服务器,然后做服务和数据的迁移。
于是想着有没有好的方式解决存储的问题呢?
答案是不使用本地存储,使用对象存储,对象存储有着无限的存储空间,让你再也没有磁盘空间不足的困扰。
Sonatype Nexus 2 只支持本地存储,Sonatype Nexus 3 从3.12版本开始,blob store 除了支持本地存储外,还支持 S3。
其中,Amazon S3 是 AWS 提供的对象存储服务,经过多年的发展,S3 协议在对象存储行业事实上已经成为标准。
同时,与 Sonatype Nexus 2 相比,Sonatype Nexus 3 的存储格式也发生了变化。
其他国外云厂商,对于 Google Cloud 和 Azure Cloud 的对象存储,GitHub 上有单独的 Sonatype Nexus 3 开源插件支持。
而对于国内的云厂商,在 GitHub 上并没有找到对应的 Sonatype Nexus 3 插件。
那么,如果想要使用国内的替代方案,那它必须与 AWS S3 兼容,或者需要写一个 Sonatype Nexus 3 的插件。
国内尝试了不同云厂商的对象存储服务:腾讯云对象存储 COS、百度云对象存储 BOS、阿里云对象存储 OSS。
只有使用腾讯云的对象存储 COS 才能在 Sonatype Nexus3 上成功创建 blob store,其他的皆以失败告终。
下面使用腾讯云 COS 创建 blob store,并验证 Sonatype Nexus 3 基本功能是否正常,步骤如下:
docker 的出现简化了应用的安装,使用 docker 安装 nexus3 只需两步:
mkdir ~/Desktop/nexus-data
docker run -d -p 8081:8081 --name nexus -v ~/Desktop/nexus-data:/nexus-data sonatype/nexus3
登陆腾讯云,在控制台创建一个 Bucket
往刚才创建的仓库上传了一个组件,在 UI 上可以正常浏览,并可以看到 blob store 的数据统计信息。
查看腾讯云 COS 存储桶中的内容,截图如下:
Dockerized version of Nexus Repo Manager 3
https://github.com/sonatype/docker-nexus3
Nexus Repository 3.12: Support for S3 Blob Stores
https://blog.sonatype.com/nexus-repository-3.12-support-for-s3-blob-stores
Nexus Repository Manager Blobstore backed by Google Cloud Storage
https://github.com/sonatype-nexus-community/nexus-blobstore-google-cloud
Nexus Repository Manager Blobstore backed by Azure Blob Cloud Storage
https://github.com/sonatype-nexus-community/nexus-blobstore-azure-cloud
在兼容 S3 的第三方应用中使用 COS 的通用配置