> For the complete documentation index, see [llms.txt](https://appsmithcns-organization.gitbook.io/pageplug-wen-dang/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://appsmithcns-organization.gitbook.io/pageplug-wen-dang/ben-di-bu-shu/docker-shu-ju-qian-yi.md).

# 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:6379`为`redis://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](broken://pages/zTn2lYD8mdlZWrvgnDpc#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 实例是否正常工作，并且你的所有数据都完好无损。
