Docker 数据迁移

本指南将帮助你将旧 Docker 上运行的 PagePlug 实例迁移到新 Docker上。

假设您当前的 PagePlug 实例位于文件夹~/pageplug-old中,并且您希望新设置位于~/pageplug-new。(这只是示例文件夹名称,请使用您喜欢的名称。)

首先,我们可以看到如下的老版文件夹结构~/pageplug-old

~/pageplug-old
├── data
│   ├── certbot
│   │   ├── conf
│   │   └── www
│   ├── mongo
│   │   ├── db
│   │   └── init.js
│   └── nginx
│       └── app.conf.template
├── docker-compose.yml
├── docker.env
└── encryption.env

然后,在迁移步骤完成后的新版文件夹~/pageplug-new结构如下:

~/pageplug-new
├── docker-compose.yml
└── stacks
    ├── configuration
    │   ├── docker.env
    │   └── mongo-init.js
    ├── data
    │   ├── backup
    │   ├── certificate
    │   ├── mongodb
    │   └── restore
    └── letsencrypt
        ├── accounts
        ├── archive
        ├── conf
        ├── csr
        ├── keys
        ├── live
        ├── options-ssl-nginx.conf
        ├── renewal
        ├── renewal-hooks
        ├── ssl-dhparams.pem
        └── www

接下来,让我们开始其中所需要执行的步骤!

1. 关闭旧的 PagePlug 实例

注意!您在继续之前请了解以下几项事项:

  • 整个迁移过程应该在 25-30 分钟内完成,通常少于这个时间。

  • 当前登录的所有用户都将被注销。一旦新实例启动并运行良好,他们就可以重新登录。

  • 根据您的配置,以下任何docker-compose命令docker可能需要sudo在开始时使用 a 运行。

  • 请检查命令的输出以查看是否有任何错误,在运行命令之后以及继续执行下一步之前。

让我们首先定义几个在迁移过程中有用的变量。请使用适当的路径代替~/pageplug-old~/pageplug-new

old_path=~/pageplug-old
new_path=~/pageplug-new

在我们开始迁移之前,请使用以下命令停止旧服务器:

cd "$old_path"
docker-compose stop appsmith-internal-server

2. 导出数据库

要从正在运行的MongoDB数据库中导出数据,我们使用mongodump命令,它将创建一个gzip包含所有数据的存档。然后,此文件将被复制到新设置并导入。

创建备份文件夹以存储转储文件:

cd "$old_path"
docker-compose exec mongo mkdir -pv /data/db/backup

转储 MongoDB 数据并压缩成 gzip 文件:

docker-compose exec mongo sh -c 'mongodump --uri="$APPSMITH_MONGODB_URI" --archive=/data/db/backup/appsmith-data.archive --gzip'

3. 迁移配置

新设置使用单个docker.env文件进行所有环境变量配置。

让我们创建所需的文件夹结构:

mkdir -pv "$new_path"/stacks/configuration

从旧位置迁移配置:

cat "$old_path"/docker.env "$old_path"/encryption.env >> "$new_path"/stacks/configuration/docker.env

现在,请检查如下文件 "$new_path"/stacks/configuration/docker.env:

  • 在默认情况(没有使用外部的 MongoDB 数据库),修改APPSMITH_MONGODB_URI

    ,把@mongo修改为@localhost, 然后删除查询参数(?以后的所有内容)。举例,当前值为mongodb://root:rootpass@mongo/appsmith?retryWrites=true&authSource=admin, 将其改为mongodb://root:rootpass@localhost/appsmith.

  • 在默认情况下(没有使用外部 Redis 实例)在APPSMITH_REDIS_URL中更改redis://redis:6379redis://localhost:6379. 即把主机从redis 更改为 localhost.

在这个docker.env文件的最后,让我们添加以下新的环境变量:

APPSMITH_MONGODB_USER=<Your MongoDB User>
APPSMITH_MONGODB_PASSWORD=<Your MongoDB Password>
APPSMITH_API_BASE_URL=http://localhost:8080

<Your MongoDB User><Your MongoDB Password>, 这里,请使用与APPSMITH_MONGODB_URI上面相同的用户名和密码。在上面的示例值中,用户是root,密码是rootpass

4. 导出 https 配置和证书(可选)

如果你没有将自定义域与 pageplug 实例一起使用,请跳过此步骤。

如果您的docker.env中尚未配置APPSMITH_CUSTOM_DOMAIN,请添加如下行

echo APPSMITH_CUSTOM_DOMAIN=appsmith.mycustomdomain.com >> "$new_path"/stacks/configuration/docker.env

还可以通过运行以下命令将证书移动到新容器:

mkdir -pv "$new_path"/stacks/letsencrypt
sudo cp -rfv "$old_path"/data/certbot/conf/* "$new_path"/stacks/letsencrypt

5. 使用 Fat 容器设置新的 Appsmith

现在,让我们将旧的实例全部关闭:

docker-compose --file "$old_path"/docker-compose.yml down

按照官方指南在 Docker Compose Configuration 部署新的 PagePlug:

cd "$new_path"
curl -L https://bit.ly/32jBNin -o docker-compose.yml
docker-compose up -d

请注意,你必须在 "$new_path"文件夹中创建一个新的docker-compose.yml,就像上面的 curl命令一样,不要从"$old_path"中复制它。

6. 导入数据库

新部署启动后(通常需要大约30秒),我们将导入从旧实例导出的数据:

创建文件夹以复制存档文件:

mkdir -pv "$new_path"/stacks/data/restore

复制存档文件:

cp "$old_path"/data/mongo/db/backup/appsmith-data.archive "$new_path"/stacks/data/restore/

从此存档导入数据:

docker-compose exec appsmith appsmithctl import_db

请注意,你将看到一个提问:Importing this DB will erase this data. Are you sure you want to proceed,这是提示你导入此数据库将删除此数据,这是你选择y是安全的,因为新设置中的新数据库仅包含初始数据,是可以被安全的覆盖的。

成功后,我们就可以启动我们的新实例了!

7. 验证迁移

导航到你的 pageplug 实例,无论是使用 IP 地址还是自定义域,并验证你的 pageplug 实例是否正常工作,并且你的所有数据都完好无损。

Last updated