起因
昨天修改了 docker compose 文件中的镜像版本,直接更新镜像后,等了 15 分钟打开网页还是 502 Bad Gateway,于是又来折腾一番。
错误
docker 从 3.70.x 及以下版本升级 3.71.x 及以上版本出现旧数据库不支持错误
使用 docker compose logs nexus
查看出现报错,需要将 OrientDB
数据迁移到 H2
或 PostgreSQL
数据库。
-------------------------------------------------------------------------------------------------------------------------
This instance is using a legacy Orient database.
You must migrate to H2 or PostgreSQL before upgrading to this version. See our database migration help documentation at:
https://links.sonatype.com/products/nxrm3/docs/unsupported-db.
-------------------------------------------------------------------------------------------------------------------------
启动支持 OrientDB
的最后版本
services:
nexus:
image: sonatype/nexus3:3.70.2 # https://hub.docker.com/r/sonatype/nexus3/tags
restart: always
container_name: nexus
hostname: nexus
user: nexus
environment:
- INSTALL4J_ADD_VM_PARAMS=-Xms16g -Xmx16g -XX:MaxDirectMemorySize=28672M -Djava.util.prefs.userRoot=/nexus-data/javaprefs # 这里根据自己的配置修改内存大小
- NEXUS_CONTEXT=/
ports:
- '8081:8081'
volumes:
- /etc/localtime:/etc/localtime:ro
- ./mnt/nexus-data:/nexus-data
networks:
default:
name: home-server # 确保已创建这个网络
external: true # 使用外部网络
执行 docker compose up -d
启动 nexus
应用。
创建 nexus
备份文件
进行数据迁移
注意:根据大佬的提醒,下面步骤中下载的
https://download.sonatype.com/nexus/nxrm3-migrator/nexus-db-migrator-<version版本号>.jar
要符合自己镜像的版本。jar 的下载页面为 3.70.x Downloads (for OrientDB)
提醒
# 1. 进入容器
docker compose exec -it nexus /bin/bash
# 2. 停止 nexus 服务
/opt/sonatype/nexus/bin/nexus stop
# 3. 进入备份文件夹
cd /nexus-data/backup/
# 4. 查看备份的文件
ls -ahl
# 5. 下载迁移工具,这里如果无法使用 curl 直接下载,建议在良好的网络环境下下载好文件后,把文件复制到 docker 容器中的 /nexus-data/backup 文件夹中
curl -s -L -O https://download.sonatype.com/nexus/nxrm3-migrator/nexus-db-migrator-3.70.2-01.jar
# 6. 将数据迁移到 `H2` 数据库。(如果内存不够可以将16G修改到合适大小)
java -Xmx16G -Xms16G -XX:+UseG1GC -XX:MaxDirectMemorySize=28672M -jar nexus-db-migrator-3.70.2-01.jar --migration_type=h2
# 7. 停止 nexus 服务
/opt/sonatype/nexus/bin/nexus stop
# 8. 查看迁移的数据文件
ls -ahl nexus.mv.db
# 9. 将迁移的数据文件复制到 `db` 文件夹中
cp nexus.mv.db /nexus-data/db
# 10. 退出容器
exit
修改 nexus
使用 H2
数据库
# 1. 删除容器
docker compose down
# 2. 修改打开 H2 数据库
vi ./mnt/nexus-data/etc/nexus.properties
# 在文件中添加一行,:wq 保存并退出
nexus.datastore.enabled=true
# 3. 重新创建容器
docker compose up -d
# 4. 查看 H2 数据库正确启动
docker compose logs nexus | grep H2
# 控制台输出
nexus | 2024-09-21 00:00:00,000+0000 INFO [FelixStartLevel] *SYSTEM org.sonatype.nexus.datastore.DataStoreConfigurationDefaultSource - Loaded 'nexus' data store configuration defaults (Embedded H2)
nexus | 2024-09-21 00:00:00,000+0000 INFO [FelixStartLevel] *SYSTEM org.sonatype.nexus.datastore.mybatis.MyBatisDataStore - nexus - MyBatis databaseId: H2
切换 nexus
到 3.72.0 版本
services:
nexus:
image: sonatype/nexus3:3.72.0 # https://hub.docker.com/r/sonatype/nexus3/tags
restart: always
container_name: nexus
hostname: nexus
user: nexus
environment:
- INSTALL4J_ADD_VM_PARAMS=-Xms16g -Xmx16g -XX:MaxDirectMemorySize=28672M -Djava.util.prefs.userRoot=/nexus-data/javaprefs # 这里根据自己的配置修改内存大小
- NEXUS_CONTEXT=/
ports:
- '8081:8081'
volumes:
- /etc/localtime:/etc/localtime:ro
- ./mnt/nexus-data:/nexus-data
networks:
default:
name: home-server # 确保已创建这个网络
external: true # 使用外部网络
docker compose up -d
创建容器