前言
虽然nexus支持使用ceph作为Blobstore,但实际配置过程中还是会有不少的坑。主要是大多数文档以S3作为例子,而忽略了对接ceph时会存在一些特殊的情况。
版本
Nexus OSS 3.16.2-01
Ceph Luminous 12.2.12
配置
具体配置情况如下,请注意红色框框部分:
上面的配置有两点需要注意:
- endpoint需要添加ip访问方式,不然默认的情况下,会使用子域名。当然如果你配置了子域名的情况,忽略这里的提醒。
-
Ceph Luminous版本目前是不支持S3的Lifecycle模式的,因此这里需要设置为-1。否则会导致s3 plugin在同步 lifecycle 配置的时候失败,nexus启动不起来。报错可能如:
不小心配置错了
加入你不小心配置错了(例如Ceph不支持子域名,endpoint却填了域名形式的endpoint),并保存了。在没有重启前,一切正常,只是配置了的Blobstore不能用。但是一旦Nexus停掉,就再也起不来了。因为Nexus在初始化错误的Blobstore时,总是报错,初始化失败,从而导致启动失败。
这时候就需要手动干预,从数据库层面删掉错误的配置。Nexus底层用的时Orientdb,具体操作如下:
操作
-
报错日志如下:
- 启动 orientdb console
# 先进入安装目录
java -jar ./lib/support/nexus-orient-console.jar
- 连接相关的 database
# 后面是默认的账号密码
connect plocal:/数据目录/nexus/sonatype-work-latest/nexus3/db/config admin admin
- 强制删除 s3 blobstore 相关的记录
delete from repository_blobstore where type = 'S3'
Lifecycle配置错误怎么办
跟上面的类似,也是直接修改Orientdb
- 先禁掉 s3 blob 中的过期配置:
update repository_blobstore set attributes.s3.expiration = -1 where name = 'ceph-blob'
- 然后再去掉 ceph 中的 lifecycle 配置
s3cmd dellifecycle s3://nexus-blob
- 启动 nexus 即可。