最近因为服务器环境调整,需要把 MCSManager 上的 Minecraft 服务器迁移到新实例。这里记录一下整个备份和恢复的过程,方便以后参考。
备份数据
首先,进入 MCSManager 的工作目录,找到实例数据所在的文件夹。一般来说,数据存放在 daemon/data/InstanceData/ 下,每个实例都有一个独立的 ID 文件夹。
备份的时候,建议把一些可以重新生成的文件排除掉,比如 BlueMap 的渲染数据。这样可以减小备份体积,恢复时重新生成就好了。
1
2
3
4
5
| ## 切换到工作目录
cd daemon/data/InstanceData/
## 备份数据,排除掉bluemap文件夹(蓝图目录可以重新生成)
tar --exclude='9a527602eda447f185a8b85a905ba880/bluemap' -czvf mc1.21.0-20260614-1748.tar.gz 9a527602eda447f185a8b85a905ba880
|
用 Docker Compose 来部署是最省心的方式,直接用官方镜像即可:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
| services:
web:
container_name: mc-web
image: githubyumao/mcsmanager-web:v10.16.2
restart: unless-stopped
ports:
- "23333:23333"
volumes:
- /etc/localtime:/etc/localtime:ro
- ./web/data:/opt/mcsmanager/web/data
- ./web/logs:/opt/mcsmanager/web/logs
daemon:
container_name: mc-daemon
image: githubyumao/mcsmanager-daemon:v10.16.2
restart: unless-stopped
ports:
- "24444:24444"
environment:
# 这里要改成你实际的 compose 文件目录
MCSM_DOCKER_WORKSPACE_PATH: ${实际compose文件目录}/mcsmanager/daemon/data/InstanceData
volumes:
- /etc/localtime:/etc/localtime:ro
- ./daemon/data:/opt/mcsmanager/daemon/data
- ./daemon/logs:/opt/mcsmanager/daemon/logs
- /var/run/docker.sock:/var/run/docker.sock
|
启动之后,第一次访问会要求设置管理员账号和密码。登录后你会发现默认是没有节点的,需要手动添加。
这里有个坑:添加节点的时候,建议使用主机的内网 IP,而不是 localhost 或 127.0.0.1,否则后面可能会出现各种奇怪的连接问题。
节点的密钥可以在 daemon/data/Config/global.json 文件里找到,里面的 key 字段就是。
创建应用实例并恢复数据
节点添加完成后,需要创建一个新的应用实例:
- 进入「应用实例」→「新建应用」→「直接创建」
- 选择对应的节点
- 实例类型、启动命令、关闭命令需要和之前保持一致
以 Paper 服务端为例,启动命令大概是这样的:
1
| java -Xms128M -XX:MaxRAMPercentage=95.0 -Dfile.encoding=UTF-8 -Duser.language=zh -Duser.country=CN -jar paper-1.21-37.jar
|
接下来就是把备份的数据恢复过来:
1
2
3
4
5
6
7
8
9
| ## 切换到新的 daemon/data/InstanceData/ 目录,找到刚才创建的实例文件夹
cd daemon/data/InstanceData/
## 解压备份文件
tar -xzvf mc1.21.0-20260614-1748.tar.gz
## 把解压出来的文件夹名改成新实例的 ID
## 假设新实例 ID 是 2e8426c08602a353fdf3419968b32bd8
rm -rf 2e8426c08602a353fdf3419968b32bd8 && mv 9a527602eda447f185a8b85a905ba880 2e8426c08602a353fdf3419968b32bd8
|
构建 Docker Java 环境镜像
如果你之前的服务端是跑在 Docker 容器里的,那还需要构建对应的 Java 环境镜像。
在 MCSManager 面板中:「节点」→ 找到对应节点卡片右上角的「镜像管理」→「新增镜像」→ 选择「创建 OpenJDK17 环境镜像」。
根据你的服务端版本调整 Java 版本,Dockerfile 大致如下:
1
2
3
4
5
6
7
8
9
| # 这是 Java17 的环境镜像,其他版本改一下 FROM 那行就行,比如:FROM eclipse-temurin:21
FROM eclipse-temurin:17
RUN echo "zh_CN.UTF-8 UTF-8">/etc/locale.gen && locale-gen
ENV LANG=zh_CN.UTF-8
ENV LANGUAGE=zh_CN.UTF-8
ENV LC_ALL=zh_CN.UTF-8
ENV TZ=Asia/Shanghai
RUN mkdir -p /workspace
WORKDIR /workspace
|
创建镜像的时候,镜像名和版本标识最好也改一下,比如 mcsm-eclipse-temurin:21,这样比较好辨认。
构建完成后,点击「回到镜像列表」,多刷新几次,直到能看到新的镜像为止。
配置 Docker 容器启动
镜像准备好了,接下来就是把应用实例改成 Docker 模式启动:
- 「应用实例」→ 找到对应的实例卡片 →「应用实例设置」→「容器化」
- 按照下面的配置来设置:
- 启用 Docker 容器:打开
- 选择 Docker 配置:选择对应的 Java 版本
- 网络模式:选 host(如果只跑一个服务器的话,host 模式最省事)
- 开放端口:如果网络模式不是 host,这里需要填。25565 是游戏端口,8100 是 BlueMap 的 Web 端口,其他端口按需添加
- 容器名:建议填一个固定名称,不然每次启动都是随机名字
配置完成后,点击启动就行了。
折腾完这一套流程,服务器就顺利跑起来了。整个过程说起来步骤不少,但其实跟着操作一遍也就十几分钟的事情。主要是备份和恢复数据那块需要注意一下实例 ID 的对应关系,其他都挺顺利的。