前言
雖然nexus支持使用ceph作為Blobstore,但實際配置過程中還是會有不少的坑。主要是大多數文檔以S3作為例子,而忽略了對接ceph時會存在一些特殊的情況。
版本
Nexus OSS 3.16.2-01
Ceph Luminous 12.2.12
配置
具體配置情況如下,請注意紅色框框部分:
配置1
配置2
上面的配置有兩點需要注意:
- endpoint需要添加ip訪問方式,不然默認的情況下,會使用子域名。當然如果你配置了子域名的情況,忽略這里的提醒。
-
Ceph Luminous版本目前是不支持S3的Lifecycle模式的,因此這里需要設置為-1。否則會導致s3 plugin在同步 lifecycle 配置的時候失敗,nexus啟動不起來。報錯可能如:
Lifecycle同步失敗報錯
不小心配置錯了
加入你不小心配置錯了(例如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 即可。