Fork me on GitHub

nocobase部署笔记

我用docker运行了nocobase,并配置了系统,现在我想将该修改后的系统通过docker部署到云服务器上,是否需要打镜像?该如何操作?

以下是ChatGPT的回答,其中方法二我已经验证可行。

你已经在本地通过 Docker 运行并配置了 NocoBase,现在希望将当前的系统状态(包括配置、插件、数据等)迁移并部署到云服务器上,这可以通过以下两种方式实现:


✅ 方法一:打包为镜像,部署到云服务器(适合可复制部署)

🧠 适合场景

你希望将本地环境“打包”成一个镜像,在其他服务器上直接部署成一样的系统,且不会频繁变动。

📦 步骤如下:

1. 找到你当前容器运行的数据挂载方式

你可能是用 docker rundocker-compose 启动的,需要确认数据是否保存在容器内部还是挂载到本地卷中。

1
docker inspect <你的容器名或ID>

查看 Mounts 部分,如果是本地挂载的目录(bind mount 或 volume),则需要把这些数据一起打包。


2. 提取当前容器状态并打包为镜像

1
docker commit <正在运行的容器ID> my-nocobase-image:v1

这个命令会把当前容器的文件系统“快照”成一个新的镜像。


3. 将镜像保存为文件(可传输)

1
docker save -o my-nocobase-image.tar my-nocobase-image:v1

my-nocobase-image.tar 拷贝(用 scp 或 rsync)到你的云服务器。


4. 在云服务器导入并运行

1
2
docker load -i my-nocobase-image.tar
docker run -d -p 8000:80 my-nocobase-image:v1

根据你的配置调整端口、挂载路径或环境变量。


✅ 方法二:打包数据+配置,使用官方镜像重建(适合持续更新)

🧠 适合场景

你使用的是官方 NocoBase 镜像,只是更改了配置(比如添加插件、修改数据等),不希望打包镜像,只想备份数据并迁移。


步骤:

前提:

  1. 该项目有两个容器,镜像为:nocobase和mysql。故,项目迁移到云服务器时,需要同时迁移 应用镜像 + 数据库数据,推荐备份数据+docker compose部署。

  2. 执行docker inspect container-name后,发现Mounts中使用了bind 挂载。故,NocoBase 项目中有一部分关键数据(如上传文件、缓存、插件存储等)存放在本地挂载目录中,并不会包含在 docker commit 镜像中。

1
2
3
4
5
6
7
8
9
10
"Mounts": [
{
"Type": "bind",
"Source": "/Users/colinlee/Documents/software/xc_project/storage",
"Destination": "/app/nocobase/storage",
"Mode": "rw",
"RW": true,
"Propagation": "rprivate"
}
]

本地目录:/Users/colinlee/Documents/software/xc_project/storage

容器内路径:/app/nocobase/storage

本地需要的文件

  1. docker-compose.yml
  2. mysql_backup.sql
  3. storage/文件夹

操作步骤

  1. 备份数据库
1
docker exec -i mysql-1 mysqldump -uroot -p'yourpassword' --all-databases > mysql_backup.sql
  1. 复制本地挂载目录
1
cp -r /Users/colinlee/Documents/software/xc_project/storage .
  1. 上传所有文件到云服务器
1
scp -r docker-compose.yml mysql_backup.sql storage/ user@your-server-ip:/home/user/nocobase-deploy/
  1. 在云服务器运行容器
1
2
cd /home/user/nocobase-deploy/
docker compose up -d
  1. 还原 MySQL 数据库
1
docker exec -i mysql-1 mysql -uroot -p'yourpassword' < mysql_backup.sql

docker-compose.yml

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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
networks:
nocobase:
driver: bridge

services:
mysql:
image: mysql:8.0
restart: always
networks:
- nocobase
environment:
MYSQL_ROOT_PASSWORD: XXXXXXXXXXXXXXXXXX
MYSQL_DATABASE: nocobase
MYSQL_USER: nocobase
MYSQL_PASSWORD: XXXXXXXXXXXXXXXXX
ports:
- "3306:3306"
volumes:
- mysql_data:/var/lib/mysql

app:
image: registry.cn-shanghai.aliyuncs.com/nocobase/nocobase:latest
restart: always
networks:
- nocobase
depends_on:
- mysql
environment:
- APP_KEY=XXXXXXXXXXXXXXXXXXXXXXXX
- DB_DIALECT=mysql
- DB_HOST=mysql
- DB_DATABASE=nocobase
- DB_USER=nocobase
- DB_PASSWORD=XXXXXXXXXXXXXXXXX
- DB_UNDERSCORED=true
- TZ=Asia/Shanghai
- NOCOBASE_PKG_USERNAME=
- NOCOBASE_PKG_PASSWORD=
volumes:
- ./storage:/app/nocobase/storage
ports:
- "13000:80"

volumes:
mysql_data:

✅ 总结对比

方式 是否打镜像 优点 缺点
方法一:打包镜像 简单快速、完全保留现场 镜像大,不便频繁更新
方法二:迁移数据 更灵活、便于版本管理 需要理解 NocoBase 的数据存储结构

