S3 migration
Last updated
Was this helpful?
Last updated
Was this helpful?
These instructions are for v5.x and later. If you are following this guide for an earlier version please use sharelatex
instead of overleaf
in path names and SHARELATEX_
prefix instead of OVERLEAF_
for environment variables.
We'd love to hear from you! If you'd like to share with us how many files you migrated over, their overall volume, and how long the migration took emailsupport@overleaf.com
.
This guide will walk you through the migration from on-disk storage to an S3-compatible object storage. It refers to sections of the introduction document on the S3 Setup.
A S3 compatible object storage to talk to, see for options
Free disk space for migrating existing data, about the current on disk size
A maintenance window for doing the actual migration
A full backup, including the config, to enable restoring from it
We can use du
for calculating the current disk usage:
In case you do not have sufficient disk space available on the current server, try attaching another disk to the server.
The history directories already have the correct layout. You can upload directly from the bind-mounted source folder, which does not require any additional disk space.
We need to make sure that all user/template files will get migrated. It is best to shut down the instance to avoid missing newly uploaded files.
Please see our guide on performing a consistent a backup for the shutdown procedure.
We need to rewrite the directory layout of project files for uploading them to S3. The directory layout for local storage in filestore is <project-id>_<file-id>
and the directory layout in S3 is <project-id>/<file-id>
.
In the following, /srv/overleaf-s3-migration
is used for storing the files in the new directory layout.
We can make use of tar
for rewriting the layout:
Depending on your preference, you can use the minio mc S3 client or the aws cli for uploading the files to your S3 compatible object storage.
aws cli
Here you should replace overleaf-user-files
, overleaf-template-files
, overleaf-project-blobs
and overleaf-chunks
with the names of your S3 buckets.
Also replace /srv/overleaf-bind-mount
with the local path of the /var/lib/overleaf
bind-mount. By default, this is ~/overleaf_data
in a docker-compose.yml deployment and <toolkit-checkout>/data/overleaf
when using the Toolkit.
minio mc
We are using the server alias "s3" here, you may have picked another name.
Add all the S3 related variables to your config, as detailed in the Overview of variables section in the S3 setup guide.
For Docker Compose deployments, you can also remove the bind-mount for the data directory from the volumes section.
Please keep the bind-mount of a scratch disk for ephemeral files in place.
You can now start the instance and validate the migration:
can preview binary files in the editor
can compile a PDF with images
can upload new files
You can roll back the migration gracefully in reversing the steps:
Shutdown the instance
Mirror back the files by flipping the sequence of source/destination
Write new files back into the local directory using an inverse transform
Restart the instance with the old configuration
The first transform removes the top level folder. The 2nd transform changes the directory layout to a flat one. The wildcards ensure that only files are extracted, not their parent (project) folders.