S3 迁移
这些说明适用于 v5.x 及更高版本。如果你在较早版本上按照本指南操作,请在路径名中使用
sharelatex 代替 overleaf,并在环境变量中使用 SHARELATEX_ 前缀代替 OVERLEAF_。对于 v6 及更高版本,请跳过旧版 user_files 相关命令。我们很期待你的反馈! 如果你愿意与我们分享你迁移了多少文件、总容量以及迁移耗时,请发送邮件至
ayaka-notes@outlook.com。要求
- 一个可供连接的 S3 兼容对象存储,可选方案请参见 #s3-setup
- 用于迁移现有数据的可用磁盘空间,大小约等于当前磁盘占用量
- 一个用于实际执行迁移的维护窗口
- 一份完整备份(包括配置),以便能够从中恢复
估算迁移所需的磁盘空间
我们可以使用du 计算当前的磁盘使用量:
history 目录已经具有正确的布局。你可以直接从绑定挂载的源文件夹上传,无需任何额外的磁盘空间。
迁移步骤
步骤 0:关闭实例
我们需要确保所有用户/模板文件都会被迁移。最好关闭实例,以免遗漏新上传的文件。 关闭流程请参阅我们关于执行一致性备份的指南。步骤 1:重写目录布局
为了将项目文件上传到 S3,我们需要重写其目录布局。filestore 中本地存储的目录布局为<project-id>_<file-id>,而 S3 中的目录布局为 <project-id>/<file-id>。
下文中使用 /srv/overleaf-s3-migration 来存储采用新目录布局的文件。请将 /srv/overleaf-bind-mount 替换为挂载到 /var/lib/overleaf 的主机目录。请在主机上以具有这些目录读写权限的身份运行复制命令;容器保持停止状态。
我们可以利用 tar 来重写布局:
步骤 2:上传文件
根据你的偏好,可以使用 minio mc S3 客户端或 aws cli 将文件上传到 S3 兼容对象存储。 aws cli- 此处你应将
overleaf-user-files、overleaf-template-files、overleaf-project-blobs和overleaf-chunks替换为你的 S3 存储桶名称。 - 同时将
/srv/overleaf-bind-mount替换为/var/lib/overleaf绑定挂载的本地路径。默认情况下,在 docker-compose.yml 部署中为~/overleaf_data,使用 Toolkit 时为<toolkit-checkout>/data/overleaf。
步骤 3:启动指向 S3 的实例
按照 S3 设置指南中变量概览一节的说明,将所有 S3 相关变量添加到你的配置中。 请保留数据目录的绑定挂载:其中可能还包含不会迁移到 S3 的 Zotero 或 Mendeley 加密密钥。请保留用于临时文件的暂存磁盘绑定挂载。
- 可以在编辑器中预览二进制文件
- 可以编译包含图片的 PDF
- 可以上传新文件
回滚
你可以通过反向执行各步骤来平稳地回滚迁移:- 关闭实例
- 交换源/目标的顺序,将文件镜像回来
- 使用反向的
transform将新文件写回本地目录 - 使用旧配置重新启动实例
第一个 transform 移除顶层文件夹。第二个 transform 将目录布局改为扁平结构。通配符确保只提取文件,而不提取其父(项目)文件夹。