你可以根据实际需要选择方式。如果你是初次部署,推荐用方法二(数据迁移+官方镜像),更便于未来维护。如果你已经本地装了很多插件、改了很多文件,不方便复现,就选方法一。


CentOS上安装docker

官方仓库安装

在 CentOS 上安装 Docker 的步骤如下:

  1. 更新系统

    1
    sudo yum update -y
  2. 安装必要的依赖

    1
    sudo yum install -y yum-utils device-mapper-persistent-data lvm2
  3. 添加 Docker 仓库

    1
    sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
  4. 安装 Docker

    1
    sudo yum install -y docker-ce docker-ce-cli containerd.io
  5. 启动并启用 Docker 服务

    1
    2
    sudo systemctl start docker
    sudo systemctl enable docker
  6. 验证安装

    1
    docker --version
  7. (可选)允许非 root 用户运行 Docker

    1
    sudo usermod -aG docker $USER

    注销并重新登录以应用权限。

2. 安装必要的依赖时可能遇到报错:Error: Failed to download metadata for repo ‘appstream’

表明无法解析 mirrorlist.centos.org,可能是网络问题或 CentOS 8 仓库已停止维护,可以使用阿里云镜像

  • 备份仓库配置:
1
sudo mv /etc/yum.repos.d/CentOS-Linux-AppStream.repo /etc/yum.repos.d/CentOS-Linux-AppStream.repo.bak
  • 创建新的 AppStream 仓库文件:
1
sudo vi /etc/yum.repos.d/CentOS-Linux-AppStream.repo
  • 添加:
1
2
3
4
5
6
[appstream] 
name=CentOS-8 - AppStream
baseurl=http://mirrors.aliyun.com/centos/8/AppStream/x86_64/os/
gpgcheck=1
enabled=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-8
  • 清理并更新缓存:
1
2
sudo yum clean all 
sudo yum makecache

2-1. 安装必要的依赖时可能遇到报错:Error: Failed to download metadata for repo ‘baseos’:

报错显示 baseos 仓库仍然尝试访问已停止维护的 mirrorlist.centos.org,导致无法下载元数据。AppStream 仓库已成功切换,但 BaseOS 仓库仍需修复。可以使用阿里云镜像

  • 备份现有 BaseOS 仓库配置:

    sudo mv /etc/yum.repos.d/CentOS-Linux-BaseOS.repo /etc/yum.repos.d/CentOS-Linux-BaseOS.repo.bak

  • 创建新的 BaseOS 仓库文件:

    sudo vi /etc/yum.repos.d/CentOS-Linux-BaseOS.repo

    添加:

    1
    2
    3
    4
    5
    6
    [baseos]
    name=CentOS-8 - BaseOS
    baseurl=http://mirrors.aliyun.com/centos/8/BaseOS/x86_64/os/
    gpgcheck=1
    enabled=1
    gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-8
  • 清理并更新缓存

    1
    2
    sudo yum clean all 
    sudo yum makecache

2-2. 安装必要的依赖时可能遇到报错:Error: Failed to download metadata for repo ‘extras’:

报错表明 BaseOS 和 AppStream 仓库已成功切换到阿里云镜像,但 extras 仓库仍然指向已停止维护的 mirrorlist.centos.org,导致元数据下载失败。需要更新 extras 仓库的配置。可以使用阿里云镜像

  • 备份现有 BaseOS 仓库配置:

    1
    sudo mv /etc/yum.repos.d/CentOS-Linux-Extras.repo /etc/yum.repos.d/CentOS-Linux-Extras.repo.bak
  • 创建新的 BaseOS 仓库文件:

    1
    sudo vi /etc/yum.repos.d/CentOS-Linux-Extras.repo

    添加:

    1
    2
    3
    4
    5
    6
    [extras]
    name=CentOS-8 - Extras
    baseurl=http://mirrors.aliyun.com/centos/8/extras/x86_64/os/
    gpgcheck=1
    enabled=1
    gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-8
  • 清理并更新缓存

    1
    2
    sudo yum clean all 
    sudo yum makecache

3. 重试安装命令

修复仓库后,重新运行以下命令,也可以回到第二步骤:

1
sudo yum install -y yum-utils device-mapper-persistent-data lvm2

4. 后续安装 Docker

如果以上步骤成功,继续安装 Docker:

1
2
3
4
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sudo yum install -y docker-ce docker-ce-cli containerd.io
sudo systemctl start docker
sudo systemctl enable docker

5. 更换 Docker 镜像源

如果 Docker Hub 访问受限(例如在中国大陆可能因网络限制导致),可以配置国内镜像源(如阿里云、华为云)加速拉取镜像。

  • 配置阿里云镜像源
  • 编辑 Docker 配置文件

    1
    sudo mkdir -p /etc/docker sudo vi /etc/docker/daemon.json
  • 添加以下内容(替换your-aliyun-id为你的阿里云账号 ID 或使用公共镜像地址)

1
2
3
4
5
6
7
{
"registry-mirrors": [
"https://registry.cn-hangzhou.aliyuncs.com",
"https://docker.m.daocloud.io",
"https://mirror.ccs.tencentyun.com"
]
}
-------------The End-------------