谢谢 @Falco,非常感谢!整个过程非常顺利 ![]()
我迁移到了新服务器,看来其实留在原服务器也没问题。
以防其他人日后需要参考,以下是更详细的步骤(注意:我的 S3 设置仅按照此处的说明写在 app.yml 文件中,管理后台设置中未做任何自定义):
-
在源站点上,如果不是回滚操作,请启用“禁用邮件”(可能并非必需)并开启只读模式(记得在迁移完成后在新实例上重新关闭这些设置)。创建备份,完成后可以考虑停止旧实例(./launcher stop app)。无论是否回滚,都请更新 DNS A 记录,将其指向新服务器的 IP。你可以用更优雅的方式或顺序来最小化停机时间,但在我的案例中(回滚操作,论坛尚未上线),停机时间并非问题。
-
在新服务器上安装 Discourse,并将 app.yml 中的所有自定义配置(包括 S3 设置)迁移过去,确保 Discourse 版本相同或非常接近。
-
注释掉以下两条记录(app.yml 中的其他 S3 设置可保持不变):
DISCOURSE_S3_BACKUP_BUCKET: BucketName
DISCOURSE_BACKUP_LOCATION: s3 -
手动从 S3 或兼容 S3 的服务下载所需的备份文件。
-
导航到 /var/discourse/shared/standalone/backups,如果不存在则创建一个名为 ‘default’ 的新文件夹(如果是新安装,该文件夹默认不存在)。然后,在 backups 目录下运行以下命令(这将更改文件夹权限以匹配 Discourse 创建本地备份时通常拥有的权限——不确定是否必需):
chown -R 1000:www-data default -
使用 SFTP 客户端将备份文件上传到 backups/default 文件夹,请勿重命名备份文件。
-
重建应用:
cd /var/discourse
./launcher rebuild app -
进入应用,启用备份恢复功能并执行恢复(重命名为 BackupFileName.tar.gz):
./launcher enter app
discourse enable_restore
discourse restore BackupFileName.tar.gz
-
完成后,取消注释步骤 2 中 app.yml 里的两条 S3 备份文件相关行,并重建应用。
-
你可以删除本地的 backups/default 文件夹及其包含的备份文件(/var/discourse/shared/standalone/backups)。
参考: