Only this pageAll pages
Powered by GitBook
1 of 77

On-premises

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Getting started

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Installation

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Configuration

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Maintenance

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

User and project management

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Support

Loading...

Loading...

Loading...

Loading...

Loading...

Welcome

This is where you'll find all the technical documentation for Overleaf Server Pro and Overleaf Community Edition, our on-premises versions of Overleaf.

Overleaf is a collaborative LaTeX editor loved by researchers and tech teams. Our cloud version is available at overleaf.com. These docs are specifically for people interested in setting up and maintaining Overleaf Server Pro or Community Edition.

Overview of Server Pro and Community Edition

Both Server Pro and Community Edition run in Docker containers, isolating them from other applications on the same host. This provides an additional layer of security by preventing potential cross-application attacks.

They can run on air-gapped servers, which means they can be completely isolated from other networks, including the Internet. Docker provides tooling for transferring the application from an internet-connected to an air-gapped environment.

After the initial download, no internet connection is required, significantly reducing the risk of external threats.

Stay up to date

to get updates on:

  • New releases and features

  • Enhancements

  • Security patches

All mailing list emails originate from the email address [email protected]

Quick links

Server Pro vs. Community Edition
Subscribe to our mailing list
Before you start
Release notes

Using the Toolkit

The Toolkit is the recommended way to deploy and manage Overleaf Server CE and Server Pro instances.

In this section we will guide you through downloading the Toolkit from GitHub, familiarizing yourself with some of the Toolkit's commands and configuring some basic settings. By the end of this page you should have a running on-premises instance over Overleaf.

Release notes

Release notes 6.x.xRelease notes 5.x.xRelease notes 4.x.xRelease notes 3.x.xRelease notes 2.x.xRelease notes 1.x.xRelease notes 0.x.x

Server Pro version support

To remain on a supported track, you should be running one of the supported release numbers listed below in the rightmost column (Latest Patch).

Server Pro vs. Community Edition

Server Pro and Community Edition are both on premises versions of Overleaf. But what are the differences?

Benefits for users

Feature
Community Edition
Server Pro

Skills needed

We recommend that the on-site administrator of your Overleaf instance has:

Requirements

Installing Overleaf requires the right skills, as well as particular hardware and software.

Make sure you read this section thoroughly before proceeding with any installation of Overleaf.

Requirements for installing Server Pro and Community Edition

We strongly

Introduction

Whether you're a researcher interested in running the Community Editition in your trusted workgroup or an enterprise organisation wanting to integrate Server Pro into your existing infrastructure, to get started, we always highly recommend setting up your new instance using our with the default Community Edition image as doing so is a great way to familiarize yourselves with the platform's requirements and helps ensure a smooth experience when deciding to upgrade to Server Pro.

Like the Community Edition, Server Pro comes as a Docker container and is a direct drop in replacement and additionally includes features such as SSO provided via LDAP and SAML2, improved security, tracked changes, comments, our optimized version of TeX Live, templates and administration panel.

Once you've depolyed the Community Edition using the Toolkit and familiarized yourself with the application, you can easily switch to Server Pro by following the instructions .

A Server Pro license allows you to run the application in a production environment as well as one in a non-production/sandbox environment; it is highly recommended that you provision a non-production environment for testing.

  • We find that on-site administrators with these skills will be able to provide the best experience for users of Overleaf at your organization.

    Toolkit
    here

    Full project history

    ✓

    ✓

    Commenting

    X

    ✓

    Real-time track changes

    X

    ✓

    Easy internal collaboration

    X

    ✓

    Private template management system

    X

    ✓

    Git integration

    X

    ✓

    Symbol Palette

    X

    ✓

    Benefits for user admins

    Feature
    Community Edition
    Server Pro

    Easy user management via Admin Panel

    Limited

    ✓

    No manual upgrade of users required

    X

    ✓

    Benefits for system admins

    Feature
    Community Edition
    Server Pro

    Single sign-on (SSO) via SAML 2 and LDAP

    X

    ✓

    Direct access to all user projects

    ✓

    ✓

    Self-hosted

    ✓

    ✓

    Automatic user registration

    X

    If you're currently running Overleaf Community Edition and would like to upgrade your instance to Overleaf Server Pro please get in touch for a quote and information. Overleaf Server Pro is a drop-in replacement for the Community Edition.

    Details of Overleaf Server Pro can be found here.

    Community Support

    For people using a self-hosted Community Edition instance, support is provided by the community via GitHub Issues.

    Server Pro Support

    For customers using a self-hosted Server Pro instance we will provide reasonable support to assist with the resolution of technical issues relating to the installation, configuration, maintenance and general usage of Server Pro, to a single, named staff member.

    Support services for Server Pro specifically exclude:

    • Direct support for the LaTeX language including layout, typesetting, and programming errors;

    • Defects or errors resulting from any modifications to Server Pro unless made, instructed, or approved by us in writing;

    • Support for any version of Server Pro other than:

      • The two (2) most current point releases of the current major version; and

      • The last released point release of the previous major version;

    • Support for any non-current version of Server Pro that is more than twenty-four (24) months old;

    • Any fault in the environment or in any software or hardware used in conjunction with Server Pro; and

    • Defects or errors caused by the use with any software products other than those specifically certified for use with Server Pro in this documentation.

    To remain on a supported track, you should be running one of the supported release numbers listed above in the rightmost column.

    You can confirm what version of Server Pro / Community Edition you're running by comparing the output of the command below against the Image ID's published in the release notes.

    Powerful LaTeX editor

    ✓

    ✓

    Overleaf Community Edition is intended for use in environments where all users are trusted. Community Edition is not appropriate for scenarios where isolation of users is required due to Sandbox Compiles not being available.

    Without sandboxing, LaTeX compiles run with the same privileges as the container, allowing access to its filesystem, network, and environment variables. This creates a risk of data exposure or system compromise. Non-sandboxed compiles should only be used in fully trusted environments; for multi-user or production deployments, Sandbox Compiles are strongly recommended.

    For more information on Sandbox Compiles check out our .

    recommend you run Server Pro on a recent version of Ubuntu, with a recent version of Docker. It's possible to run Server Pro on many other systems, but it will be much more difficult for us to offer support for systems that are far from the default Ubuntu/Docker setup. We also can't offer support for problems with Docker itself.

    Before you start

    Get the most from installing Overleaf by preparing thoroughly.

    Before you install Overleaf, it's important to familiarize yourself with the requirements, installation process, configuration options, and upgrade sections of this documentation. It's also crucial to have a solid understanding of your organization's requirements for using Overleaf and the necessary underlying infrastructure needed for its successful operation.

    What can I do to prepare?

    Understand the requirements for running Overleaf. This involves evaluating your organization's existing server environment, network capabilities and storage resources. Ensure that your infrastructure meets or exceeds the specified requirements outlined in this documentation.

    Before initiating the installation process, ensure you have administrative access to the server where you intend to deploy Overleaf. This may involve coordinating with your IT team or system administrators to obtain the necessary permissions and resources. Additionally, review any security considerations or network policies that might impact the installation.

    What if I have a problem?

    Please note that we are not able to provide support for local installations of the free Community Edition.

    If you encounter any problems, we recommend first consulting the section of the documentation as it contains common issues and required information needed by the support team if you need to reach out for assistance.

    By following these steps and thoroughly reading the documentation, you'll be well-prepared to install, configure, and maintain Overleaf according to your organization's requirements. Remember that a solid understanding of your infrastructure and the installation process is key to a successful deployment.

    Localization

    i18n Languages

    Both the Overleaf Community Edition and Server Pro have been translated into multiple languages.

    The language can be set via OVERLEAF_SITE_LANGUAGE with one of the following options:

    • en - English (default)

    • es - Spanish

    • pt - Portuguese

    • de - German

    • fr - French

    • cs - Czech

    • nl - Dutch

    • sv - Swedish

    • it - Italian

    • tr - Turkish

    • zh-CN - Chinese (simplified)

    • no - Norwegian

    • da - Danish

    • ru - Russian

    • ko - Korean

    • ja - Japanese

    • pl - Polish

    • fi - Finnish

    Some of these are more complete than others, we always endeavor to have all supported languages fully translated, if you would like to help with our translations please get in touch!

    Multi-language support

    Overleaf can support multiple languages per container. This is done via different domains configured to respond in a set language using the environment variable OVERLEAF_LANG_DOMAIN_MAPPING with an escaped JSON string.

    Release notes 1.x.x

    Server Pro 1.2.1

    (Community Edition Image ID: 8e1bae81acac)

    Server Pro 1.2.0

    • Use both 2016 and 2017 versions of texlive, for backward compatibility

    Server Pro 1.1.0

    • Update texlive to 2017.1

    • Use https for the learn-wiki proxy by default

    Server Pro 1.0.2

    • A new option, keep the pdf view in sync while you type

    • A new feature, replacing the public/private permissions system

    • New administration interface

    • Package-aware Autocomplete

    Server Pro 1.0.0

    • Upgraded all internal services to latest node-js runtime

    • Per-User Track Changes

    • Improved Autocomplete

    • Improved Spellcheck

    3. Initialize the configuration

    Initializing the configuration

    Let's initialize our new server's configuration files with some sensible defaults by running the bundle bin/init script.

    bin/init

    This script will not overwrite any existing configuration files.

    Now let's check the contents of the config/ directory using the ls command:

    ls config

    If everything was successfully initialized you should see three configuration files overleaf.rc, variables.env and version. These are the main server configuration files and allow you to customize how your server operates and how your users interact with your instance.

    Name
    Description

    For now, it's enough to know that these files exist and where you can find them. Later in the documentation we'll go through each of the files in more detail and explain how you can customize your instance using them. If you want to skip ahead you can see a full breakdown of these configuration files on the .

    Adding LaTeX user help

    You can enable access to Overleaf's Learn pages within your Server Pro instance by simply adding OVERLEAF_PROXY_LEARN=true to your config/variables.env file in the Toolkit and running the bin/up command.

    This allows users to access current documentation and learning resources by clicking the Documentation button in the navigation menu, all without leaving your instance.

    For Docker Compose deployments, you'll need to add the environment variable OVERLEAF_PROXY_LEARN: true to the environment section of the sharelatex service in to your docker-compose.yml file.

    Your Server Pro deployment will require access to the internet so it can perform external GET requests to .

    Password restrictions

    It is possible to enforce password restrictions on user accounts when using the native Overleaf login system for authentication.

    It is not possible to enforce password restrictions for SSO (LDAP/SAML 2.0) logins. These must be configured in your Identity Provider (IdP).

    To do so, you'll need to set the relevant environment variable in the Toolkits config/variables.env file.

    Name
    Description

    4. Choose Community Edition or Server Pro

    If you're a Server Pro customer please continue with the next steps to log into our image repository and change the Toolkit configuration to use the Server Pro image. If not, you can skip this section and move on to the personalizing your instance step.

    Obtaining Server Pro Image

    Server Pro is distributed as a Docker image on the quay.io registry: quay.io/sharelatex/sharelatex-pro

    You will have been supplied with a set of credentials when you signed up for a Server Pro license.

    First use your provided credentials to log in to the quay.io repository:

    docker login quay.io
    Username: <sharelatex+your_provided_username>
    Password: <your_provided_password>

    Then run bin/docker-compose pull to pull the Server Pro image from the registry.

    These credentials do not provide access to the website.

    Switching to Server Pro

    If you're deploying an on-premises version of Overleaf for the first time we highly recommend first setting up the Overleaf Toolkit with the Community Edition before switching to Server Pro as this will help you get familiarized with the process.

    As Server Pro can be used as a drop-in replacement for the Community Edition you'll be able to use all your existing settings and customizations. When you're ready, Toolkit deployments can enable Server Pro by editing the config/overleaf.rc file and changing the SERVER_PRO environment variable to true.

    The next time you run bin/up, the Toolkit will automatically download and use the Server Pro image.

    If you're upgrading from the Community Edition to Server Pro you can do that now. If not, please move onto the next step in the deployment guide to personalize your instance.

    Understanding license usage

    Server Pro licensing is quite different from other cloud-based solutions in that there is no concept of free collaboration, any user who logs in and accesses a project is considered an active user by the system, necessitating a corresponding license.

    The active/inactive flag for an account is just a high-level indicator for administrators to help indicate usage. If a user who holds a Server Pro license leaves your organization, there is no immediate requirement to delete their account and their associated projects. This action is often required for regulatory and compliance purposes, but from a licensing point of view, the license allocated to the departing user can be reassigned to their successor, allowing for a seamless transition.

    Administrators can view the total number of active users on your instance via Admin > Manage Users > License Usage. An active user is defined as someone who has opened a project on your Server Pro instance in the last 12 months.

    In general, it's advisable not to delete accounts (unless they are no longer required), as this action would lead to the removal of the account's projects and prevent any collaborators from accessing them.

    Presently, there is no provision for deactivating accounts; they either exist with retained data or don't exist at all. The recommended approach is to leave the account and its associated data within Server Pro, ensuring any projects are part of your backup process.

    Over time, unused accounts will transition to an inactive state (as they will not have accessed a project within the past 12 months), denoting that they no longer require a license, even though the accounts and associated projects are retained. In the event a user returns, they can access their account and projects, reinstating their status as an active user and once again requiring a licence.

    It's important to highlight that in Server Pro, Administrators retain the capability to access the projects of any user, even after that user has left the organization. This maintains a certain degree of access and authority over projects. Additionally, Administrators hold the ability to transfer ownership of projects from one user to another, offering full control over your data.

    As Server Pro is architected to work offline, we have purposely chosen not to enforce a strict user limit, and there are no restrictions that would prevent new users from being onboarded in cases where deployments are over their seat limit. This helps ensure that users can access their projects when needed and are not hindered by a temporary lack of seats.

    In cases where you go over your seat limit, we would request that you reach out to the Success team () to let us know at your earliest convenience. The Success team can then provide you with prorated pricing for adding more seats, either midterm or aligned with your subsequent renewal.

    When it comes to renewals, as Server Pro doesn't transmit usage information back to us, we rely on customers to report their user count for license compliance. As mentioned above, as Server Pro doesn't enforce a strict user limit, and there's no explicit 'inactive' setting for users -- this means that if you're aware of inactive users, you have the option to exclude them when reporting your seat count to us.

    If you are using SSO, an alternative way would be to report the number of users within your authorized group rather than the total number of active users in the Server Pro instance, as the latter might encompass older, inactive accounts.

    1. Download the Toolkit

    Downloading the Toolkit

    The Toolkit is compatible with both the Server CE and Server Pro and is the recommend installation method. Using the Toolkit will allow you to easily get started with Server CE and seamlessly upgrade to Server Pro if required.

    To install the Toolkit you'll need to navigate to the intended installation path and then clone the Overleaf Toolkit GitHub repository using this command:

    git clone https://github.com/overleaf/toolkit.git ./overleaf-toolkit

    To prevent any potential permissions issues we recommend installing the Toolkit in your users $HOME directory.

    Wait for the cloning process to complete then let's switch into the newly created overleaf-toolkit directory:

    Using templates as an individual

    If an individual user would like to use a template from the Template Gallery on overleaf.com they would need to:

    1. Navigate to the Template Gallery on overleaf.com and locate the required template, for example IEEE Photonics Journal Paper Template - Example Submission

    2. Click on the Open as Template button

    3. Click on the project menu and choose Download Source

    4. Next, log into their on-premise Server Pro account

    5. Click the New Project button from the projects dashboard and choose Upload Project

    6. Click the Select a .zip file button and choose the downloaded template zip file

    The user can then use this newly uploaded template as required.

    An account is required

    Server Pro-only configuration

    The features in this section are only available for Overleaf Server Pro.

    Don't have Server Pro? If you're running Community Edition, switching to Server Pro is straightforward. Find out more about .

    Overleaf Toolkit

    The following pages provide detailed descriptions of the various configuration files and settings that are required to configure and customize your deployment when using the Overleaf Toolkit.

    Each of these files plays a specific role in the configuration process, and understanding their functions will help you to tailor your on-premises version of Overleaf to your specific needs.

    Redis

    Enabling password authentication

    If you're you're using an external Redis service and need to provide a password you can do this by setting the OVERLEAF_REDIS_PASS and REDIS_PASSWORD environment variables in the config/variables.env file and running the bin/up -d command to recreate the sharelatex container.

    If you're running a local instance of Redis, you'll need to configure the redis service to start with password authentication. After setting the above environment variables, you'll also need to complete these additional steps:

    Logging

    If an error occurs in any of the processes it will be written to the respective log file such as /var/log/overleaf/web.log.

    Toolkit users can have a look at the logs inside the container using the bin/logs script:

    You can use the bin/logs script to view logs for the following services: clsi, contacts, docstore, document-updater, filestore, git-bridge, mongo

    Upgrading TeX Live

    To save bandwidth, both the Overleaf Community Edition and Server Pro images only come with a minimal install of . You can install more packages or upgrade to a complete TeX Live installation using the command in the sharelatex container.

    The following instructions only apply to Community Edition installations. We highly recommend that Server Pro users enable as this provides users with access to the same TeX Live images used on as well as providing isolation between project compiles for enhanced security.

    2. Familiarize yourself with the Toolkit

    Taking a look around

    Now that we have a local copy of the Toolkit, let's take a look at the structure of the repository using the ls command:

    The ls -l

    Software requirements

    Operating systems

    For the best experience when running Overleaf, we highly recommend using a Debian-based operating system, such as Ubuntu. This choice aligns with the software's development environment and is the preferred option among the majority of Overleaf users.

    When using Server Pro with Sandboxed Compiles, it's

    Support guides

    Quick guides for common issues

    5. Personalizing your instance

    Personalizing your instance

    Before we start your Overleaf instance for the first time we're going to update the config/variables.env configuration file with your custom information.

    Open the config/variables.env file using your favourite text editor and update each of the following environment variables with the required information.

    Name

    Upgrading your deployment

    The is a git repository, so it's easy to get new Toolkit features. Just run the bin/upgrade command and follow the on-screen prompts.

    It is worth noting that the Docker image version (at config/version), is managed separately from the Toolkit code updates. Updating the Toolkit code will not automatically change the version of the Docker image that you are running. This means that in most cases, you are able to upgrade your Toolkit version without upgrading your deployment.

    The bin/upgrade Script

    6. Post-installation tasks

    Creating your first administrator account

    In a browser, open . You should see a form with email and password fields. Fill these in with the credentials you want to use as the administrator account, then click Register.

    Then click the link to go to the login page (). Enter the credentials. Once you're logged in, you'll see the welcome page.

    Click the green button at the bottom of the page to start using Overleaf.

    Bulk transfer of project ownership

    To aid with the handover for all of a users projects to another user, Server Pro includes a script for bulk transfer of project ownership.

    The projects will be added to a new tag in the new project owners account. The tag is named after the current users email address and has prefix "transferred-from", example: "[email protected]".

    Added in Server Pro version 5.5.3.

    Usage

    Project limits

    Feature
    Limit

    Overleaf Community Edition is intended for use in environments where all users are trusted. Community Edition is not appropriate for scenarios where isolation of users is required due to Sandbox Compiles not being available.

    Without sandboxing, LaTeX compiles run with the same privileges as the container, allowing access to its filesystem, network, and environment variables. This creates a risk of data exposure or system compromise. Non-sandboxed compiles should only be used in fully trusted environments; for multi-user or production deployments, Sandbox Compiles are strongly recommended.

    For more information on Sandbox Compiles check out our .

    Extending TeX Live

    It's possible to extend an existing TeX Live image using a new Dockerfile and configure the application to use the new image.

    Here we offer some guidelines to install new packages or fonts, but the configuration of a custom image is not covered by our support terms.

    The TeX Live images receive infrequent updates. We suggest rebuilding custom images when upgrading Server Pro.

    The following sections apply to Server Pro and only.

    docker inspect --format '{{.Image}}' sharelatex | awk -F: '{print substr($2, 1, 12)}'

    OVERLEAF_PASSWORD_VALIDATION_MIN_LENGTH

    The minimum length required Default: 8

    OVERLEAF_PASSWORD_VALIDATION_MAX_LENGTH

    The maximum length allowed Default: 72

    OVERLEAF_PASSWORD_VALIDATION_PATTERN

    Used to validate password strength:

    • abc123 – password requires 3 letters and 3 numbers and be at least 6 characters long

    • aA – password requires lower and uppercase letters and be 2 characters long

    • ab$3 – it must contain letters, digits and symbols and be 4 characters long

    • There are 4 groups of characters: letters, UPPERcase letters, digits, symbols. Everything that is neither letter, nor digit is considered to be a symbol.

    Requirements
    troubleshooting

    overleaf.rc

    The main top-level configuration file.

    variables.env

    Environment variables loaded into the Docker container.

    version

    The version of the Docker image to use.

    Files and locations page
    https://learn.sharelatex.com
    overleaf.com
    documentation
    Server Pro vs. Community Edition
    LDAP
    SAML 2.0
    Sandboxed Compiles
    Git integration
    Templates
    Adding LaTeX user help
    Cover
    Toolkit settings
    Cover
    Environment variables
    Cover
    Server Pro-only configuration
    Doc version recovery
    Full project history migration
    Using templates as an individual
    Skills needed
    Hardware requirements
    Software requirements
    Cover
    Cover
    Cover

    Unlimited†

    Maximum number of projects

    Unlimited

    * Some larger files may remain editable under certain circumstances. However, to ensure that a file remains editable, you should limit its size to 2 MB or less.

    † There's no enforced limit on total project size. However, you may find some technical limitations when working with very large projects. We recommend a maximum project size of 500 MB, or less than 100 MB if using our Git integration. Projects above these sizes may work, but staying within these limits will give you the best experience.

    Compile timeout

    Default: 180 seconds.

    See Updating project compile timeout for more information about customizing this value.

    Maximum number of files per project

    2000

    Maximum size of editable material per project

    Default: 7 MB.

    See Environment variables for more information about customizing this value.

    Maximum size of an individual editable text file

    2 MB*

    Maximum size of an individual upload

    50 MB

    Maximum size of project

    cd ./overleaf-toolkit
    Flags
    Name
    Description

    --from-user

    Email or user-id of current project owner

    --to-user

    Email or user-id of the new project owner

    Completion

    If the script terminates prematurely due to an error, it will print the error and exit with code 1 to denote that it was unsuccessful.

    If the migration is completed successfully it will print "Done" and exit with code 0.

    # Overleaf Toolkit setup:
    # email based
    toolkit$ bin/run-script modules/server-ce-scripts/scripts/transfer-all-projects-to-user.mjs [email protected] [email protected]
    
    # user-id based
    tookit$ bin/run-script modules/server-ce-scripts/scripts/transfer-all-projects-to-user.mjs --from-user=68880f000000000000000000 --to-user=68880f000000000000000001
    
    # Legacy docker-compose.yml setup:
    $ docker exec sharelatex /bin/bash -c "source /etc/overleaf/env.sh && source /etc/container_environment.sh && cd /overleaf/services/web && node ./modules/server-ce-scripts/scripts/transfer-all-projects-to-user.mjs [email protected] [email protected]"
    • Create a docker-compose.override.yml file in the config/ directory with the following content

    If you have enable AOF persistence enabled, you'll need to add --appendonly yes to the command

    • Run bin/up -d to recreate the containers

    Enabling Append-Only File Persistence

    Redis AOF (Append-Only File) persistence provides a robust way to ensure data durability by logging every write operation received by the server. Unlike RDB snapshots, which take point-in-time copies of your dataset, AOF keeps a complete record of all changes made to your data.

    Disabling RDB is optional. It's generally recommended that both persistence methods be used together. Before making any changes in production, we recommend reviewing the advantages and disadvantages of running AOF and RDB together.

    You can read more about enabling AOF persistence in Redis here: https://redis.io/docs/latest/operate/oss_and_stack/management/persistence/#how-i-can-switch-to-aof-if-im-currently-using-dumprdb-snapshots

    1. Schedule a maintenance window for the upgrade.

    2. Stop the instance using bin/stop and take a backup of the config/ and data/ folders.

    3. Run bin/up to start the instance

    4. Run the command docker exec -it redis sh

    5. Run the command redis-cli to open the Redis command line interface

    6. In the redis-cli, run the command config set appendonly yes

    7. Now you'll need to wait for AOF rewrite to finish persisting the data. You can do that by typing INFO persistence into the redis-cli and waiting for aof_rewrite_in_progress and aof_rewrite_scheduled to be 0, and validating that aof_last_bgrewrite_status is ok.

    8. Exit the redis-cli by typing exit and pressing the return key

    9. Exit the redis container by typing exit and pressing the return key

    10. ​Run the command ls ./data/redis and confirm you can see the appendonly.aof file

    11. Edit the config/overleaf.rc file and change the REDIS_AOF_PERSISTENCE environment variable from false to true

    12. Run bin/up -d and make sure the application works (The project editor and history pane are functional).

    ,
    notifications
    ,
    real-time
    ,
    redis
    ,
    spelling
    ,
    tags
    ,
    track-changes
    ,
    web
    ,
    web-api
    ,
    history-v1
    ,
    project-history
    .

    Copying logs

    You can copy log files from the main sharelatex container to local computer using the following command:

    Persisting logs

    Docker containers are ephemeral which means that any files/directories created within the container during runtime will be discarded if the container is ever recreated (for example, when running the bin/up command). This includes log files.

    If you'd like to retain access to important log files between container recreation, you can set the environment variable OVERLEAF_LOG_PATH in the config/overleaf.rc file with the Toolkit. This variable should be set to the directory on the host that will be mounted to the log directory inside the sharelatex container. Once you've made this configuration change and run the bin/up -d command, log files will be persisted and you'll be able to access the logs directly from the Docker host.

    You'll need to set the owner of the logs directory used in the bind-mount to the www-data user (uid=33) with the permissions drwxr-xr-x (755).

    As an example, you can can set the owner using chown 33:33 data/overleaf/logs and the permissions using chmod 755 data/overleaf/logs.

    Getting inside the sharelatex container

    To start a shell inside the sharelatex container, run

    You will get a prompt that looks like:

    In the following instructions, we will assume that you are in the container.

    Determining your current TeX Live version

    TeX Live is released every year around the month of April. Steps for using tlmgr are different depending on whether you are using the current release or an older one. You can check which version of TeX Live you are running with tlmgr --version. For example, this installation runs TeX Live 2021:

    The current release of TeX Live can be found on the TeX Live homepage.

    If you are running an older TeX Live version, you have two options. A new version of the Overleaf Docker image is usually released shortly after a TeX Live release, you can either wait for it and upgrade your deployment using bin/upgrade script, or, if you prefer to keep the older TeX Live release, you will first need to tell tlmgr to use a historic repository. You will find instructions for doing so here.

    Installing packages

    To install a complete TeX Live installation, run this command inside the sharelatex container:

    You can also install individual packages manually:

    From 3.3.0 release onwards running tlmgr path add is required again after every use of tlmgr install, in order to correctly symlink all the binaries into the system path.

    Many more commands are available. Find out more with:

    When you're done, type exit or press Control-D to exit the shell.

    Saving your changes

    The changes you've just made have changed the sharelatex container, but they are ephemeral -- they will be lost if Docker Compose recreates the container, e.g. as part of updating the config.

    To make them persistent, use docker commit to save the changes to a new docker image:

    After committing the changes, update the config/version accordingly. Then run bin/up, to recreate the sharelatex container.

    You will need to repeat these steps each time you upgrade to a new Overleaf version.

    TeX Live
    tlmgr
    Sandboxed Compiles
    overleaf.com
    important
    to note that the application requires root access to the Docker socket.

    Dependencies

    Both Server CE and Server Pro currently support the following versions of dependencies:

    • Docker 25.0 and 29

    • MongoDB 7.0 and 8.0

    • Redis 6.2 and 7.5

    You can track End-of-Life (EOL) dates for the above dependencies, and other popular products using the endoflife.date service here: https://endoflife.date/

    docker compose is generally installed with Docker via the docker-compose-plugin package.

    MongoDB and Redis are automatically pulled by docker compose when running Server CE or Server Pro, unless configured to use a different installation.

    The Toolkit depends on the following programs:

    • bash

    • Docker

    docker compose is required and is generally installed with Docker.

    We recommend that you install the most recent version of Docker that is available for your operating system.

    Once Docker is installed correctly, you should be able to run these commands without error:

    The Toolkit includes a handy bin/doctor script that produces a report pointing to any unfulfilled dependency.

    Description
    Example

    OVERLEAF_SITE_URL

    Where your instance of Overleaf is publicly available. This is used in public links, and when connecting over websockets, so must be configured correctly!

    https://overleaf.lilliput.com

    OVERLEAF_EMAIL_FROM_ADDRESS

    This email address will be used as the from address for all outgoing emails.

    [email protected]

    OVERLEAF_ADMIN_EMAIL

    The email address where users can reach the person who runs the site.

    [email protected]

    Once you have updated these environment variables, save and quit - you're now ready to start your instance for the first time.

    To start your instance run the following command:

    This command will download all the required images, create the containers (using your customizations) and start up the instance. You should see some log output from the various Docker containers. You can start them up again (without attaching to the log output) by running bin/start.

    The Toolkit uses docker compose to manage the Overleaf Docker containers. The Toolkit provides a set of scripts which wrap docker compose, and takes care of most of the details for you.

    If all goes well, you should be able view the log in page for your new Overleaf instance by navigating to http://127.0.0.1/ or http://localhost/ in your browser.

    Depending on your network configuration and where your Overleaf instance is being hosted you may need to make some additional configuration changes. See the Toolkit settings section for more details.

    That's it for the initial part of installation. You can now move onto the Post installation tasks where you'll create your first administrator account and First example project.

    Installing and updating new packages

    You can use tlmgr commands such as tlmgr install and tlmgr update to manage Tex Live packages as in the following example:

    Using tlmgr in an older TeX Live image

    By default tlmgr downloads resources from the latest TeX Live release. When patching an older TeX Live image, the downloads need to be switched to the respective archive. See the list in https://www.tug.org/historic/ for mirrors of archives.

    Installing new fonts

    There are different procedures to install new fonts in a Tex Live distribution, and installing a custom font might require several steps. Checking the instructions to install TeX fonts in the official Tex Live documentation is probably a good starting point.

    The following Dockerfile shows an example of installing a TrueType font over an existing Tex Live 2022 image:

    Configuring Server Pro to use the new images

    Use the name quay.io/sharelatex/texlive-full and a custom tag to build the new image, as in:

    We can now configure Server Pro to use the new 2023.1-custom image updating the TEX_LIVE_DOCKER_IMAGE and ALL_TEX_LIVE_DOCKER_IMAGES environment variables:

    In the example above new projects are set by default to use the new 2023.1-custom image, while 2023.1 is still available for when it's needed.

    Sandboxed Compiles
    OVERLEAF_LANG_DOMAIN_MAPPING = '
        {
            "www": {
            "lngCode": "en",
            "url": "https:\/\/www.example.com"
            },
            "fr": {
            "lngCode": "fr",
            "url": "https:\/\/fr.example.com"
            },
            "de": {
            "lngCode": "de",
            "url": "https:\/\/de.example.com"
            },
            "sv": {
            "lngCode": "sv",
            "url": "https:\/\/sv.example.com"
            },
            "zh": {
            "lngCode": "zh-CN",
            "url": "https:\/\/zh.example.com"
            },
            "es": {
            "lngCode": "es",
            "url": "https:\/\/es.example.com"
            }
        }'
    services:
        redis:
            command: "redis-server --requirepass <YOUR-PASSWORD>"
    # You can use the following command to view the web service logs
    bin/logs web
    
    # You can use --help for help
    bin/logs --help
    
    # You can also look at the logs for multiple services at once:
    bin/logs filestore docstore web clsi
    
    # You can follow the log output using the -f flag
    bin/logs -f filestore docstore web clsi
    
    # You can use the -n {number} flag to limit the number of lines to print (default 50)
    bin/logs -n 50 web
    
    # You can use the -n all flag to show all log lines
    bin/logs -n all web
    
    # You can use > to redirect the output to a file
    bin/logs -n all web > web.log
    docker cp sharelatex:/var/log/overleaf/{service-name}.log {service-name}.log
    bin/shell
    root@309b192d4030:/#
    # tlmgr --version
    tlmgr revision 59291 (2021-05-21 05:14:40 +0200)
    tlmgr using installation: /usr/local/texlive/2021
    TeX Live (https://tug.org/texlive) version 2021
    tlmgr install scheme-full
    tlmgr install tikzlings tikzmarmots tikzducks
    tlmgr help
    cat config/version #5.2.1
    docker commit sharelatex sharelatex/sharelatex:5.2.1-with-texlive-full
    echo 5.2.1-with-texlive-full > config/version
    # Shows the installed Docker version
    docker --version
    
    # docker compose plugin (v2)
    docker compose version
    
    # List the running Docker containers on your system
    docker ps
    
    CONTAINER ID   IMAGE                                     COMMAND                  CREATED        STATUS                        PORTS                NAMES
    b1fadcd1dcb1   quay.io/sharelatex/sharelatex-pro:5.4.0   "/sbin/my_init"          23 hours ago   Up About a minute             0.0.0.0:80->80/tcp   sharelatex
    7900ebb9ebb8   redis:6.2                                 "docker-entrypoint.s…"   45 hours ago   Up About a minute             6379/tcp             redis
    fbd49d420e59   mongo:6.0                                 "docker-entrypoint.s…"   45 hours ago   Up About a minute (healthy)   27017/tcp            mongo
    bin/up
    FROM quay.io/sharelatex/texlive-full:2023.1
    
    RUN tlmgr update --force ebproof
    FROM quay.io/sharelatex/texlive-full:2022.1
    
    RUN tlmgr option repository <MIRROR>/systems/texlive/<YEAR>/tlnet-final
    # e.g. RUN tlmgr option repository ftp://tug.org/historic/systems/texlive/2022/tlnet-final
    
    RUN tlmgr update --force ebproof
    FROM quay.io/sharelatex/texlive-full:2022.1
    
    COPY ./myfonts/*.ttf /usr/share/fonts/truetype/myfont/
    
    # rebuild font information cache
    RUN fc-cache
    docker build -t quay.io/sharelatex/texlive-full:2023.1-custom
    TEX_LIVE_DOCKER_IMAGE: "quay.io/sharelatex/texlive-full:2023.1-custom"
    ALL_TEX_LIVE_DOCKER_IMAGES: "quay.io/sharelatex/texlive-full:2023.1,quay.io/sharelatex/texlive-full:2023.1-custom"

    Various bug fixes and performance improvements

    Fixed an issue with creating templates
  • Enable SES email configuration via Instance Roles

  • Various bug-fixes and improvements

  • auto-compile
    link-sharing
    command displays a detailed long listing view of the contents of a directory, providing additional file information such as permissions, ownership and size.

    If everything was cloned successfully you should see something like this:

    All user-owned configuration files are found in the config/ directory. This directory is excluded from the git revision control system, so it will not be changed by updating the Toolkit.

    Name
    Description

    bin

    This folder contains a collection of scripts that help you manage your Overleaf server instance. You can read more about these scripts in our Commands section below.

    config

    This folder contains your own local configuration files.

    lib

    This folder contains base configuration files used by the Toolkit.

    data

    By default this folder contains the storage location for MongoDb, Redis and Overleaf. For more information see section below.

    We recommend not changing files outside of the /config folder directly. Instead, if you need to make changes, they can be done via environment variables set in either config/variables.env or config/overleaf.rc. For example, to set the mongo service image, rather than manually editing lib/docker-compose.mongo.yml file, you can set the image using the environment variable MONGO_IMAGE in config/overleaf.rc. For more information see the Toolkit settings page.

    The Toolkit will not change any data in the config/ directory without your permission.

    When you run the bin/upgrade command, the script will check if there is an available update to the Toolkit code, and offer to update your Toolkit. You can always say no to this upgrade, and nothing will change.

    If you do choose to update the Toolkit code, the script will then check if the default Docker image version has changed, and offer to upgrade your local version file (at config/version) to match the new default.

    If you do choose to switch versions, the script will then walk you through a process of shutting down the Docker services, taking a backup, and restarting the Docker services. Your old version file will be automatically copied to config/__old-version, just in case you need to roll back to that version of the Docker images.

    For air-gapped setups that manually import Docker images, please set PULL_BEFORE_UPGRADE=false in your config/overleaf.rc file.

    Please check here for more infomration on deploying in an air-gapped/offline environments.

    Upgrade path

    The bin/upgrade command will always choose the most recent version of Server Pro/CE available to it at that time. If your upgrade cycle is infrequent, this could result in skipping major versions and potentially upgrading to a version you might not have expected.

    When performing an upgrade we recommend upgrading to the latest release of the current major version before upgrading to the latest release of the next major version. For example, if you're currently running 3.3.2 and the latest version available is 5.3.1, the correct upgrade path would be:

    • 3.3.2 -> 3.5.13

    • 3.5.13 -> 4.2.9

    • 4.2.9 -> 5.5.1

    To avoid any upgrade issues we recommend consulting our Release notes prior to performing any upgrades as certain versions may require additional steps. Such as, making manual changes to the Toolkit, upgrading databases or running migration scripts.

    If you haven't already done so, signing up to our mailing list so that you can be notified when new versions/updates are released. This would allow you to schedule regular maintenance windows that closely follow our release schedule.

    Overleaf Toolkit
    Creating your first example project

    Open http://localhost/project in your browser and you will see a button prompting you to create your first project.

    Welcome to Overleaf!

    Click this button, select Example Project, and follow the on-screen instructions.

    You will be taken to the new project, where you will see a text editor and a PDF preview.

    Overleaf Editor

    To finish you can click on the Home icon to return to your projects page.

    http://localhost/launchpad
    http://localhost/login
    Overleaf Launchpad
    Overleaf welcome page

    ✓

    (LDAP or SAML 2)

    Sandboxed Compiles

    X

    ✓

    Optimized version of TeX Live

    X

    ✓

    Early notification for security releases

    X

    ✓

    documentation
    quay.io
    quay.io
    [email protected]

    Release notes 6.x.x

    Server Pro 6.0.1

    Release date: 2025-11-17

    • Server Pro Image ID: a339d58ea444

    • Community Edition Image ID: 719649cd32f8

    • Git Bridge Image ID: 38f569f6f277

    This release fixes several compile issues emerging after the latest runc updates.

    The minimum MongoDB version for Server CE/Pro 6.0.1 is now MongoDB 8.0. You can view our documentation about upgrading MongoDB .

    Server Pro 6.0.0

    Release date: 2025-10-30

    • Server Pro Image ID: 579c87536b16

    • Community Edition Image ID: 21b21080312f

    • Git Bridge Image ID: 38f569f6f277

    Binary file migration

    This new release reduces the storage usage of binary files in half.

    An online migration is included in version 5.5, allowing for minimal downtime as part of the upgrade. Before upgrading to Server Pro v6 make sure you're already running the latest version of Server Pro v5.5 () and have run the migration.

    .

    MongoDB upgrade to v8

    This release bumps the minimum MongoDB version to 8.0

    If you're currently using MongoDB v6 or earlier, you'd need to update your versions one major version at a time (v6 → v7 → v8).

    Please ensure you have a backup before upgrading. In case of roll-back, you will need to restore the database backup.

    For instructions on how to upgrade MongoDB v6 → v7 → v8 see our step-by-step guide .

    Redis upgrade to v7.4

    This release also bumps the minimum Redis version to 7.4.

    Update your REDIS_IMAGE in your config/overleaf.rc to REDIS_IMAGE=7.4.

    New Features

    • Link sharing now can be disabled with OVERLEAF_DISABLE_LINK_SHARING=true.

    • OVERLEAF_MAINTENANCE_MESSAGE and OVERLEAF_MAINTENANCE_MESSAGE_HTML are now available to customise the title and content of the Maintenance page.

    • OVERLEAF_USER_HARD_DELETION_DELAY and OVERLEAF_PROJECT_HARD_DELETION_DELAY

    Bugfixes

    • Fixed footer rendering with links.

    • Improved error messages on SAML login errors.

    • Fixed audit log entry not added when a user's admin state is updated on SSO login.

    • Fixed History panel errors when TLS is enabled in Redis.

    Other changes

    • All the links to the status page (set via OVERLEAF_STATUS_PAGE_URL) now use HTTPS and open in a new browser tab.

    Exporting projects

    In Server Pro and Community Edition 5.4.0 we have included a script that allows Administators to export all user projects (including those still visible in the Deleted and Trashed folders) to a directory on disk.

    The output from running this script is the same as manually downloading a Zip of all projects from the user's project dashboard. The script will flush any pending changes before starting the download to ensure that the export contains the latest version of the project.

    Limitations

    The export script has the following limitations:

    • No project settings, such as the TeX Live image name or compiler, are exported. These must be set when the project is uploaded to the user's account.

    • Exported projects don't contain any version history.

    • No collaborator information is preserved. Projects will need to be reshared. If using link-sharing, View and Edit links will be regenerated (they won't be the same as before).

    • Any comments and tracked change information won't be exported.

    This script is not designed to replace a full system backup. To ensure you can recover your instance in a disaster recovery sceneario we strongly recommend taking a .

    Flags

    Name
    Description

    Usage

    Use the following command to export projects for all users:

    If you are running Server Pro or Community Editition <= 3.5.13 you will need to update the above example to use the export-legacy-user-projects.js script.

    Completion

    Once the export is completed, you can access the files via the directory on the host that is bind-mounted to /var/lib/overleaf in your docker-compose.yml file or the OVERLEAF_DATA_PATH environment variable in the config/overleaf.rc file if you are using the Toolkit.

    Overleaf currently allows for duplicate project names. If a user's project contains a duplicate, these projects will still be added to the user's Zip export, but when extracted, only one version will be present. On Linux, unzip -B will write files with the same name as backup files instead of overwriting.

    Branding

    Header

    In this section, we'll cover how to personalize key elements of your on-premises instance. You can customize the site title, navigation links, header, footer, and logo according to your preferences.

    Site title

    The navigation bar title can be customized with the OVERLEAF_NAV_TITLE environment variable, this text is used in the top left corner of navigation if no logo is set.

    Logo

    You can add a custom logo rather than using text by setting the environment variable OVERLEAF_HEADER_IMAGE_URL. This value should point to an externally hosted image file.

    Header navigation links

    Extra navigation items can be added to the navigation header by setting the OVERLEAF_HEADER_EXTRAS environment variable to a JSON array of objects. For example:

    Footers

    It is possible to customize both the left and smaller right footer which is found on pages like /project using the environmental variables OVERLEAF_LEFT_FOOTER and the smaller OVERLEAF_RIGHT_FOOTER

    Both expect an array of JSON which will be inserted.

    When using text only, it must not contain HTML as the value will be rendered as raw text.

    This data needs to be valid JSON to work, with quotes escaped when passed through as an environmental variable.

    In addition to text and url, the JSON object also accepts the properties class and label for additional customization.

    TLS proxy

    An optional TLS proxy for terminating HTTPS connections, using NGINX.

    Run bin/init --tls to initialise local configuration with NGINX proxy configuration, or to add NGINX proxy configuration to an existing local configuration. A sample private key is created in config/nginx/certs/overleaf_key.pem and a dummy certificate in config/nginx/certs/overleaf_certificate.pem. Either replace these with your actual private key and certificate, or set the values of the TLS_PRIVATE_KEY_PATH and TLS_CERTIFICATE_PATH variables to the paths of your actual private key and certificate respectively.

    A default config for NGINX is provided in config/nginx/nginx.conf which may be customised to your requirements. The path to the config file can be changed with the NGINX_CONFIG_PATH variable.

    If you have a docker-compose.yml based deployment, or manage your own NGINX reverse proxy, you can view an example nginx.conf file .

    Add the following section to your config/overleaf.rc file if it is not there already:

    If you are using an external TLS proxy (i.e. not managed by the Overleaf Toolkit), please ensure that OVERLEAF_TRUSTED_PROXY_IPS=loopback,<ip-of-your-tls-proxy> is set in your config/variables.env, e.g. OVERLEAF_TRUSTED_PROXY_IPS=loopback,192.168.13.37.

    If you are using a subnet from 172.16.0.0/12 (default subnet for Docker networks) for your local network, you will need to set OVERLEAF_TRUSTED_PROXY_IPS=loopback,<network> in your config/variables.env. Where <network> is the IPAM -> Config -> Subnet value in docker inspect overleaf_default, e.g. OVERLEAF_TRUSTED_PROXY_IPS=loopback,172.19.0.0/16. This is to prevent the spoofing of X-Forwarded headers.

    If the OVERLEAF_TRUSTED_PROXY_IPSis not set manually it defaults to loopback. If setting manually, you must ensure you include one of loopback, localhost or 127.0.0.1, which trusts the nginx instance running inside the sharelatex container.

    In order to run the proxy, change the value of the NGINX_ENABLED variable in config/overleaf.rc from false to true and re-run bin/up.

    By default, the HTTPS web interface will be available on https://127.0.1.1:443. Connections to http://127.0.1.1:80 will be redirected to https://127.0.1.1:443. To change the IP address that NGINX listens on, set the NGINX_HTTP_LISTEN_IP and NGINX_TLS_LISTEN_IP variables. The ports can be changed via the NGINX_HTTP_PORT and TLS_PORT variables.

    If NGINX fails to start with the error message Error starting userland proxy: listen tcp4 ... bind: address already in use ensure that OVERLEAF_LISTEN_IP:OVERLEAF_PORT does not overlap with NGINX_HTTP_LISTEN_IP:NGINX_HTTP_PORT.

    Migrating from Server Pro to Group Professional

    Switching from a self-hosted Server Pro instance to a new cloud-based Overleaf Group Professional subscription is a big change, so to make this process as smooth as possible we've put together the following guidance.

    In general, we propose a three-month overlap period starting on your renewal date. This means that:

    • Your existing Server Pro instance and your new Group Professional subscription will both be fully active.

    • Your technical team can schedule time to get the Group Professional subscription set up and decide on the future of your on-premises deployment of Server Pro.

    • Most importantly, your users will have ample time to copy their projects over to the new Overleaf Group Professional platform.

    This quick guide will walk you through the key steps for this migration. Let’s get you started!

    Phase 1: Setup and Configuration

    • Overleaf will create your Group Professional subscription and add your Lead Administrator.

    • Your group administrator will now be able to enable , configure , and .

    Enabling Managed Users and implementing SSO is a required step for FedRAMP® LI-SaaS compliance. Therefore, if your organization requires FedRAMP compliance, we highly recommend that you set up Managed Users and SSO prior to inviting your end users.

    Phase 2: User Migration & Data Management

    This is the primary migration window and has the following responsibilities:

    End-Users

    • Users should actively migrate any projects they wish to keep from your Server Pro instance to their new accounts on . The process involves from Server Pro and to their account on . If a user doesn't already have an account, they can make one at .

    Only the project source code (LaTeX and binary files) will be transferred through this export procedure. Any existing project settings, sharing settings, comments, tracked changes, etc. won't be transferred. Users will need to re-invite their collaborators through this procedure.

    Technical Staff

    • During this phase, your technical team should plan for the post-migration handling of your on-premises Server Pro instance and its data.

    • Data Backup: You can export all projects before decommissioning. This creates an archive that allows you to assist users who may have forgotten to migrate or download their work. Instructions can be found .

    • Server Pro Decommissioning: After the migration window closes and your license key is disabled, you have two main options for the Server Pro instance itself:

    The Community Edition does not have nor /. If you need to revert back to native authentication (username/password), please see the guide .

    For a comparison of Server CE vs. Server Pro see .

    Phase 3: Server Pro Decommission

    • The Overleaf team will formally deactivate your Server Pro license key. We will send a confirmation once this is complete. This is when you will need to either uninstall Server Pro completely or switch to Community Edition as described above.

    Files and locations

    This page describes the configuration files that are used by the Toolkit to configure your on-premises deployment of Overleaf.

    Persistent Data

    The Overleaf Toolkit needs to store persistent data, such as the files required to compile LaTeX projects, and the contents of the MongoDB database. This is achieved by mounting a few directories from the host machine into the Docker containers, and writing the data to those directories.

    Data Directories

    The sharelatex container requires a directory in which to store data relating to LaTeX compiles. This directory is set with the OVERLEAF_DATA_PATH variable in config/overleaf.rc.

    The mongo container, if it is enabled, requires a directory in which to store it's database files, and the same is true of the redis container. These directories can also be configured in config/overleaf.rc.

    File Permissions

    Because Docker runs as root, the data directories will end up being owned by the root user, even if the Toolkit is being used by a non-root user. This is not a problem, but is worth being aware of, if you intend to alter the persistent data from outside of the containers.

    Configuration file location

    All user-owned configuration files are found in the config/ directory.

    This directory is excluded from the git revision control system, so it will not be changed by updating the Toolkit code. The Toolkit will not change any data in the config/ directory without your permission.

    Changes to the configuration files will not be automatically applied to existing containers, even if the container is stopped and restarted (with bin/stop and bin/start). To apply the changes, run bin/up, and behind the scenes, docker compose will automatically apply the configuration changes to a new container. (Or, run bin/up -d, if you prefer to not attach to the Docker logs.)

    The overleaf.rc file

    The config/overleaf.rc file contains the most important top level configuration settings used by the Toolkit. It contains statements that set variables, in the format VARIABLE_NAME=value.

    To see a breakdown of all available configuration options see our settings section.

    The variables.env file

    The config/variables.env file contains environment variables that are loaded into the sharelatex container, and used to configure the Overleaf microservices. These include the name of the application, as displayed in the header of the web interface, settings for sending emails, and other premium settings such as SSO for use with Server Pro.

    To see a breakdown of all available environment variables see the section.

    The version file

    The config/version file contains the version number of the Docker image that will be used to create the running instance of your Overleaf server.

    Changes to these configuration files will not be automatically applied to existing containers, even if the container is stopped and restarted (with bin/stop and bin/start).

    To apply your changes, run bin/up, and the Toolkit will automatically create a new container for you with configuration changes applied.

    The docker-compose.override.yml file

    If present, the config/docker-compose.override.yml file will be included in the invocation to docker compose. This is useful for overriding configuration specific to Docker compose.

    See the for more details.

    Server Pro infrastructure

    Services

    The Server Pro infrastructure comprises four primary services: sharelatex, git-bridge (optional), mongo and redis. The sharelatex service, which runs the main Server Pro application, depends on the mongo and redis services for its database and caching/real-time functionalities and the git-bridge to handle the (optional). The only port published on the host machine is port 80, which is by the sharelatex container.

    Server Pro also optionally supports for project files and full project history as well as being able to proxy access to the main . For more information, see our guide on pages.

    If required, MongoDB and Redis can be externalised using environment variables to point to external services. For more information, see if you are using Docker Compose and if using the Overleaf Toolkit.

    Compiling

    For , the sharelatex container will orchestrate the creation of new containers to handle project compiles, it does this via the Docker socket on the host machine. You can read more about the editor and end-to-end compile/caching process .

    Networking

    Communication between containers is facilitated through Docker's internal DNS resolution via a dedicated bridge network, and no firewalls are enabled. By default, the above services use their respective standard ports but are configurable by environment variables. The sharelatex container uses port 80 for external web access (served by Nginx), the mongo container uses port 27017 and redis uses port 6379.

    For customers using our managed solution , you can optionally for terminating HTTPS connections using Nginx via an environment variable. Alternatively, you can use your existing TLS proxy.

    You can view a diagram explaining the flow of requests .

    Summary

    • Outside the Docker network, only port 80 is accessible and bound to Nginx. Note: The sharelatex container runs many that communicate with each other via HTTP. However, these ports are not accessible from outside the Docker network.

    • Inside the Docker network, Overleaf services, MongoDB, Redis and Git Bridge can talk to each other freely.

    • Inside containers, no network is available.

    Air-gapped/offline deployments

    Overleaf Community Edition and Server Pro have both been architected to work offline, which means that it may not always be possible to reach the quay.io registry to pull the required sharelatex , sharelatex-pro and TeX Live images. This is not a problem as Docker provides tooling for exporting and importing images that will help you with an offline/air-gapped deployment.

    At a high level, you'll download the required images on a device with internet connectivity, export them to a portable device (or transfer them using SCP/Rsync), and import them on the air-gapped server.

    To do this, you'll need to complete the following steps:

    • Pull all the required images (sharelatex, sharelatex-pro, git-bridge, mongo, redis + any required for use with ) on a machine with internet connectivity

      • docker pull quay.io/sharelatex/sharelatex-pro:5.1.1

      • docker pull quay.io/sharelatex/git-bridge:5.1.1 (tag must be the same as sharelatex-pro)

      • docker pull mongo:6

    • For each of the pulled images, you'll need to then export them to a .tar file. For example, docker save quay.io/sharelatex/sharelatex-pro:5.1.1 > sharelatex-pro:5.1.1.tar

    • Using your preferred method, transfer the .tar files from your internet-connected machine to the offline/air-gapped server

    • For each of the .tar files, use the docker load command to load the image from the .tar file. For example, docker load < sharelatex-pro:5.1.1.tar

    • Finally, run the docker images command to view/confirm the loading of images was successful and that they are available

    By default, when you run the bin/up command, the Toolkit will attempt to automatically pull each of the TeX Live images set via ALL_TEX_LIVE_DOCKER_IMAGES in config/variables.env. As your deployment is air-gapped this will fail -- you can stop this by using SIBLING_CONTAINERS_PULL=false in config/overleaf.rc.

    Hardware requirements

    When provisioning hardware to run Overleaf, the main factor to consider is how many concurrent users will be running compiles.

    For example, if you have a license for 100 total users, but only expect ~5 to be working at the same time, the minimal install will be sufficient. If you expect a higher proportion to be working (and compiling) simultaneously, you should consider provisioning a server with a higher specification.

    Minimal install

    A minimum base requirement of 2 cores and 3GB memory is required for basic operations with around 5 concurrent users. This minimum requirement will also be sufficient for larger groups where there is less concurrent usage, or where it is OK for compile times to be longer during heavier usage.

    Username migration

    From a login perspective, the primary identifier for a user is their email address. If you are migrating from locally based authentication to SSO or you're migrating from one IdP to another, you may be required to update users email addresses.

    To help with this, a script is provided that will migrate user emails using a CSV file with the following format:

    oldEmail,newEmail

    After performing some validation checks, the script will iterate through the CSV file and update the users' email addresses from oldEmail to newEmail.

    Project management

    Viewing a projects audit log

    Administrators can see an Audit Log for each project. This audit log shows events such as when link-sharing changed between private/token-based, when invites were sent/accepted and when a user joined the project using a token. Administrators can view these logs on a per-project basis via Your Instance -> Admin -> Manage Users then:

    • Search for the user

    Git integration

    The Git integration is available since Server Pro 4.0.1.

    User documentation for this feature can be found .

    If you’re using the Toolkit, the git-bridge can be enabled by setting GIT_BRIDGE_ENABLED=true in your config/overleaf.rc file.

    For users running a custom docker-compose.yml, add the following container configuration to your compose file:

    You’ll also need to add a link to the git-bridge container in the sharelatex container, and define new environment variables:

    docker-compose.yml to Toolkit migration

    If you're currently using Docker Compose via a docker-compose.yml file, migrating to the Toolkit can make running an on-premises version of Overleaf easier to deploy, upgrade and maintain.

    To migrate, you'll need to convert your existing Docker Compose setup into the format used by the Toolkit. This process involves copying existing configuration into the Toolkit.

    This guide will walk you through each step of this process, ensuring a smooth migration from Docker Compose to the Toolkit.

    These instructions are for v4.x and earlier. Therefore all variables use the SHARELATEX_ prefix instead of OVERLEAF_

    ls -l
    drwxr-xr-x 3 fry fry  4096 Aug 30 14:16 bin
    -rw-r--r-- 1 fry fry  6465 Aug 30 14:16 CHANGELOG.md
    drwxr-xr-x 2 fry fry  4096 Sep  6 12:43 config
    drwxr-xr-x 5 fry fry  4096 Aug 30 14:22 data
    drwxr-xr-x 3 fry fry  4096 Aug 30 14:16 doc
    drwxr-xr-x 3 fry fry  4096 Aug 30 14:16 lib
    -rw-r--r-- 1 fry fry 34520 Aug 30 14:16 LICENSE
    -rw-r--r-- 1 fry fry  1178 Aug 30 14:16 README.md
    SERVER_PRO=true

    Uninstall Server Pro Completely: This will decommission Server Pro and remove the software entirely.

  • Switch to Community Edition: This will switch your instance from Server Pro to Community Edition and preserve the database of users and projects with full project history.

  • Managed Users
    Single Sign-On (SSO)
    invite the end users
    overleaf.com
    exporting projects
    uploading them
    overleaf.com
    overleaf.com
    overleaf.com/register
    here
    Sandboxed Compiles
    LDAP
    SAML
    here
    here
    Environment variables
    docker-compose documentation
    Git integration
    S3 compatible storage
    Overleaf documentation site
    Adding LaTeX user help
    Configuring Overleaf
    Toolkit settings
    Sandboxed Compiles
    here
    Overleaf Toolkit
    enable a TLS proxy
    here
    services
    Sandboxed Compiles

    docker pull redis:6.2

  • docker pull quay.io/sharelatex/texlive-full:2024.1

  • TeX Live images
    Sandboxed Compiles
    Persistent data

    The standard Server Pro license allows you to run the application in a production environment as well as one in a non-production/sandbox environment; it is highly recommended that you provision a non-production environment for testing.

    The standard Server Pro license allows you to run the application in a production environment as well as one in a non-production/sandbox environment; it is highly recommended that you provision a non-production environment for testing.

    can be configured (in milliseconds) to modify the deleted users/projects expiration delay (defaults to 90 days).

    Compilations can now be stopped when using non-sandboxed compiles.

    here
    Release Notes 5.x.x
    See full migration instructions
    database
    here

    The standard Server Pro license allows you to run the application in a production environment as well as one in a non-production/sandbox environment; it is highly recommended that you provision a non-production environment for testing.

    Project chat history won't be exported.

    --output-dir

    Directory for storing all users' export files

    --log-level

    Log level s supported: trace|debug|info|warn|error|fatal

    Default: error

    --help

    Show help

    --user-id

    The user ID (required unless using --export-all or --project-id)

    --project-id

    Export a single project (cannot be used with --user-id or --export-all)

    --list

    List user's projects (cannot be used with --output)

    --output

    Output zip file (for single export operations)

    --export-all

    Export all users' projects (requires --output-dir)

    consistent backup
    Validation

    Before running the migration the <csv_file> will be checked to ensure that:

    • For each row, both the oldEmail and the newEmail are valid email addresses

    • There are no duplicate entries, for example, you are not attempting to update different users to the same new email address or you are attempting to update the same user account with an already-used email address

    Usage

    Flags

    Name
    Description

    --commit

    The inclusion of the --commit flag will actually do the migration. When omitted, the migration will happen in a dry-run mode where no changes are made but validation is still performed. Default:false

    --continue

    The --continue flag will continue the migration process if a user account if the email address on the account has already been updated

    --ignore-missing

    The --ignore-missing flag will continue the migration process if a user account was not found

    --admin-id

    The --admin-id should be set to the ID of the Administrator who is performing the migration and will be used for audit log entries. Go to Admin > Manage Users and search for your email address and click on the first result to find your user-id.

    <csv_file>

    The <csv_file> is the file with the old and new email addresses in

    Completion

    While executing the migration script, depending on the flags that you have chosen will determine whether an error is logged to the console and then continues, or logged to the console and exits. If the script terminates prematurely due to an error, it will exit with code 1 to denote that it was unsuccessful.

    On completion of the migration, the script will log the number of successful, failed, and skipped updates to the console. If the migration is completed successfully it will exit with code 0.

    Click the Projects tab

  • Select a project

  • Click on the (i) icon

  • Click the Audit Log tab

  • If a project is shared with a named collaborator (using their email address), once the recipient has joined, they will be listed on the Share modal with their permission and visible to the project owner. This information will also be shown to Administrators when viewing the Project Info tab for the project via the admin panel.

    Recovering deleted documents

    1. Log in using your administrator credentials

    2. Click Admin and select Manage Users

    3. Using the search field, enter the email of the user you want to restore the doc for

    4. Click their email address in the list of returned results to open their user info page

    5. Click the Projects tab and use the search field to search for the project

    6. Click on the information icon next to the project name to open the Project Info

    7. Click on the Deleted Docs tab

    8. Click on the Undelete button next to the deleted doc to restore it back to the users project.

    The restored file will take the following format: FILENAME-TIMESTAMP.EXTENSION. For example, a restored version of main.tex will be restored to the root of the project with the file name main-2024-02-23-130441542.tex.

    Transferring ownership of a project

    The admin panel in Server Pro has a dedicated page per project. You can either get to it by searching for the user on "/admin/user", then going to their Projects tab, finding the project in the list and clicking on the infomration icon; or by directly navigating to the page with a known project-id https://your-instance-url/admin/project/. On the project info page, you can find a Transfer Ownership button, which opens a modal where you can specify any user as the new owner. The new owner does not need to be an existing collaborator on the project.

    Note that the previous owner will be added as a collaborator with read-and-write access to the project as part of the ownership transfer process.

    Updating project compile timeout

    The default compile timeout for projects is currently set to 180 seconds. Changing this value is possible and requires a two-step process.

    First, edit the config/variables.env file and add the COMPILE_TIMEOUTenvironment variable and set it's value to the desired timeout in seconds. For example, COMPILE_TIMEOUT=300 for 5 minutes.

    It's not worth pushing the timeout past 10 minutes. If you do, you'll most likely hit a timeout in another component of the application.

    Once this change has been made, you'll need to recreate the sharelatex container by running the bin/up -dcommand.

    Setting this environment variable will update the timeout value for new users only it won't be applied in retrospect to existing users as it is populated when the user is first created.

    To adjust the timeout for existing users, you'll need to change each user record in the database. We advise being very cautious about doing this, and recommend taking a consistent backup before making any changes.

    You can find information about performing back-ups here.

    To update the compile timeout value on all existing users you'll need to run the following shell command on the Docker host:

    You will need to substitute <value> in the above query with the desired timeout value in seconds.

    After the command completes, you should see an acknowledgement with the number of modified records. You can then type exit and then press the enter key to return to the host shell.

    Tracking project access

    It is possible to see who and when a project is loaded with the following command:

    This will give both the timestamp, user_id and project_id.

    Clone the Toolkit repository

    First, let's clone this Toolkit repository to the host machine:

    Next run the bin/init command to initialise the Toolkit with its default configuration.

    Setting the image and version

    In the docker-compose.yml file the image and version are defined in the component description:

    When using the Toolkit, the image name is automatically resolved; the only requirement is to set SERVER_PRO=true in config/overleaf.rc to pick the Server Pro image or SERVER_PRO=false to use Community Edition.

    The desired Server Pro/Community Edition version number is set in the config/version file. The Toolkit requires a specific version number like "4.2.3". In case you are using latest, you can use bin/images to find the image id of your local latest version, then use the release notes for 2.x.x, 3.x.x, 4.x.x or 5.x.x to map the image id to the version.

    If you are sourcing the image from your own internal registry you can override the image the Toolkit uses by setting OVERLEAF_IMAGE_NAME. You do not need to specify the tag as the Toolkit will automatically add it based on your config/version file.

    Configuring external access

    By default, Overleaf will listen on 127.0.0.1:80, only allowing traffic from the Docker host machine.

    To allow external access, you’ll need to set the OVERLEAF_LISTEN_IP and OVERLEAF_PORT in the config/overleaf.rc file.

    Environment variable migration

    You’ll likely have a set of environment variables defined in the sharelatex service:

    Each of these variables should be copied, with several exceptions we’ll list later, into the Toolkit’s config/variables.env file, ensuring the following form (note the use of = instead of :):

    As mentioned above, there are several exceptions, as certain features are configured differently when using the Toolkit:

    • Variables starting with SANDBOXED_COMPILES_ and DOCKER_RUNNER are no longer needed. To enable Sandboxed Compiles, set SIBLING_CONTAINERS_ENABLED=true in your config/overleaf.rc file.

    • Variables starting with OVERLEAF_MONGO_, OVERLEAF_REDIS_ and the REDIS_HOST variable are no longer needed. MongoDB and Redis are now configured in the config/overleaf.rc file using MONGO_URL, REDIS_HOST and REDIS_PORT.

    For advanced configuration options, refer to the config/overleaf.rc documentation.

    NGINX Proxy

    For instructions on how to migrate nginx, please see TLS Proxy.

    Volumes

    ShareLaTeX

    The location of the data volume for the sharelatex container will need to be set using OVERLEAF_DATA_PATH in the config/overleaf.rc file.

    MongoDB

    The location of the data volume for the mongo container will need to be set using MONGO_DATA_PATH in the config/overleaf.rc file.

    Redis

    The location of the data volume for the redis container will need to be set using REDIS_DATA_PATH in the config/overleaf.rc file.

    # Overleaf Toolkit users
    $ bin/docker-compose exec sharelatex /bin/bash -ce "cd /overleaf/services/web && node modules/server-ce-scripts/scripts/export-user-projects.mjs --export-all --output-dir=/var/lib/overleaf/data/exports"
    
    # Legacy docker-compose.yml users
    docker exec sharelatex /bin/bash -ce "cd /overleaf/services/web && node modules/server-ce-scripts/scripts/export-user-projects.mjs --export-all --output-dir=/var/lib/overleaf/data/exports"
    # add to config/variables.env
    OVERLEAF_NAV_TITLE=Our Overleaf Instance
    # add to config/variables.env
    OVERLEAF_HEADER_IMAGE_URL=https://mysite.somewhere.com/img/logo.png
    [
      {
        "text": "Some link",
        "url": "http://example.com/somelink",
        "class": "subdued",
        "only_when_logged_out": true
      },
      {
        "text": "Help",
        "class": "subdued",
        "dropdown": [
          {
            "text": "Documentation",
            "url": "/learn"
          },
          {
            "text": "Contact Admin",
            "url": "http://example.com/contact"
          }
        ]
      }
    ]
    
    # add to toolkit/variables.env
    OVERLEAF_HEADER_EXTRAS=[{"text":"Some link","url":"http://example.com/somelink","class":"subdued","only_when_logged_out":true},{"text":"Help","class":"subdued","dropdown":[{"text":"Documentation","url":"/learn"},{"text":"Contact Admin","url":"http://example.com/contact"}]}]
    [
      {
        "text": "This is an example text footer entry!"
      },
      {
        "text": "This is an example URL footer link!", "url" : "/my-first-link.htm"
      }
    ]
    # add to config/variables.env
    OVERLEAF_LEFT_FOOTER=[{"text": "This is an example text footer entry!"}]
    OVERLEAF_RIGHT_FOOTER=["text": "This is an example URL footer link!", "url" : "/my-first-link.htm"]
    docker cp <csv_file> sharelatex:/overleaf/services/web/<csv_file>
    docker exec sharelatex /bin/bash -c "cd /overleaf/services/web;node ./modules/server-ce-scripts/scripts/migrate-user-emails.js [--commit] [--continue|--ignore-missing] [--admin-id=ADMIN_USER_ID] <csv_file>"
    echo 'db.users.updateMany({}, {$set: {"features.compileTimeout": <value>}})' | docker exec -i mongo mongosh --quiet localhost/sharelatex
    docker exec sharelatex bash -c 'grep "join project request" /var/log/overleaf/web.log'
    git clone https://github.com/overleaf/toolkit.git ./overleaf-toolkit
    version: '2.2'
    services:
        sharelatex:
            restart: always
            # Server Pro users:
            # image: quay.io/sharelatex/sharelatex-pro
            image: sharelatex/sharelatex:3.5.13
    environment:
        OVERLEAF_APP_NAME: Overleaf Community Edition
        OVERLEAF_PROXY_LEARN: 'true'
        …
    OVERLEAF_APP_NAME=Overleaf Community Edition
    OVERLEAF_PROXY_LEARN=true

    If you are considering using a NFS (Network File System) based file system for your small instance please have a look at this section in the Troubleshooting section.

    Scaling

    As a rule of thumb, to provide a high and consistent level of service, 1 CPU core and 1GB of memory should be added to the minimal install for every 5-10 concurrent users.

    This should only be taken as a guide, as factors such as the size of typical documents (larger documents use up more compile resources), how often users compile, and what tolerance there is for longer compile times during heavy usage, all affect the level of provisioning required.

    Many of our customers look to deploy Server Pro organization wide, or across large teams. In those situations, it's difficult for us to advise on specific setup requirements, because the use cases and underlying hardware available can be quite varied.

    Example 1
    Example 2

    If you're running a Server Pro installation for 300 total users, and regularly expect 30-60 of those users to be compiling documents at the same time, 8GB and 7 Cores (5 cores + 5GB + base of 2 cores & 3GB) should provide sufficient resources for your users to have a consistently high level of service.

    To give an example of the hardware requirements for a larger deployment, a Server Pro installation for 1,000 total users has been set up successfully using a single server provisioned with two 4-core processors and 32GB of system memory. This has been sufficient for the team’s needs over the past year of usage.

    If you have installed Overleaf at your organization and would like to share details of your setup to help us add to this section, please let us know.

    Customers who are exceeding the limits of a single large server can take a look at Horizontal scaling for Server Pro.

    Storage

    We advise against using Network File System (NFS)/Amazon EFS/Amazon EBS for project/history storage in larger setups and explicitly do not support it for horizontal scaling.

    The behavior of these file systems is not providing the necessary performance and reliability that Server Pro needs when running at a high scale. When the file system cannot keep up with the load, the application stalls from too many blocking IO operations. These stalls can lead to overrun Redis-based locks, which in turn can result in corrupted project data.

    We advise using S3 compatible object storage instead. Slow S3 performance in turn only affects the upload/download of files, which only leads to an elevated number of open connections to your S3 provider and in turn does not affect the behavior of the rest of the application. Additionally, Server Pro can specify reasonable timeouts on S3 requests, which is not possible for file system/IO operations at the application level.

    For reference, GitLab is following a similar stance of not supporting NFS/Amazon EFS with its self-managed offering.

    Nginx-specific configuration for large deployments

    By default, Overleaf Server instance limit the number of connections to 768. This includes persistent Websocket connections, top-level HTML navigation and ajax requests. Once the limit is hit, the editor might not be able to connect, the editor page might not load entirely and compile requests can fail. Nginx will return status 500 responses and log worker_connections are not enough while connecting to upstream into var/log/nginx/error.log inside the sharelatex container.

    The worker_connections setting limits the number of concurrent connections nginx will accept per worker. The number of workers is controlled by the worker_processes setting and is set to 4 by default in our nginx configuration.

    Nginx doesn't do much work compared to other parts of the system, so these limits act as a safety preventing too many connections from overwhelming the system. It's preferable to drop some excess connections early rather than slowing down every connection.

    Overleaf Server instances expose environment variables for adjusting these nginx settings:

    • NGINX_WORKER_PROCESSES for worker_processes (default 4)

    • NGINX_WORKER_CONNECTIONS for worker_connections (default 768)

    • NGINX_KEEPALIVE_TIMEOUT for keepalive_timeout (default 65)

    When running another proxy in front of the sharelatex container (e.g. for TLS termination), the NGINX_KEEPALIVE_TIMEOUT in the Overleaf Server instance needs to be larger than the previous proxy. E.g. with another nginx process on the Docker host nginx-host, here are two examples:

    • Default value NGINX_KEEPALIVE_TIMEOUT, use keepalive_timeout 60s (default value in upstream) in nginx-host

    • Custom value NGINX_KEEPALIVE_TIMEOUT=100s, use (custom value in upstream) in nginx-host

    CPU speed

    LaTeX is a single threaded program, meaning it can only utilize one CPU core at a time. The CPU is also the main limitation when compiling a document. Therefore the faster the single core performance of your CPU the faster you will be able to compile a document. More cores will only help if you are trying to compile more documents than you have free CPU cores.

    When authenticating a git client, users need a Personal Access Token. Users can manage the Personal Access Tokens through the application UI (see the documentation).

    We recommend you monitor your host resources after enabling the git-bridge. The load increase will depend on the number of users accessing the feature and the type of projects hosted in your instance (larger projects will generally be more resource intensive).

    Swapping projects to S3

    The Git integration stores a complete git repository on disk for each project that gets cloned by a user. If you have limited disk space, you can activate a swap job that will move repositories that are less used to AWS S3. If a swapped repository is needed again, it gets moved back to the disk. The following environment variables control the swap job:

    Name
    Description

    GIT_BRIDGE_SWAPSTORE_TYPE

    Set this to "s3" to activate the swap job.

    GIT_BRIDGE_SWAPSTORE_AWS_ACCESS_KEY

    Your AWS access key

    GIT_BRIDGE_SWAPSTORE_AWS_SECRET

    Your AWS secret

    GIT_BRIDGE_SWAPSTORE_S3_BUCKET_NAME

    This bucket will contain the zipped git repositories

    GIT_BRIDGE_SWAPSTORE_AWS_REGION

    The bucket’s region

    GIT_BRIDGE_SWAPJOB_MIN_PROJECTS

    How many projects to keep on disk, at a minimum. - Default: 50

    here
    here

    Doc version recovery

    If you never ran Server Pro version 5.0.1 or Community Edition version 5.0.1, or you started a brand new instance with 5.0.1, you do not need to run this recovery process.

    Updates to this page:

    • (2024-04-22 13:40 BST): Added step "Stop new updates from getting into the system and flush all changes to MongoDB".

    • (2024-04-23 11:45 BST): Account for broken flushes in 5.0.1 and skip flushes when 5.0.2 was started.

    The duration of the recovery will depend on the number and size of projects in your instance and the storage backend used by the history store for chunks (as defined in OVERLEAF_HISTORY_CHUNKS_BUCKET).

    The recovery process will delay the application start inside the Server Pro container. The site will appear offline during that time. We only support running the recovery from a single instance of the Server Pro container, all other horizontal scaling workers need to be offline.

    You can stop and resume the recovery process if needed.

    Based on our performance tests, the recovery process can process approximately 10k small projects per minute on modern hardware (3GHz CPU clock speed and local NVMe storage). As an example, for an instance with 100k projects, schedule a maintenance window that allows at least 10+2min of downtime. Use the following query to estimate the number of projects in your instance:

    Please read the following recovery steps in full before you start. Server Pro customers are more than welcome to reach out to [email protected] with any questions.

    Recovery process

    1

    Pull release images

    Pull the 5.0.3 release images.

    2

    Templates

    With Server Pro, you have the ability to create and publish your own templates, within your self-hosted environment, as well as re-distribute downloaded templates from the Template Gallery on overleaf.com.

    Setting up the templates user

    In Server Pro, a single user is responsible for publishing the curated list of templates that are visible on your local template gallery /templates.

    To do this, you'll need to set the environment variable OVERLEAF_TEMPLATES_USER_ID in toolkit/config/variables.env to the ID of the user who will be responsible for template management within your instance, for example:

    To obtain the ID of the user you wish to publish public templates:

    1. Log in using an Administrator account and go to Admin > Manage Users.

    2. Search for the user using their email address and click through to their user admin page. There you will find the ID:

    3. Copy that ID and use it to set the environment variable OVERLEAF_TEMPLATES_USER_ID

    Altering the configuration files of Server Pro typically necessitates the recreation of one or more containers. This procedure will cause user disconnections and lead to a period of downtime. As such, we advise implementing these modifications during prearranged maintenance periods.

    Publishing templates

    If you'd like to make templates available to all of your on-premise Server Pro users you'll need to:

    1. Log in as the templates user.

    2. As the templates user, create or upload a project containing the template's source code and make sure it compiles.

    3. In the editor's left-hand menu, choose Manage Template.

    4. Enter a custom description of the template

    Did you know that you can transfer quality, pre-built LaTeX templates that are available on the at to your on-premise instance of Server Pro? For more information see the Transferring templates section below.

    Unpublishing templates

    If you'd like to unpublish a template you'll need to:

    1. Log in as the templates user.

    2. Open the previously existing project containing the template's source code.

    3. In the editor's left-hand menu, choose Manage Template.

    4. Once the confirmation popup is displayed, click Unpublish.

    Once this has been done, the template should have been removed from the templates list.

    Linking to your templates

    Your gallery

    On the templates gallery page, /templates, templates are grouped together using the tag which the user assigns to the projects, e.g. Journals, Reports etc. To see all templates add /all to the URL /templates/all, which can also be used as the default URL if you do not wish to use tags for groupings.

    Like-wise, you can view/link to templates within a specific category by appending the tag name to the templates URL, for example: /templates/journals.

    Did you know that if you tag a project multiple times it will appear in multiple groups.

    New project menu

    When a user creates a new project, they can be shown customized links to template categories. These links are set via the OVERLEAF_NEW_PROJECT_TEMPLATE_LINKS environment variable in toolkit/config/variables.env, for example:

    Transferring templates from overleaf.com

    As Server Pro has been architected to work offline, there isn't an automated way to integrate gallery templates into your on-premise installation, it is however possible to do this manually on a per template basis.

    By default, Server Pro is configured to use a basic scheme version of TeXLive for compiles. This basic version is lightweight and only contains a very limited subset of LaTeX packages which, will most likely result in missing package errors for your users when attempting to use templates from on your local on-premise instance.

    Unfortunately, whilst there isn't an automatic way to install missing packages, we do have a configurable setting within Server Pro that will allow your users to compile projects with access to more packages, and in a more secure way. This feature is called (also known as Sibling Containers).

    To ensure that downloaded templates are compatible with your on-premise Server Pro instance, we highly recommend that you enable as this feature will provide your users with access to the same TeX Live environment as that on . These images contain the most popular packages and fonts and have already been tested against our gallery templates.

    You can find additional information about configuring what TeX Live versions users are able to choose from within their project along with setting the default TeX Live image version for new projects in the section of our documentation.

    1. Navigate to the on and locate the required template, for example

    2. Click on the Open as Template button

    3. Click on the project menu and choose Download Source

    4. Next, log into the on-premise Server Pro account

    The user can then use this newly uploaded template within their own account, or, as the templates user, you can publish it for other users to use.

    An account is required.

    Troubleshooting

    This page is designed to help you deal with common issues you may encounter while running your on-premises version of Overleaf.

    If you are using an earlier version please use sharelatex instead of overleaf in path names.

    Running Overleaf with an NFS filesystem

    Mounting a NFS filesystem in an Overleaf container is technically possible, but it's not recommended and can result in different types of performance errors.

    One common error that compiles see is:

    EBUSY: resource busy or locked, unlink '/var/lib/overleaf/data/compiles/62f3d57bef7cf9005c364e75-62f3d57bef7cf9005c364e7a/.nfs573663533034825247625441'

    In particular we advise against using NFS backed filesystems for ephemeral data, like the directories use for compilation data. We recommend using a local scratch disk, preferably a local SSD for the following directories:

    For docker-compose based setups, we suggest just overriding the bind-mount from NFS, which avoids changing paths in the application. Here's an example of a docker-compose config excerpt with the use of a scratch disk that is mounted at /scratch:

    There is no need to migrate any existing files from the NFS to their new home after the update. The LaTeX compiler can recreate all the files with a full compilation run again.

    Running Overleaf on Windows or macOS results in the mongoservice not starting

    If you're running Overleaf on Windows or macOS, the mongo service may fail to restart, with an error:

    To avoid this error, the data needs to be stored in a volume rather than a bind mounted directory (see ). To store data inside Docker volumes mounted inside the MongoDB and Redis containers, add the following to config/docker-compose.override.yml (create this file if it doesn't exist yet):

    Upgrading to Redis 6.2 results in a restart loop

    Use the docker logs redis command to output a copy of the logs.

    Fatal: Can't initialize Background Jobs

    The full output will look something like this:

    Incorrect orientation of template gallery preview/thumbnail images

    On occasion, the preview/thumbnail images generated by Server Pro can be created in the wrong orientation and require manual intervention to correct. These images are stored in /var/lib/overleaf/data/template_files/ (>= 5.0.3) and /var/lib/sharelatex/data/template_files/ (earlier).

    We recommend backing up this folder before making any changes.

    You'll need to follow the steps below for each affected template:

    Please verify that you have enabled system calls. For pdflatex, this is 'pdflatex -shell-escape'.

    The \write18 command is disabled by default in the Community Edition due to all compiles happening within the same sharelatex container, and all things considered, it is the safer default option for this particular type of installation.

    Should you wish, you can enable this for pdflatex by creating a latexmkrc file in the root of your project with the content $pdflatex = 'pdflatex --shell-escape'; and then try recompiling.

    The standard Server Pro license allows you to run the application in a production environment as well as one in a non-production/sandbox environment; it is highly recommended that you provision a non-production environment for testing.

    S3 migration

    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.

    Release notes 0.x.x

    Release notes 0.6.x

    Server Pro 0.6.3

    Getting help

    The Doctor

    The Overleaf Toolkit comes with a handy doctor script, to help with debugging. Just run bin/doctor and the script will print out information about your host environment, your configuration, and the dependencies the Toolkit needs. This output can also help the Overleaf support team to help you figure out what has gone wrong, in the case of a Server Pro installation.

    Migrating to LDAP or SAML

    Thinking about changing how your users log in to Overleaf Server Pro? You're in the right place! This guide is for you if you're currently using our native username and password login and want to switch to an external one like LDAP/Active Directory or SAML 2.0. It also covers how to switch back if you ever need to.

    We’ll use LDAP in our examples, but don't worry—the process is exactly the same if you're using SAML. Let's dive in!

    Switching from native authentication

    Let's imagine you've been running Server Pro for a while or have recently upgraded from the Community Edition. You have user, Alice, who logs in with their email, [email protected], and a password they created in Overleaf. Behind the scenes, their Overleaf accounts look something like this:

    What is the Overleaf Toolkit?

    The Overleaf Toolkit is the recommended deployment method for on-premises installations of the Community Edition and Server Pro and has been designed to work with the most common environment: a single physical server or virtual machine. The Toolkit uses docker compose to manage your server's Docker containers and provides a set of scripts which wrap docker commands to assist with the more technical side of managing an on-premises version of Overleaf.

    The bin/docker-compose wrapper

    The bin/docker-compose

    Overleaf Server Pro and the Professional Plan are different products with separate licensing requirements. An Overleaf Professional plan subscription will not grant you access to, or a license for, Overleaf Server Pro. For more information on Server Pro .

    Overleaf Server Pro and the Professional Plan are different products with separate licensing requirements. An Overleaf Professional plan subscription will not grant you access to, or a license for, Overleaf Server Pro. For more information on Server Pro .

    It is important to ensure that you take a before every major version upgrade to enable you to roll back should you require it.

    git-bridge:
        restart: always
        image: quay.io/sharelatex/git-bridge:4.0.0 # tag should match the `sharelatex` container tag
        volumes:
            - ~/git_bridge_data:/data/git-bridge
        container_name: git-bridge
        expose:
            - "8000"
        environment:
            GIT_BRIDGE_API_BASE_URL: "http://sharelatex:3000/api/v0/" # "http://sharelatex/api/v0/" for version 4.1.6 and earlier
            GIT_BRIDGE_OAUTH2_SERVER: "http://sharelatex"
            GIT_BRIDGE_POSTBACK_BASE_URL: "http://git-bridge:8000"
            GIT_BRIDGE_ROOT_DIR: "/data/git-bridge"
        user: root
        command: ["/server-pro-start.sh"]
    sharelatex:
        links:
            - git-bridge
        environment:         
             GIT_BRIDGE_ENABLED: true
             GIT_BRIDGE_HOST: "git-bridge"
             GIT_BRIDGE_PORT: "8000"
             V1_HISTORY_URL: "http://sharelatex:3100/api"
    # TLS proxy configuration (optional)
    NGINX_ENABLED=false
    NGINX_CONFIG_PATH=config/nginx/nginx.conf
    NGINX_HTTP_PORT=80
    # Replace these IP addresses with the external IP address of your host
    NGINX_HTTP_LISTEN_IP=127.0.1.1 
    NGINX_TLS_LISTEN_IP=127.0.1.1
    TLS_PRIVATE_KEY_PATH=config/nginx/certs/overleaf_key.pem
    TLS_CERTIFICATE_PATH=config/nginx/certs/overleaf_certificate.pem
    TLS_PORT=443

    GIT_BRIDGE_SWAPJOB_LOW_GIB

    Low watermark for swapping. The swap job will move projects until disk usage is below this value. - Default: 128 GB

    GIT_BRIDGE_SWAPJOB_HIGH_GIB

    High watermark for swapping. The swap job will start swapping when disk usage reaches this value. - Default: 256 GB

    GIT_BRIDGE_SWAPJOB_INTERVAL_MILLIS

    The amount of time between checking disk usage and running the swap job. - Default: 3600000 ms = 1 hour

    keepalive_timeout 90s
    Talk to our Sales team

    If you see the line Fatal: Can't initialize Background Jobs, this may be related to the version of Docker currently in use. Updating to a version >=20.10.10 should resolve this issue.

    For more information, see the Redis upstream issue here: https://github.com/redis/redis/issues/12362

    Navigate to your instances template gallery (/templates/all), open an affected template, and copy the ID from the URL (https://your-instance-url/templates/6645d346c224815e9460a695)
  • Run the following command from the Docker host:

  • In the above example, you'll need to replace the ID 6645d346c224815e9460a695 with the one from the affected template and update the path if appropriate.

    Failed to start up WiredTiger under any compatibility version.
    Reason: 1: Operation not permitted
    the mongo image documentation for more details
    services:
      sharelatex:
        environment:
          SANDBOXED_COMPILES_HOST_DIR: /scratch/compiles/
        volumes:
          - nfs:/var/lib/overleaf/data
          - /scratch/cache/:/var/lib/overleaf/data/cache
          - /scratch/compiles/:/var/lib/overleaf/data/compiles
          - /scratch/output/:/var/lib/overleaf/data/output
          - /scratch/tmp/:/var/lib/overleaf/tmp
    volumes:
      mongo-data:
      redis-data:
    
    services:
      mongo:
        volumes:
          - mongo-data:/data/db
    
      redis:
        volumes:
          - redis-data:/data
    1:M 11 Feb 2024 15:19:22.609 # Server initialized
    1:M 11 Feb 2024 15:19:22.609 # Fatal: Can't initialize Background Jobs.
    1:C 11 Feb 2024 15:19:26.055 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
    docker exec sharelatex /bin/bash -c "mogrify -rotate 90 /var/lib/overleaf/data/template_files/6645d346c224815e9460a695_*{thumbnail,preview}"
    consistent backup

    When performing an upgrade of Server CE/Pro, we recommend upgrading to the latest release of the deployed major version before upgrading to the latest release of the next major version. If your deployment is more than one major version behind latest, you will be required to perform a multi-stepped upgrade.

    For example, if you're running 3.5.10, you'll need to upgrade to 3.5.13 -> Perform the Full Project History migration -> 4.2.9 -> 5.5.4.

    You should never skip major versions (3.5.10 -> 5.5.4). If you are using the Toolkit, and are more than one major version behind latest, you must not use the bin/upgrade script as you will be need to perform a manual multi-stepped upgrade.

    .
  • Run bin/up -d to recreate the sharelatex container and apply the change.

  • Click the Publish button

  • Go to the project dashboard and tag the template with the name of the cateogry you'd like it to appear in. For example Presentations.

  • Click the New Project button from the projects dashboard and choose Upload Project

  • Click the Select a .zip file button and choose the downloaded template zip file

  • Template Gallery
    overleaf.com
    overleaf.com
    overleaf.com
    Sandbox Compiles
    Sandbox Compiles
    overleaf.com
    Changing the TeX Live Image
    Template Gallery
    overleaf.com
    IEEE Photonics Journal Paper Template - Example Submission
    overleaf.com

    Fix bug in Sibling Containers feature

  • Basic auto-complete for \ref{} commands

  • Assorted bug fixes

  • Server Pro 0.6.2

    • Fix bug with login redirect flow

    • Enable Track Changes for all users

    • Various bug fixes

    • Protect user settings pages with "Sudo Mode", Users will be prompted for their password when accessing the settings page.

    Server Pro 0.6.1

    • Handle errors in History feature

    Server Pro 0.6.0

    • New Track Changes feature

    • Various bug fixes

    Release notes 0.5.x

    Server Pro 0.5.11

    • Sandboxed Compiles with Sibling Containers

    • Various bugfixes

    Server Pro 0.5.9

    • Fixed an issue where logins were not being counted for LDAP users

    • Internal improvements to page rendering

    Server Pro 0.5.8

    • New Launchpad page to help with first setup: (/launchpad)

    • Fixed an issue with project invites and Saml

    • Various bugfixes

    Server Pro 0.5.4

    • Fix an issue with SHARELATEX_HEADER_NAV_LINKS option

    Server Pro 0.5.3

    • Fix a bug where the /register link in nav-bar was not being hidden when using an external auth source.

    Server Pro 0.5.2

    • Correct an issue with LDAP configuration, requiring upgrade to a new configuration format.

    • Add an option to restrict project invites to existing user accounts

    Server Pro 0.5.0

    • New SAML integration option, link ShareLaTeX to SAML/Shibboleth/etc.

    • Improved LDAP integration, no configuration changes required

    • Option to have user details updated on every login (LDAP and SAML) SHARELATEX_LDAP_UPDATE_USER_DETAILS_ON_LOGIN

    • Code Check mode, shows tex errors in the editor

    • Improved support for plain-text emails

    • Show the current user email in the "Account" dropdown

    • Improved project search

    • Better cookie expiry behaviour

    • Improved spell-check underline effect

    • Old user accounts are automatically upgraded to modern feature set

    Release notes 0.3.0

    • All configuration of ShareLaTeX is now done via Environmental variables.

    • Much better LaTeX error parsing, include errors in .bbl files

    • Snappier feedback when changing image

    • Tags/folders can be deleted and renamed via side menu

    • Clone and zip uploads speed improvement

    • User is warned about overwriting files

    • Synctex is more acurate.

    • Prevention against massive projects effecting system

    • Multiple small bug fixes

    Release notes 0.2.0

    • Documents are now stored in their own collection, making projects thiner

    • Word count

    • lots of stability work including:

      • Better handling of poor connections over websockets

      • Seperation of web and api routes

    Release notes 0.1.3 and 0.1.4

    0.1.3 was mostly bug fixes. The notable thing for users running upgrading from old versions in 0.1.4 is user management, and the addition and removal of some settings parameters:

    User Management

    Public registration is now removed in the open source version. It is a significant security risk to allow public access to a LaTeX installation on your server, and most users have request some for of private user management. See [[Creating and managing users]] for an overview of how it now works.

    Added settings

    • appName - This should be set to the name of your ShareLaTeX install. E.g. "Acme Inc's ShareLaTeX Server".

    • adminEmail - The contact email address of whoever is responsible for running the server.

    Deprecated settings

    • websocketsUrl - This was the source of most problems with 0.1.2 and 0.1.3 so has been removed. The web service now proxies to the real-time service so the client does not need to know where to find it.

    Release notes 0.1.2

    The most significant change in this update is the inclusion of a new real-time service which handles the editor websocket connections. These were previously handled by the web service. If you are upgrading from a previous version of ShareLaTeX, there are some things you may need to update to get it all working:

    Installing the real-time service

    First make sure you actually have the real-time service installed:

    websocketsUrl

    You should add a new line to your config file to include the new websocketsUrl parameter:

    This should be the same as your siteUrl.

    Reverse proxy settings

    In development the editor connects to the real-time service at http://localhost:3026, a separate end point from the web service, hence the need for a configurable parameter. In production you likely have a reverse proxy set up, and need to forward any requests to /socket.io onto the real-time service rather than the web service.

    See the [[Nginx as a Reverse Proxy]] page for an Nginx example, particularly the location /socket.io block.

    The standard Server Pro license allows you to run the application in a production environment as well as one in a non-production/sandbox environment; it is highly recommended that you provision a non-production environment for testing.

    Users of the free Community Edition should open an issue on github.

    Users of Server Pro should contact [email protected] for assistance.

    In both cases, it is a good idea to include the output of the bin/doctor script in your message.

    Consulting with the Doctor

    Run the doctor script:

    You will see some output like this:

    Host Information

    The Host Information section contains information about the machine on which the Toolkit is running. This includes information about the type of Linux system being used.

    Dependencies

    The Dependencies section shows a list of tools which are required for the Toolkit to work. If the tool is present on the system, it will be listed as status: present, along with the version of the tool. For example:

    However, if the tool is missing, it will be listed as status: MISSING!, and a warning will be added to the bottom of the doctor output. For example:

    If any of the dependencies are missing, the Toolkit will almost certainly not work.

    Configuration

    The Configuration section contains information about the files in the config/ directory. In the case of config/overleaf.rc, the doctor also prints out some of the more important values from the file. If any of the files are not present, they will be listed as status: MISSING!, and a warning will be added to the bottom of the doctor output. For example:

    The above example shows a few problems:

    • The OVERLEAF_DATA_PATH variable is set to /tmp/overleaf, which is probably not a safe place to put important data

    • The MONGO_ENABLED variable is set to false, so the Toolkit will not provision it's own MongoDB database. In this case, we had better be sure to set MONGO_URL to point to a MongoDB database managed outside of the toolkit

    • the config/variables.env file is missing

    Warnings

    The Warnings section shows a summary of problems discovered by the doctor script. Or, if there are no problems, this section will say so. For example:

    OVERLEAF_TEMPLATES_USER_ID=56a8865231faeb5f07d69959
    OVERLEAF_NEW_PROJECT_TEMPLATE_LINKS='[
       {"name":"All Templates","url":"/templates/all"},
       {"name":"All Categories","url":"/templates"},
       {"name":"Reports","url":"/templates/reports"},  
       {"name":"External","url":"https://somewhere.com/templates/reports"}
    ]'
    $ grunt install:real-time
    # settings.coffee
    modules.exports =
        ...
        siteUrl: "http://sharelatex.example.com"
        websocketsUrl: "http://sharelatex.example.com"
        ...
    bin/doctor
    ====== Overleaf Doctor ======
    - Host Information
        - Linux
        - Output of 'lsb_release -a':
                No LSB modules are available.
                Distributor ID:	Ubuntu
                Description:	Ubuntu 22.04.5 LTS
                Release:	22.04
                Codename:	jammy
    - Dependencies
        - bash
            - status: present
            - version info: 5.1.16(1)-release
        - docker
            - status: present
            - version info: Docker version 28.0.4, build b8034c0
        - docker compose
            - status: present
            - version info: Docker Compose version v2.34.0
        - realpath
            - status: present
            - version info: realpath (GNU coreutils) 8.32
        - perl
            - status: present
            - version info: 5.034000
        - awk
            - status: present
            - version info: mawk 1.3.4 20200120
    - Docker Daemon
        - status: up
    ====== Configuration ======
    - config/version
        - status: present
        - version: 5.4.0
    - config/overleaf.rc
        - status: present
        - values
            - OVERLEAF_DATA_PATH: data/overleaf
            - OVERLEAF_LOG_PATH: data/overleaf/logs
            - SERVER_PRO: true
            - SIBLING_CONTAINERS_ENABLED: true
                - logged in to quay.io: true
            - MONGO_ENABLED: true
            - REDIS_ENABLED: true
    - config/variables.env
        - status: present
        - values
            - OVERLEAF_FILESTORE_BACKEND: fs
            - OVERLEAF_HISTORY_BACKEND: fs
    
    ====== Warnings ======
    - None, all good
    ====== End ======
    - docker
        - status: present
        - version info: Docker version 28.0.4, build b8034c0
    - docker
        - status: MISSING!
    ====== Configuration ======
    - config/version
        - status: present
        - version: 5.4.0
    - config/overleaf.rc
        - status: present
        - values
            - OVERLEAF_DATA_PATH: /tmp/overleaf 
            - SERVER_PRO: false
            - MONGO_ENABLED: false
            - REDIS_ENABLED: true
    - config/variables.env
        - status: MISSING!
    ====== Warnings ======
    - configuration file variables.env not found
    - rc file, OVERLEAF_DATA_PATH not set
    ====== End =======
    Identify a few projects

    Identify a few projects by id that are missing history; ideally you have permission to make a change to one of them.

    3

    Schedule maintenance

    Schedule a maintenance window for the downtime.

    4

    Stop all but one worker

    Stop all but one worker when using a horizontal scaling setup.

    5

    Stop new updates and flush all changes to MongoDB

    Stop new updates from getting into the system and flush all changes to MongoDB:

    1. Close the editor and disconnect all users manually via the admin panel on https://my-server-pro.example.com/admin#open-close-editor in the "Open/Close Editor" tab.

    2. Stop the Websocket/real-time service.

    3. Wait for the real-time service to exit, as indicated by down:.

    4. Stop the git-bridge container if enabled.

    5. If you never ran 5.0.2: Issue a manual flush for document updates and wait for it to finish with success.

      You can repeat the command on error. In case you see a non-zero failureCount in successive runs, please stop the migration (restore the services via docker restart git-bridge sharelatex) and reach out to support.

    6. If you never ran 5.0.2: Ensure that all changes have been flushed out of redis.

      If you get any output from redis-cli, please stop the migration (restore the services via docker restart git-bridge sharelatex) and reach out to support.

    7. Try to flush any pending history changes.

      This will need to be a best effort flush as some projects have broken histories due to the bad database migration. Any failures will be addressed with a re-sync of the history at the end of the recovery process.

    6

    Take a backup

    Consider taking a consistent backup of the instance.

    7

    Upgrade

    Upgrade to version 5.0.3.

    8

    Automatic recovery

    The recovery process runs on container start automatically.

    9

    Follow progress

    You can follow the progress of the script by tailing the log file /var/lib/overleaf/data/history/doc-version-recovery.log. It will print the total number of projects at the start and a summary after every 1000 projects processed.

    10

    Wait for the recovery process to finish

    Wait for the recovery process to finish by either tailing the above log file until a Done. line has been printed or waiting for Finished recovery of doc versions. to be printed to the standard output of the Server Pro container.

    11

    Validate the recovery process

    Validate the recovery process by opening the history pane for a few of the projects with previously missing history.

    1. Expedite the resync for the projects to test (They will get processed eventually, but we do not want to wait for them to get their turn.)

      (Repeat with each of the project-ids to test, replace 000000000000000000000000 with one project-id at a time.)

    2. Open the project editor for the projects https://my-server-pro.example.com/project/000000000000000000000000

    3. Open the "History" pane for the project and see the latest content.

    4. Optional: Close the "History" pane again. Make a code change, such as adding a comment to the header.

    5. Optional: Issue a re-compile to trigger a flush of the local change. Open the "History" pane again and see the change. When done, undo the change.

    12

    For horizontal scaling...

    Start the other workers again.

    13

    Keep the instance running

    Please keep the instance running that executed the recovery process. It will resync the history for all projects in the background with a concurrency of 1. This will result in slightly elevated base load. (You can restart the instance, but it will need to start over with the resyncs.)

    14

    Let us know when you're done

    Server Pro customers: Please let the support team know when you have completed the recovery process.

    Server Pro customers: Please reach out to support before you migrate your data to S3.

    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 email[email protected] .

    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.

    Requirements

    • 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

    Estimate the disk size needed for the migration

    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.

    Migration steps

    Step 0 shutdown the instance

    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.

    Step 1 rewrite directory layout

    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:

    Step 2 upload the files

    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.

    Step 3 start the instance pointing at S3

    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

    Rolling back

    You can roll back the migration gracefully in reversing the steps:

    1. Shutdown the instance

    2. Mirror back the files by flipping the sequence of source/destination

    3. Write new files back into the local directory using an inverse transform

    4. 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.

    Now, you want to integrate with your company's LDAP/Active Directory system. In that system, Alice's details are:

    Your goal is to have Alice log in with their LDAP username (alicejones) and password instead of their old Overleaf credentials, without losing any of their work. Here’s how to make that happen.

    This process will require recreating the sharelatex container which will result in some downtime. We highly recommend that you familiarize yourself with this process by going through it on a test/staging environment first.

    1

    Ask your users to update their email addresses

    Overleaf accounts are tied to email addresses, so the first step is to get your users' Overleaf emails in sync with their LDAP or SAML emails.

    In our example, you'd ask Alice to sign into their Overleaf account and change their email from [email protected] to [email protected].

    Don't forget yourself! If you're an admin, you'll need to update your own email address too.

    If you have a lot of users, you can use the script to change a user's primary email address in bulk.

    2

    Enable the LDAP or SAML module

    Once everyone's email addresses are updated, it's time to flick the switch! You'll need to set the right environment variables for your new authentication method and then recreate the sharelatex container using the bin/up -d command.

    This swaps out the standard Overleaf login form for your new LDAP or SAML one.

    3

    Users can now log in via LDAP or SAML

    The next time Alice goes to log in, they'll see the new form.

    They can enter their LDAP username (alicejones) and password, and because their email address now matches the one in LDAP, they'll be logged right into their existing Overleaf account. All their projects will be exactly where they left them.

    Going the other way: Switching from LDAP/SAML back to native authentication

    What if you've been using LDAP or SAML for a while and want to move to Overleaf's built-in login system (maybe you deprecated your LDAP)? No problem! Here's how you can make that switch.

    1

    Check that everyone's email is correct

    Your users' accounts are already linked to their LDAP or SAML email addresses. This is the email they'll use to log in from now on, so just make sure everything looks right.

    2

    Disable the LDAP or SAML module

    Simply remove or unset the LDAP/SAML configuration settings and recreate the sharelatex container using the bin/up -d command. This will bring back the native Overleaf email and password login form.

    3

    Ask users to reset their passwords

    When your users visit the login page now, they'll see the Overleaf login form instead of the LDAP/SAML one.

    Since they may never have had a native Overleaf password, they'll need to create one. Each user should:

    script is a wrapper around
    docker compose
    . It loads configuration from the
    config/
    directory, before invoking
    docker compose
    with whatever arguments were passed to the script.

    You can treat bin/docker-compose as a transparent wrapper for the docker compose program installed on your machine.

    For example, we can check which containers are running with the following:

    Convenience helpers

    In addition to bin/docker-compose, the Toolkit also provides a collection of convenient scripts to assist with common tasks:

    • bin/up: shortcut for bin/docker-compose up

    • bin/start: shortcut for bin/docker-compose start

    • bin/stop: shortcut for bin/docker-compose stop

    • bin/shell: starts a shell inside the sharelatex container

    • bin/doctor: script used to gather installation and deployment information. See section below

    • bin/mongo: starts a shell inside the mongo container and switch to the correct database (sharelatex)

    • bin/backup-config: used to create a copy, zip or tar of your current configuration and then store in a destination directory of your choice

    • bin/logs: script used for easily viewing/tailing service logs

    • bin/error-logs: script used for easily viewing/tailing service error logs

    • bin/rename-env-vars-5-0: migration script used to update environment variables in config/variables.env as part of the re-branding from ShareLaTeX to Overleaf

    • bin/rename-rc-vars: migration script used to update environment variables in config/overleaf.rc as part of the re-branding from ShareLaTeX to Overleaf

    • bin/run-script: helper script used to simplify running scripts that are stored within the sharelatex container

    • bin/upgrade: script used to assist with instance upgrades. The script with check for updates to the Toolkit code (via git) and offer to pull any new changes. It will then check for the latest available version of the Docker image currently in use and offer to update it. The script provides step-by-step confirmation, the option to take a backup of current configuration and handles the stopping/starting of Docker services. See for more information.

    If you prefer to run your instance without attaching to the Docker logs you can run bin/up -d to run in detached mode.

    Checking your server

    The Overleaf Toolkit includes a handy script called bin/doctor that produces a report pointing to any unfulfilled dependency.

    Before we continue any further, let's run the bin/doctor script and check that everything is working correctly.

    We should see some output similar to this:

    First, we see some information about the host system (the machine that the Toolkit is being run on), then some information about dependencies. If any dependencies are missing, we will see a warning here. Next, the doctor checks our local configuration. At the end, the doctor will print out some warnings, if any problems were encountered. For example, if you're running end-of-life versions of Docker or Docker Compose.

    If you run into problems with running the Toolkit, you should first run the bin/doctor script and check it's output for any warnings.

    Users of the free Community Edition should open an issue on GitHub.

    Users of Server Pro should contact [email protected] for assistance.

    In both cases, it is a good idea to include the output of the bin/doctor script in your message.

    Talk to our Sales team

    Email delivery

    Overleaf supports sending email through two methods: Simple Mail Transfer Protocol (SMTP) and Amazon Simple Email Service (SES). SMTP can be used if you have an email server enabled on your localhost that is listening for local connections.

    Configuration

    Email is configured using the following environmental variables.

    Sender Configuration

    Name
    Description

    SMTP

    Name
    Description

    Amazon SES SMTP interface

    You can read more about using the Amazon SES SMTP interface to send email .

    Name
    Description

    Amazon SES API

    You can read more about using the Amazon SES API to send email .

    Name
    Description

    AWS SES with Instance Roles

    Name
    Description

    Customisation

    Name
    Description

    LDAP

    Server Pro provides LDAP server integration for user authentication and is compatible with Active Directory systems. For Toolkit deployments, the LDAP integration is configured via the config/variables.env file.

    Overview

    Internally, the LDAP integration uses the library. Most of these configuration options are passed through to the server config object which is used to configure passport-ldapauth. If you are having issues configuring LDAP, it is worth reading the for passport-ldapauth

    Environment variables

    This page describes the environment variables that are supported in the config/variables.env file for Toolkit deployments.

    The config/variables.env file consists of variable definitions in the form NAME=value, lines beginning with # are treated as comments.

    It is necessary that you re-create the Docker containers after changing anything in overleaf.rc or variables.env

    User management

    Provisioning users

    In Server Pro, we only support using a single method of authentication at any one time. Once SSO has been enabled, users/administrators won't be able to log in using an Overleaf password, and you won't be able to create new users from the https://{your-instance-url}/admin/user URL.

    $ docker exec sharelatex tail --retry --follow /var/lib/overleaf/data/history/doc-vers
    $ docker exec sharelatex curl -X POST --silent "http://127.0.0.1:3054/project/000000000000000000000000/resync?force=true"
    $ docker exec mongo mongosh sharelatex --quiet --eval 'db.projects.estimatedDocumentCount() + db.deletedProjects.estimatedDocumentCount()'
    docker exec sharelatex \
      du --human-readable --max-depth=0 /var/lib/overleaf/data/user_files
    
    docker exec sharelatex \
      du --human-readable --max-depth=0 /var/lib/overleaf/data/template_files
    mkdir -p /srv/overleaf-s3-migration/user_files \
             /srv/overleaf-s3-migration/template_files
    docker exec sharelatex \
      tar --create --directory /var/lib/overleaf/data/user_files . \
    | tar --extract --directory /srv/overleaf-s3-migration/user_files \
      --transform=sx_x/x
    docker exec sharelatex \
      tar --create --directory /var/lib/overleaf/data/template_files . \
    | tar --extract --directory /srv/overleaf-s3-migration/template_files \
      --transform=sx_x/xg
    aws s3 sync /srv/overleaf-s3-migration/user_files s3://overleaf-user-files
    aws s3 sync /srv/overleaf-s3-migration/template_files s3://overleaf-template-files
    
    aws s3 sync /srv/overleaf-bind-mount/data/history/overleaf-project-blobs s3://overleaf-project-blobs
    aws s3 sync /srv/overleaf-bind-mount/data/history/overleaf-chunks s3://overleaf-chunks
    mc mirror /srv/overleaf-s3-migration/user_files s3/overleaf-user-files
    mc mirror /srv/overleaf-s3-migration/template_files s3/overleaf-template-files
    
    mc mirror /srv/overleaf-bind-mount/data/history/overleaf-project-blobs s3/overleaf-project-blobs
    mc mirror /srv/overleaf-bind-mount/data/history/overleaf-chunks s3/overleaf-chunks
    # When using aws cli
    aws s3 sync s3://overleaf-user-files /srv/overleaf-s3-migration/user_files
    aws s3 sync s3://overleaf-template-files /srv/overleaf-s3-migration/template_files
    aws s3 sync s3://overleaf-project-blobs /srv/overleaf-bind-mount/data/history/overleaf-project-blobs
    aws s3 sync s3://overleaf-chunks /srv/overleaf-bind-mount/data/history/overleaf-chunks
    
    # When using minio mc
    mc mirror s3/overleaf-user-files /srv/overleaf-s3-migration/user_files
    mc mirror s3/overleaf-template-files /srv/overleaf-s3-migration/template_files
    mc mirror s3/overleaf-project-blobs /srv/overleaf-bind-mount/data/history/overleaf-project-blobs
    mc mirror s3/overleaf-chunks /srv/overleaf-bind-mount/data/history/overleaf-chunks
    # Write files into local Server CE/Server Pro
    tar --create --directory /srv/overleaf-s3-migration/user_files . \
    | docker exec --interactive sharelatex \
        tar \
          --extract \
          --keep-old-files \
          --directory /var/lib/overleaf/data/user_files \
          --transform=sx./xx --transform=sx/x_x \
          --wildcards '*/*/*'
    
    tar --create --directory /srv/overleaf-s3-migration/template_files . \
    | docker exec --interactive sharelatex \
        tar \
          --extract \
          --keep-old-files \
          --directory /var/lib/overleaf/data/template_files \
          --transform=sx./xx --transform=sx/x_xg \
          --wildcards '*/*/*/*/pdf-converted-cache/*' \
          --wildcards '*/*/*/*/pdf' \
          --wildcards '*/*/*/*/zip'
    # Alice
    {
      _id:        '123',
      email:      '[email protected]'
      first_name: 'Alice',
      last_name:  'Jones'
    }
    Alice:
      - uid:  'alicejones'
      - mail: '[email protected]'
      - givenName:   'Alice'
      - sn: 'Jones'
    $ bin/docker-compose ps
    bin/doctor
    ====== Overleaf Doctor ======
    - Host Information
        - Linux
        - Output of 'lsb_release -a':
                No LSB modules are available.
                Distributor ID:     Ubuntu
                Description:        Ubuntu 22.04.5 LTS
                Release:    22.04
                Codename:   jammy
    - Dependencies
        - bash
            - status: present
            - version info: 5.1.16(1)-release
        - docker
            - status: present
            - version info: Docker version 27.3.1, build ce12230
        - realpath
            - status: present
            - version info: realpath (GNU coreutils) 8.32
        - perl
            - status: present
            - version info: 5.034000
        - awk
            - status: present
            - version info: GNU Awk 5.1.0, API: 3.0 (GNU MPFR 4.1.0, GNU MP 6.2.1)
        - openssl
            - status: present
            - version info: OpenSSL 3.0.2 15 Mar 2022 (Library: OpenSSL 3.0.2 15 Mar 2022)
        - docker compose
            - status: present
            - version info: Docker Compose version v2.29.7
    - Docker Daemon
        - status: up
    ====== Configuration ======
    - config/version
        - status: present
        - version: 5.1.1
    - config/overleaf.rc
        - status: present
        - values
            - OVERLEAF_DATA_PATH: data/overleaf
            - OVERLEAF_LOG_PATH: data/overleaf/logs
            - SERVER_PRO: true
                - logged in to quay.io: true
            - SIBLING_CONTAINERS_ENABLED: true
            - OVERLEAF_LISTEN_IP: 0.0.0.0
            - OVERLEAF_PORT: 80
            - MONGO_ENABLED: true
            - MONGO_IMAGE: mongo
            - MONGO_VERSION: 6.0
            - MONGO_DATA_PATH: data/mongo
            - REDIS_ENABLED: true
            - REDIS_IMAGE: redis:6.2
            - REDIS_DATA_PATH: data/redis
    - config/variables.env
        - status: present
        - values
            - OVERLEAF_FILESTORE_BACKEND: fs
            - OVERLEAF_HISTORY_BACKEND: fs
    ====== Warnings ======
    - None, all good
    ====== End ======
    
    Checking your server
    Upgrading your deployment

    OVERLEAF_EMAIL_SMTP_IGNORE_TLS

    When true and OVERLEAF_EMAIL_SMTP_SECURE is false then TLS is not used even if the server supports STARTTLS extension

    OVERLEAF_EMAIL_SMTP_NAME

    Optional hostname for TLS validation if OVERLEAF_EMAIL_SMTP_HOST was set to an IP address, defaults to hostname of the machine.

    OVERLEAF_EMAIL_SMTP_LOGGER

    When true prints logging messages to web.log.

    OVERLEAF_EMAIL_FROM_ADDRESS

    The from address e.g. '[email protected]' - Required: yes

    OVERLEAF_EMAIL_REPLY_TO

    The reply to address e.g. '[email protected]'

    OVERLEAF_EMAIL_SMTP_HOST

    The hostname or IP address to connect to. Needs to be accessible from the Docker container

    OVERLEAF_EMAIL_SMTP_PORT

    The port to connect to

    OVERLEAF_EMAIL_SMTP_SECURE

    If true the connection will use TLS when connecting to server. If false or not set, then TLS is used if server supports the STARTTLS extension. In most cases set this value to true if you are connecting to port 465. For port 587 or 25 keep it false

    OVERLEAF_EMAIL_SMTP_USER

    The username that should be used to authenticate against the SMTP server

    OVERLEAF_EMAIL_SMTP_PASS

    The password associated with the SMTP username

    OVERLEAF_EMAIL_SMTP_TLS_REJECT_UNAUTH

    If false this would open a connection to TLS server with self-signed or invalid TLS certificate

    OVERLEAF_EMAIL_SMTP_HOST

    The hostname or IP address to connect to. Needs to be accessible from the Docker container

    OVERLEAF_EMAIL_SMTP_PORT

    The port to connect to

    OVERLEAF_EMAIL_SMTP_USER

    The username that should be used to authenticate against the SMTP server

    OVERLEAF_EMAIL_SMTP_PASS

    The password associated with the SMTP username

    OVERLEAF_EMAIL_AWS_SES_ACCESS_KEY_ID

    If using AWS SES the access key

    OVERLEAF_EMAIL_AWS_SES_SECRET_KEY

    If using AWS SES the secret key

    OVERLEAF_EMAIL_AWS_SES_REGION

    If not set, the default region is US-EAST-1

    OVERLEAF_EMAIL_DRIVER

    When this is set to ses, the email system will use the SES API method and rely on the configured instance roles to send email.

    OVERLEAF_CUSTOM_EMAIL_FOOTER

    Custom HTML which is appended to all emails. e.g. Example: "<div>This system is run by department x </div> <div> If you have any questions please look at our faq <a href='https://somwhere.com'>here</a></div>"

    here
    here
    Internal accounts

    Once you are logged in as an administrator, you can visit /admin/register on your Overleaf instance and create new users. If you have an email backend configured in your settings file, new users will be sent an email with a URL to set their password. If not, you will have to distribute the password reset URLs manually. These are shown when you create a user.

    You can create multiple accounts at the same time by providing a comma separated list of email addresses.

    SSO accounts

    When using SAML 2.0 or LDAP authentication, user accounts are automatically provisioned through Just-in-Time (JIT) account creation. This means that the first time a user logs in with their external identity provider credentials, their account is dynamically created within the system. No manual account setup is required beforehand; the user's account infomration is populated using the information provided by the SAML 2.0 or LDAP identity source.

    When SSO is enabled, all local account passwords will no longer work (setting/resetting passwords in Server Pro is disabled), meaning that all users (regular users and administrators) must be able to authenticate using SSO.

    For more information, see our configuration guides for SAML 2.0 and LDAP.

    Administrators

    From Server Pro Server Pro 5.2.1, the admin role can be granted/revoked via the SSO login process. For me information see our configuration guides for SAML 2.0 and LDAP.

    If you're creating your first administrator account we recommend visiting the https://{your-instance-url}/launchpad URL and setting up your account from there.

    Alternatively, you can run the following command against you the sharelatex Docker container:

    The above command will create a user with the provided email address if they don't already exist, and make them an administrator. In the command output, you will be given a URL to visit where you can set the password for this user and log in for the first time.

    For a more programatic approach, you can use the above script for creating regular users as well as administrators. For regular users you'll need to omit the --adminflag.

    If you're using internal accounts for authentication and need to elevate an existing user to an instance admin or revoke existing permissions, you can do this by following these steps:

    • Log in as an existing administrator

    • Click Admin -> Manage Users

    • Search for the user and click on their email address

    • Scroll down to the Site Admin section and click on the (show) link

    • Check the box Is Site Admin

    • Click the Save button to finish

    Deleting users

    As per our guide on understanding license usage, in general, it's advisable not to delete accounts (unless they are no longer required), as this action would lead to the removal of the account and loss of access to projects for any collaborators.

    Presently, there is no provision for deactivating accounts; they either exist with retained data or don't exist at all. The recommended approach is to leave the account and its associated data within Server Pro, ensuring any projects are part of your backup process.

    By default, accounts are soft-deleted. For information regarding permanently removing users from your instance see ENABLE_CRON_RESOURCE_DELETION in the Environment variables guide.

    Via Admin -> Manage Users

    • Log in as an administrator

    • Click Admin -> Manage Users

    • Search for the user and check the box next to their email address

    • Click the bin icon

    • Click the Delete button to confirm

    Via the Command-line

    User can be deleted via the following command. As mentioned above, projects will also be deleted so be careful when using this command.

    The deletion script uses a hard-coded force option that ensures the deletion process continues even if the account deletion email fails to send (for example, when the users email address is no longer in service).

    Since version 5.5.0, the option --skip-email can be used to prevent sending an informative email to the deleted user.

    Restoring a soft-deleted user

    Providing that a user has only been soft-deleted, it's possible to restore their account along with any projects.

    • Log in as an administrator

    • Click Admin -> Manage Users

    • Search for the user you want to restore

    • Click the Display deleted users button

    • Click on the deleted users email address

    • Click on the Recover This Account button

    • Click on the Recover button to confirm

    When ENABLE_CRON_RESOURCE_DELETION is set to true, soft-deleted accounts can be restored within a 90-day window. After 90 days, account recovery is not possible.

    Counting users

    We understand that user metrics is crucial for effective license management. While it is possible to see how many active users your instance has via https://you-instance-url/admin/user#license — you may be looking for something a little more programmatic to you can check periodically and export to a third-party application.

    Updating user account information

    When managing user accounts, the process for updating user profile information depends on whether SSO is enabled.

    If SSO is not in use, administrators have the ability to modify user account information through the Admin -> Manage Users interface where they can update a users email addresses, first name and last name, and generate a password reset link, if required.

    Regular users can self-serve updating their own account details via Account -> Account Settings. From there, individuals have the same options but can also change their password and generate Git authentication tokens.

    For deployments using SSO, Server Pro can be optionally configured to automatically update a user's first and last name during login. This update occurs using the information received from the configured authentication system during the authentication process.

    When OVERLEAF_SAML_UPDATE_USER_DETAILS_ON_LOGIN or OVERLEAF_LDAP_UPDATE_USER_DETAILS_ON_LOGIN are true — the user details form on https://your-instance-url/user/settings page is disabled and can't be used to update the account information. The first name and last name can only be set in your identity managment system.

    For more information on these settings, see our configuration guides for SAML 2.0 and LDAP.

    $ docker exec sharelatex sv stop real-time-overleaf
    $ docker exec sharelatex sv status real-time-overleaf
    run: real-time-sharelatex: (pid 394) 50s, want down, got TERM
    # wait a little longer...
    
    $ docker exec sharelatex sv status real-time-overleaf
    down: real-time-sharelatex: 7s, normally up
    $ docker stop git-bridge
    $ docker exec sharelatex bash -c 'source /etc/container_environment.sh && source /etc/overleaf/env.sh && cd services/document-updater && LOG_LEVEL=info node scripts/flush_all.js'
    ...
    {"name":"default","hostname":"...","pid":324,"level":30,"successCount":...,"failureCount":0,"msg":"finished flushing all projects","time":"...","v":0}
    Done flushing all projects
    $ docker exec redis redis-cli --scan --pattern 'DocVersion:*'
    # no output from redis-cli indicates success, check exit code of redis-cli next, it should be zero
    $ echo $?
    0
    $ docker exec sharelatex bash -c 'source /etc/container_environment.sh && source /
    # Overleaf Toolkit deployments:
    $ bin/docker-compose exec sharelatex /bin/bash -ce "cd /overleaf/services/web && node modules/server-ce-scripts/scripts/create-user --admin [email protected]"
    
    # Legacy docker-compose.yml deployments:
    $ docker exec sharelatex /bin/bash -ce "cd /overleaf/services/web && node modules/server-ce-scripts/scripts/create-user --admin [email protected]"
    # Overleaf Toolkit deployments:
    $ bin/docker-compose exec sharelatex /bin/bash -ce "cd /overleaf/services/web && node modules/server-ce-scripts/scripts/delete-user.mjs [email protected]"
    
    # Legacy docker-compose.yml deployments:
    $ docker exec sharelatex /bin/bash -ce "cd /overleaf/services/web && node modules/server-ce-scripts/scripts/delete-user.mjs [email protected]"
    # Total number of users
    echo 'db.users.countDocuments()' | docker exec -i mongo mongosh --quiet localhost/sharelatex
    # overleaf [direct: primary] sharelatex> 16
    
    # Total number of users using metrics endpoint
    docker exec sharelatex curl http://127.0.0.1:3000/metrics | grep num_active_users
    # # HELP num_active_users num_active_users
    # # TYPE num_active_users gauge
    # num_active_users{app="web-api",host="b3ae4ff549d8"} 16
    
    # Total number of active users
    echo 'db.users.countDocuments({ lastActive: { $gte: new Date(new Date().getTime() - (365 * 24 * 60 * 60 * 1000)) } })' | docker exec -i mongo mongosh --quiet localhost/sharelatex
    # overleaf [direct: primary] sharelatex> 10

    You can find the relevant information for enabling LDAP here, and SAML 2.0 here.

    If you've enabled SAML 2.0, users will see a button that when clicked, will redirect them to your IdP to enter their credentials. On successful authentication, they'll be redirected back to your Overleaf instance and logged into their account.

    See the Environment Variables page for information on customizing the login page experience.

    And if you ever need to roll-back, just comment out the LDAP/SAML configuration and recreate the sharelatex container using the bin/up -d command. Users will then be able to log in using their current email address and Overleaf-specific password.

    Click the "Forgot your password?" link.
  • Enter the email address associated with their account (the one from LDAP/SAML).

  • Follow the link in the password-reset email to set a new password.

  • If you haven't already done so, check out our guide on enabling Email delivery.

    Once that's done, they can log in with their email and their new Overleaf-specific password to access all their projects.

    Username migration
    LDAP/Active Directory Log in page
    Native authentication Log in page
    to get a feel for the configuration it expects.

    To enable LDAP authentication the EXTERNAL_AUTH variable must be set to ldap:

    After bootstrapping Server Pro for the first time with LDAP authentication, an existing LDAP user must be given admin permissions by visiting the /launchpad page (or via CLI, but in this case ignoring password confirmation).

    LDAP users will appear in Overleaf Admin Panel once they log in first time with their initial credentials.

    To preserve backward compatibility with older configuration files, if EXTERNAL_AUTH is not set, but OVERLEAF_LDAP_URL is set, then the LDAP module will be activated. We still recommend setting EXTERNAL_AUTH explicitly.

    Configuration

    Name
    Description

    OVERLEAF_LDAP_URL

    Required, The URL of the LDAP server, E.g. ldaps://ldap.example.com:636

    OVERLEAF_LDAP_EMAIL_ATT

    The email attribute the LDAP server will return, defaults to mail

    OVERLEAF_LDAP_NAME_ATT

    The property name holding the name of the user which is used in the application

    OVERLEAF_LDAP_LAST_NAME_ATT

    If your LDAP server has a first and last name then this can be used in conjunction with OVERLEAF_LDAP_NAME_ATT

    OVERLEAF_LDAP_PLACEHOLDER

    The placeholder for the login form, defaults to Username

    OVERLEAF_LDAP_UPDATE_USER_DETAILS_ON_LOGIN

    If set to true, will update the user first_name and last_name field on each login, and turn off the user-details form on /user/settings page. Otherwise, details will be fetched only on first login.

    Example configuration

    At Overleaf, we test the LDAP integration against a test openldap server. The following is an example of a working configuration:

    The openldap needs to run in the same network as the sharelatex container (which by default would be overleaf_default), so we'll proceed with the following steps:

    • Run docker network create overleaf_default (will possibly fail due to a network with name overleaf_default already exists error, that's OK).

    • Start openldap container with docker run --network=overleaf_default --name=ldap rroemhild/test-openldap:1.1

    • Edit variables.env to add the LDAP environment variables as listed above.

    • Run bin/up -d and you should be able to login using fry as both username and password.

    Debugging

    As LDAP is heavily configurable and flexible by nature it can be a good starting point to have a working example with ldapsearch or even used by another application.

    The following command will connect to the LDAP server at ldap on port 389. It will then bind to the server using the distinguished name (DN) [email protected] and password password123. The base DN for the search will be ou=people,dc=planetexpress,dc=com. The search filter is set to return entries where the Common Name (CN) contains fry, and it will return the mail attribute of these entries.

    When running this search command against your own service please ensure that you replace fry, password123, and planetexpress.com with your actual username, password, and domain. Also, make sure that the LDAP server is accessible and the provided details are correct:

    passport-ldapauth
    README
    by running
    bin/up
    .

    All versions

    These environment variables are compatible with Server CE and Server Pro you with an easy migration path between these two on-premise versions. They can also be used with both Toolkit and Docker Compose deployments.

    Previously, these environment variables were prefixed with SHARELATEX_ instead of OVERLEAF_.

    Name
    Description

    OVERLEAF_SITE_URL

    Where your instance of Overleaf is publicly available. This is used in public links, and when connecting over websockets, so must be configured correctly!

    OVERLEAF_ADMIN_EMAIL

    The email address where users can reach the person who runs the site.

    OVERLEAF_APP_NAME

    The name to display when talking about the running application. Defaults to 'Overleaf (Community Edition)'.

    OVERLEAF_MONGO_URL and MONGO_URL

    The URL of the Mongo database to use.

    OVERLEAF_REDIS_HOST and REDIS_HOST

    The host name of the Redis instance to use. Both are required (see )

    OVERLEAF_REDIS_PORT and REDIS_PORT

    The port of the Redis instance to use. Both are required (see )

    It is possible to enforce password restrictions on users when using the Overleaf login system (local accounts), not an SSO option such as LDAP. For SSO accounts, password policies will be enforced by your identity provider or directory service, additionally allowing support for multi-factor authentication.

    Toolkit settings

    This page describes the environment variables that are supported in the config/overleaf.rc file for Toolkit deployments.

    The config/overleaf.rc file consists of variable definitions in the form NAME=value, lines beginning with # are treated as comments.

    It is necessary that you re-create the Docker containers after changing anything in overleaf.rc or variables.env by running bin/up.

    Container

    sharelatex

    Name
    Description

    mongo

    Name
    Description

    redis

    Name
    Description

    nginx

    Name
    Description

    Data and backups

    Some times we need to change the schema of data in the database as we evolve Overleaf, migration scripts are used to automate this process. They will have been run on overleaf.com first which is the largest instance of Overleaf in the world so most eventualities will have been encounter already, however we make no guarantees over your data. Please ensure that you create a consistent backup of your data before upgrading you instance.

    When upgrading to a new Docker image, any migrations which have not yet been run will be automatically executed, this may take some time depending on the size of your dataset, tailing the logs will give tell you progress. For more information, see our Logging documentation.

    Data storage

    Overleaf Community Edition and Server Pro store their data in three separate places:

    • MongoDB Database: This is where user and project data reside.

    • Redis: serves as a high-performance cache for in-flight data, primarily storing information related to project editions and collaboration.

    • Overleaf Filesystem: stores non-editable project files (including images) and also acts as a temporary disk cache during project compilations.

    This might be ~/sharelatex_data or ~/overleaf_data, depending on when you're instance was set up.

    For project files and full project history data we also support S3 compatible storage backends.

    See for more information on the folder layout on disk.

    Performing a consistent backup

    There are three stores which need to included when taking a consistent backup:

    • MongoDB

    • Redis

    • Overleaf Filesystem data

    In order to produce a consistent backup it is mandatory to stop users from producing new data while the backup process is running. We therefore advise scheduling a maintenance window during which, users should not be able to access the instance or edit their projects.

    Before you start the backup process you will need to take your instance offline. Starting with Server Pro 3.5.0 the shutdown down process automates the closing of the site and the disconnection of users.

    To shutdown your instance you'll need to run bin/docker-compose stop sharelatex if you are running a Toolkit deployment or docker compose stop sharelatex if you are running Docker Compose.

    Once the sharelatex container has been stopped you can start the backup process.

    Once the backup process has been completed successfully you'll need to start the sharelatex container. To do this run bin/docker-compose start sharelatex if you are running a Toolkit deployment or docker compose start sharelatex if you are running Docker Compose.

    • Backups should be stored on a separate server from the one your Overleaf instance is running on, ideally in a different location entirely.

    • Replicating databases onto multiple MongoDB instances might offer some redundancy, but it doesn't safeguard against corruption.

    • Testing your backups is the best way to ensure they are complete and functional.

    MongoDB

    MongoDB comes with a command-line tool called which can be used to create a backup of user and project data stored in the database.

    Overleaf Filesystem data

    For Toolkit deployments, the path where your non-editable files are stored is specified in config/overleaf.rc using the OVERLEAF_DATA_PATH environment variable, but, depending on when your instnace was created, this might be data/sharelatex.

    Using a tool such as rsync to recursively copy this directory is required to ensure a complete backup is created.

    Redis

    Redis stores user sessions and pending document updates before they are flushed to MongoDB.

    Append Only File (AOF) persistence is the recommended configuration for Redis persistence.

    Toolkit users have AOF persistence enabled by default for new installs, existing users can find more information regarding enabling AOF .

    If you decide to continue using RDB snapshots along with AOF persistence you can copy the RDB file to a secure location as a backup.

    Migrating data between servers

    At best you do not have any valuable data in the new instance yet. We do not have a process for merging the data of instances.

    Assuming the new instance has no data yet, here are some steps you could follow. On a high level, we produce a tar-ball of the mongo, redis and overleaf volumes, copy it over to the new server, and inflate it there again.

    Toolkit

    Docker Compose

    Depending on your docker-compose.yml file, you may need to adjust the paths of the mongo, redis, overleaf volumes.

    When running as the root user (or with sudo), tar will retain the file owner/group and permissions, which is critial when restoring the backup.

    Folders in detail

    The following folders have additional hints:

    • (b) include in backups, best when the instance is stopped to ensure consistency

    • (d) can be deleted

    1. ~/mongo_data (b)

      • mongodb datadir

    2. ~/redis_data (b)

    Microservices

    The recommended way to deploy and manage Overleaf Server CE and Server Pro instances is via the use of the Toolkit.

    The Toolkit simplifies the creation of your Overleaf instance through the use of some custom scripts that abstract away the orchestration of required microservices. Simply run the bundled initialization script, provide a few configuration options like your persistent storage paths, and the Toolkit will take care of provisioning and connecting the microservices that make up your Overleaf Server CE or Server Pro instance.

    This leaves you free to focus on customizing the user experience and implementing the specific features that make up your on-premise instance. The Toolkit handles all the complexity behind the scenes, enabling a simplified deployment of your Overleaf instance.

    For legacy reasons, the main Overleaf container is called sharelatex, and is based on the sharelatex/sharelatex Docker image. This is because the technology is based on the ShareLaTeX code base, which was merged into Overleaf. See for more details. At some point in the future, this will be renamed to match the Overleaf naming scheme.

    Architecture

    Inside the Overleaf container, the software runs as a set of microservices, managed by runit. Some of the more interesting files inside the container are:

    • /etc/service/: initialization files for the microservices.

    • /var/log/overleaf/: logs for each microservice.

    • /overleaf/services/: code for the various microservices.

    The MongoDB and Redis Containers

    Overleaf depends on two external databases: MongoDB and Redis. By default, the Toolkit will provision a container for each of these databases, in addition to the Overleaf container, for a total of three Docker containers.

    If you would prefer to connect to an existing MongoDB or Redis instance, you can do so by setting the appropriate settings in the configuration file.

    Editor and compile process

    In this section we'll provide a broad overview for the handling of documents and the compile process.

    This page describes the compile process with Sandboxed Compiles as available in Server Pro only. In Server CE, the compile process uses simple sub-processes -- replace the items referencing a container with a single item run compile in sub-process.

    Components/Actors:

    Name
    Description

    Redis caching

    • user: loads editor page

    • editor: opens web socket

    • editor: sends request to open a document via web socket

      • real-time -> document-updater: document is loaded from MongoDB into Redis

    Reading from MongoDB into Redis

    • document-updater -> web -> docstore: read from MongoDB

    Flushing from Redis into MongoDB

    • document-updater -> web -> docstore: write into MongoDB

    Compile - "full" sync-mode

    • editor: sends compile request with sync-mode set to "full" compile

    • web -> document-updater: any documents are flushed from redis into MongoDB

    • web -> docstore: all documents are downloaded from MongoDB

    • web ->

    Compile - "incremental" sync-mode

    • editor: sends compile request with sync-mode set to "incremental" compile

    • web -> document-updater: get any documents from redis

      • the "project state" hash is also stored in redis

      • web sends the hash of the file tree to document-updater and document-updater can turn the incremental compile into a full compile on mismatch

    Compile - switching between modes

    • editor: observes a compile failure, next compile is a "full" compile

    • editor: observes a compile success, next compile is an "incremental" compile

    EXTERNAL_AUTH=ldap
    # added to variables.env
    
    EXTERNAL_AUTH=ldap
    OVERLEAF_LDAP_URL=ldap://ldap:389
    OVERLEAF_LDAP_SEARCH_BASE=ou=people,dc=planetexpress,dc=com
    OVERLEAF_LDAP_SEARCH_FILTER=(uid={{username}})
    OVERLEAF_LDAP_BIND_DN=cn=admin,dc=planetexpress,dc=com
    OVERLEAF_LDAP_BIND_CREDENTIALS=GoodNewsEveryone
    OVERLEAF_LDAP_EMAIL_ATT=mail
    OVERLEAF_LDAP_NAME_ATT=cn
    OVERLEAF_LDAP_LAST_NAME_ATT=sn
    OVERLEAF_LDAP_UPDATE_USER_DETAILS_ON_LOGIN=true
    ldapsearch -H ldap://ldap:389 -x -D [email protected] -w password123 -b ou=people,dc=planetexpress,dc=com "CN=*fry*" mail

    OVERLEAF_LDAP_BIND_DN

    Optional, e.g. uid=admin,ou=people,o=planetexpress.com.

    OVERLEAF_LDAP_BIND_CREDENTIALS

    Password for bindDn.

    OVERLEAF_LDAP_BIND_PROPERTY

    Optional, default dn. Property of user to bind against client e.g. name, email

    OVERLEAF_LDAP_SEARCH_BASE

    The base DN from which to search for users by username. E.g. ou=people,o=planetexpress.com

    OVERLEAF_LDAP_SEARCH_FILTER

    LDAP search filter with which to find a user by username, e.g. (uid={{username}}). Use the literal {{username}} to have the given username be interpolated in for the LDAP search. If you are using Active Directory then the search filter (sAMAccountName={{username}}) may be more appropriate.

    OVERLEAF_LDAP_SEARCH_SCOPE

    Optional, default sub. Scope of the search, one of base, one, or sub.

    OVERLEAF_LDAP_SEARCH_ATTRIBUTES

    Optional, default all. Json array of attributes to fetch from LDAP server.

    OVERLEAF_LDAP_GROUP_DN_PROPERTY

    Optional, default dn. The property of user object to use in {{dn}} interpolation of groupSearchFilter.

    OVERLEAF_LDAP_GROUP_SEARCH_BASE

    Optional. The base DN from which to search for groups. If defined, also groupSearchFilter must be defined for the search to work.

    OVERLEAF_LDAP_GROUP_SEARCH_SCOPE

    Optional, default sub.

    OVERLEAF_LDAP_GROUP_SEARCH_FILTER

    Optional. LDAP search filter for groups. The following literals are interpolated from the found user object: {{dn}} the property configured with groupDnProperty. Optionally you can also assign a function instead, which passes a user object, from this a dynamic groupSearchFilter can be retrieved.

    OVERLEAF_LDAP_GROUP_SEARCH_ATTRIBUTES

    Optional, default all. Json array of attributes to fetch from LDAP server.

    OVERLEAF_LDAP_CACHE

    Optional, default false. If true, then up to 100 credentials at a time will be cached for 5 minutes.

    OVERLEAF_LDAP_TIMEOUT

    Optional, default Infinity. How long the client should let operations live for in milliseconds before timing out.

    OVERLEAF_LDAP_CONNECT_TIMEOUT

    Optional, default is up to the OS. How long the client should wait in milliseconds before timing out on TCP connections.

    OVERLEAF_LDAP_TLS_OPTS_CA_PATH

    A JSON array of paths to the CA file for TLS, must be accessible to the Docker container. E.g. -env OVERLEAF_LDAP_TLS_OPTS_CA_PATH='["/var/one.pem", "/var/two.pem"]'

    OVERLEAF_LDAP_TLS_OPTS_REJECT_UNAUTH

    If true, the server certificate is verified against the list of supplied CAs.

    OVERLEAF_LDAP_IS_ADMIN_ATT and OVERLEAF_LDAP_IS_ADMIN_ATT_VALUE

    When both environment variables are set, the login process updates user.isAdmin = true when the profile returned by LDAP contains OVERLEAF_LDAP_IS_ADMIN_ATT, and its value is either equals to OVERLEAF_LDAP_IS_ADMIN_ATT_VALUE, or an array containing OVERLEAF_LDAP_IS_ADMIN_ATT_VALUE. Introduced: 5.2.0

    /var/lib/overleaf/: the mount-point for persistent data (corresponds to the directory indicated by OVERLEAF_DATA_PATH on the host).

    web

    The (not so) micro service used for handling API requests

  • editor: sends document update via web socket

    • real-time -> document-updater: document is updated in Redis

  • editor: sends more compile requests

    • After 5 minutes have passed since last flush (per doc):

      • document-updater: flush doc from Redis to MongoDB

  • editor: sends more updates

    • every 100 updates (per doc):

      • document-updater: flush doc history from Redis to MongoDB

  • user: leaves the editor/closes browser tab

    • 5 minutes later

      • real-time: checks for other collaborators, if there are none:

        • real-time -> document-updater: flushes docs from Redis to MongoDB

  • clsi
    : compile request is sent to
    clsi
    , including:
    • the sync-mode

    • a hash of the file tree -> the "project state"

    • all docs with their content -> subject to 7MB request body limit

    • binary file URLs for separate downloading

  • clsi: check on-disk state with sync-mode and "project state"

    • this is a full sync, so we can ignore what was previously written

  • clsi: cleanup compile dir

  • clsi: write all docs into compile dir

  • clsi: write all binary files into compile dir

    • clsi copies the files from a per project local cache

    • on cache miss:

      • clsi->filestore: download files

  • clsi: write the "project state"

  • clsi: ensure docker container exists with desired config

    • build container options, includes texlive version

    • hash options

    • container name: project-<project-id>-<user-id>-<hash>

  • clsi: start container and stream stdout/stderr into memory -> limit 2MB

  • clsi: leave stopped container behind -> cleaned up after 24h

  • clsi: write stdout/stderr to disk

  • clsi: copy output files into unique output directory

    • build-id composed of 8 random bytes plus timestamp in ms precision

    • delete all but last 3 (anonymous)/ 1 (logged in user) build folders

  • clsi: compile was failure/timeout

    • delete compile cache - it may have partial files/corrupted cache

  • editor: downloads output.log and output.pdf

    • see compile process as performed when 'editor requested "full" compile'

  • web -> clsi: compile request is sent to clsi, including:

    • the sync-mode

    • a hash of the file tree -> the "project state"

    • all docs from redis with their content -> subject to 7MB request body limit

    • no binary fines

  • clsi: check on-disk state with sync-mode and "project state"

    • this is an incremental sync, so the "project state" must match

    • on mismatch: respond with 409, let web retry with "full" sync

      • see compile process as performed when 'editor requested "full" compile'

  • clsi: write updated docs into compile dir

  • clsi: ensure docker container exists with desired config

    • build container options, includes texlive version

    • hash options

    • container name: project-<project-id>-<user-id>-<hash>

  • clsi: start container and stream stdout/stderr into memory -> limit 2MB

  • clsi: leave stopped container behind -> cleaned up after 24h

  • clsi: write stdout/stderr to disk

  • clsi: copy output files into unique output directory

    • build-id composed of 8 random bytes plus timestamp in ms precision

    • delete all but last 3 (anonymous)/ 1 (logged in user) build folders

  • clsi: compile was failure/timeout

    • delete compile cache - it may have partial files/corrupted cache

  • editor: downloads output.log and output.pdf

  • user

    A user of the application

    editor

    The client application running in the browser

    clsi

    The micro service used for compiling PDFs

    document-updater

    The micro service used for processing document updates

    filestore

    The micro service handling binary files

    real-time

    The micro service used for handling web sockets

    this blog post
    overleaf.rc

    OVERLEAF_REDIS_PASS and REDIS_PASSWORD

    The password to use when connecting to Redis (if applicable). Both environment variables need to be set. See enabling password authentication for more infomration.

    OVERLEAF_REDIS_TLS

    If set to true, allows for the connection to a Redis instance requiring TLS.

    Note: mTLS is currently not supported.

    OVERLEAF_NAV_TITLE

    Set the tab title of the application

    OVERLEAF_SESSION_SECRET

    A random string which is used to secure tokens, if load balancing this needs to be set to the same token across boxes. If only 1 instance is being run it does not need to be set by the user.

    OVERLEAF_COOKIE_SESSION_LENGTH

    This environment variable allows you to override the default session cookie expiration time of 5 days. The override value provided should be specified in milliseconds. For example, to make the session last for 1 hour, set COOKIE_SESSION_LENGTH=3600000. (Added in Server Pro 4.2)

    OVERLEAF_TRUSTED_PROXY_IPS

    If not set, defaults to loopback. If setting manually, in addition to your trusted IPs, you must also include one of loopback, localhost or 127.0.0.1, which trusts the nginx instance running inside the sharelatex container. If using a subnet from 172.16.0.0/12 (default subnet for Docker networks) for your regular network, please set OVERLEAF_TRUSTED_PROXY_IPS=loopback,<network> in your config/variables.env. Where <network> is the IPAM -> Config -> Subnet value in docker inspect overleaf_default, e.g. OVERLEAF_TRUSTED_PROXY_IPS=loopback,172.19.0.0/16. This is to prevent the spoofing of X-Forwarded headers.

    If you are using an external TLS proxy (i.e. not managed by the Overleaf Toolkit), please ensure that OVERLEAF_TRUSTED_PROXY_IPS=loopback,<ip-of-your-tls-proxy>, e.g. OVERLEAF_TRUSTED_PROXY_IPS=loopback,192.168.13.37.

    OVERLEAF_RESTRICT_INVITES_TO_EXISTING_ACCOUNTS

    If set to true, will restrict project invites to email addresses which correspond with existing user accounts.

    OVERLEAF_ALLOW_PUBLIC_ACCESS

    If set to true, will allow non-authenticated users to view the site. The default is false, which means non-authenticated users will be unconditionally redirected to the login page when they try to view any part of the site. Note, setting this option does not disable authentication or security in any way. This option is necessary if your users intend to make their projects public and have non-authenticated users view those projects.

    OVERLEAF_ALLOW_ANONYMOUS_READ_AND_WRITE_SHARING

    If set to true, will allow anonymous users to view and edit projects shared via the

    link-sharing feature.

    OVERLEAF_DISABLE_LINK_SHARING

    Disables the link-sharing feature.

    EMAIL_CONFIRMATION_DISABLED

    When set to true the banner requesting email confirmation won't be displayed.

    ADDITIONAL_TEXT_EXTENSIONS

    an array of strings to configure additional extensions for editable files

    OVERLEAF_STATUS_PAGE_URL

    Custom status page URL (Added in Server Pro 3.4.0), e.g. status.example.com

    OVERLEAF_FPH_INITIALIZE_NEW_PROJECTS

    set to 'false' to prevent new projects from being initialised with Full Project History (Added in Server Pro 3.5.0)

    OVERLEAF_FPH_DISPLAY_NEW_PROJECTS

    set to 'false' to prevent new projects from displaying Full Project History instead of the legacy history (Added inServer Pro 3.5.0)

    ENABLE_CRON_RESOURCE_DELETION

    Set this environment variable to true to enable the automatic clean-up of deleted projects and users after 90 days.

    OVERLEAF_USER_HARD_DELETION_DELAY

    Used to modify the deleted users expiration delay. Configured in milliseconds. Defaults: 90 days

    OVERLEAF_PROJECT_HARD_DELETION_DELAY

    Used to modify the deleted projects expiration delay. Configured in milliseconds. Defaults: 90 days

    COMPILE_SIZE_LIMIT

    Controls the maximum request body size in bytes. This is the sum of all doc file sizes within the project (main.tex, references.bib (if not linked) etc), that needs to be sent in the initial compile request to the CLSI service.

    COMPILE_TIMEOUT

    This is the amount of time in seconds allowed for a compile to complete. For more information see Updating project compile timeout.

    MAX_RECONNECT_GRACEFULLY_INTERVAL_MS

    A configurable delay between editor graceful reconnection, data flushing, and container shutdown to mitigate the risk of data loss.

    SECCOMP_PROFILE

    Set this environment variable to a path on the Docker host machine that points to the SECCOMP profile. You can download a copy of the profile here. Currently needed for Podman deployments when using Sandboxed Compiles.

    OVERLEAF_DISABLE_CHAT

    If set to true, disables the in-project chat feature.

    OVERLEAF_LOGIN_SUPPORT_TEXT

    When set, can be used to display support information underneath the login button. Text will be shown on the login screen and can be used to direct users to internal support or provide guidance related to logging in, creating accounts, etc.

    ALLOW_MONGO_ADMIN_CHECK_FAILURES

    If set to true, allows the MongoDB start-up checks to fail and not prevent the deployment from starting. This may be required if you use a MongoDB database where your database user does not have the clusterParameterReader role. For help on creating a custom role see here.

    V1_HISTORY_URL_FOR_GIT_BRIDGE

    Allows separating the history-v1 endpoint for internal traffic (web service → history-v1 service, both in sharelatex container) and external traffic (git-bridge → history-v1, running in separate containers).

    OVERLEAF_MAINTENANCE_MESSAGE and OVERLEAF_MAINTENANCE_MESSAGE_HTML

    Used to customize the title and content of the Maintenance page.

    Can't be used with OVERLEAF_STATUS_PAGE_URL

    release notes
    release notes
    SAML Log in page
    S3 setup

    GIT_BRIDGE_LOG_LEVEL

    Configure the logging level of the git-bridge container. Available levels: TRACE, DEBUG, INFO, WARN, ERROR.

    - Default: INFO

    SIBLING_CONTAINERS_ENABLED

    When set to true, tells the Toolkit to use the Sibling Containers technique for compiling projects in separate sandboxes, using a separate Docker container for each project. See the documentation for more information. - Requires: SERVER_PRO=true - Default: true

    SIBLING_CONTAINERS_PULL

    When set to true, tells the Toolkit to automatically pull all TeX Live images set using ALL_TEX_LIVE_DOCKER_IMAGES in the config/variables.env file when using the bin/up command. - Default: true

    DOCKER_SOCKET_PATH

    Sets the path to the Docker socket on the host machine (the machine running the Toolkit). When SIBLING_CONTAINERS_ENABLED is true, the socket will be mounted into the container, to allow the compiler service to spawn new Docker containers on the host. - Requires: SIBLING_CONTAINERS_ENABLED=true - Default: /var/run/docker.sock

    OVERLEAF_DATA_PATH

    Sets the path to the directory that will be mounted into the main sharelatex container, and used to store compile data. This can be either a full path (beginning with a /), or relative to the base directory of the Toolkit. - Default: data/overleaf

    OVERLEAF_LISTEN_IP

    Sets the host IP address(es) that the container will bind to. For example, if this is set to 0.0.0.0, then the web interface will be available on any host IP address. For direct container access the value of OVERLEAF_LISTEN_IP must be set to your public IP address. Setting OVERLEAF_LISTEN_IP to either 0.0.0.0 or the external IP of your host will typically cause errors when used in conjunction with the . - Default: 127.0.0.1

    OVERLEAF_PORT

    Sets the host port that the container will bind to. For example, if this is set to 8099 and OVERLEAF_LISTEN_IP is set to 127.0.0.1, then the web interface will be available on http://localhost:8099. - Default: 80

    OVERLEAF_LOG_PATH

    Sets the path to the directory that will be mounted into the main sharelatex container, and used for making application logs available on the Docker host. This can be either a full path (beginning with a /), or relative to the base directory of the Toolkit.

    Remove the config entry to disable the bind-mount. When not set, logs will be discarded when recreating the container.

    See for information on logging.

    - Default: not set

    TLS_PRIVATE_KEY_PATH

    Path to the private key to use for the TLS Proxy. - Default: config/nginx/certs/overleaf_key.pem

    TLS_CERTIFICATE_PATH

    Path to the public certificate to use for the TLS Proxy. - Default: config/nginx/certs/overleaf_certificate.pem

    PROJECT_NAME

    Sets the value of the --project-name flag supplied to docker-compose. This is useful when running multiple instances of Overleaf on one host, as each instance can have a different project name. - Default: overleaf

    OVERLEAF_IMAGE_NAME

    Docker image as used by the Server Pro/CE application container. This is just the Docker image name, the Docker image tag is sourced from config/version.

    - Default:

    • Server Pro: quay.io/sharelatex/sharelatex-pro

    • Community Edition: sharelatex/sharelatex

    SERVER_PRO

    When set to true, tells the Toolkit to use the Server Pro image (quay.io/sharelatex/sharelatex-pro), rather than the default Server CE image (sharelatex/sharelatex). - Default: false

    GIT_BRIDGE_ENABLED

    Set to true to enable the git-bridge feature (Server Pro only). For more infomration see the Git integration user documentation.

    - Default: false

    GIT_BRIDGE_IMAGE

    Docker image as used by the git-bridge container (Server Pro only). This is just the Docker image name, the Docker image tag is sourced from config/version.

    - Default: quay.io/sharelatex/git-bridge

    GIT_BRIDGE_DATA_PATH

    Sets the path to the directory that will be mounted into the git-bridge container (Server Pro only), and used to store the git-repositories. This can be either a full path (beginning with a /), or relative to the base directory of the Toolkit.

    MONGO_ENABLED

    When set to true, tells the Toolkit to create a MongoDB container to host the database. When set to false, this container will not be created, and the system will use the MongoDB database specified by MONGO_URL instead. - Default: true

    MONGO_URL

    Specifies the MongoDB connection URL to use when MONGO_ENABLED is false - Default: not set

    MONGO_DATA_PATH

    Sets the path to the directory that will be mounted into the mongo container, and used to store the MongoDB database. This can be either a full path (beginning with a /), or relative to the base directory of the toolkit. This option only affects the local mongo container that is created when MONGO_ENABLED is true. - Default: data/mongo

    MONGO_IMAGE

    Docker image as used by the MongoDB container. This is just the name of the Docker image, the Docker image tag should go into MONGO_VERSION (see below).

    - Default: mongo

    MONGO_VERSION

    MongoDB version as used by the MongoDB container. The value must start with the major MongoDB version and a dot, e.g. 6.0 or 6.0-with-suffix.

    - Default: 6.0

    REDIS_ENABLED

    When set to true, tells theToolkit to create a Redis container, to host the redis database. When set to false, this container will not be created, and the system will use the Redis database specified by REDIS_HOST and REDIS_PORT instead. - Default: true

    REDIS_HOST

    Specifies the Redis host to use when REDIS_ENABLED is false - Default: not set

    REDIS_PORT

    Specifies the Redis port to use when REDIS_ENABLED is false - Default: not set

    REDIS_DATA_PATH

    Sets the path to the directory that will be mounted into the redis container, and used to store the Redis database. This can be either a full path beginning with a /), or relative to the base directory of the Toolkit. This option only affects the local redis container that is created when REDIS_ENABLED is true. - Default: data/redis

    REDIS_AOF_PERSISTENCE

    Turn on AOF (Append Only File) persistence for Redis. This is the recommended configuration for Redis persistence.

    For additional details, see the AOF section in Data and backups.

    - Default: true

    NGINX_ENABLED

    When set to true, tells theToolkit to create an NGINX container, to act as a TLS Proxy. - Default: false

    NGINX_CONFIG_PATH

    Path to the NGINX config file to use for the TLS Proxy. - Default: config/nginx/nginx.conf

    NGINX_TLS_LISTEN_IP

    Sets the host IP address(es) that the TLS Proxy container will bind to for HTTPS. For example, if this is set to 0.0.0.0 then the HTTPS web interface will be available on any host IP address. Typically this should be set to the external IP of your host. - Default: 127.0.1.1

    NGINX_HTTP_LISTEN_IP

    Sets the host IP address(es) that the TLS Proxy container will bind to for http redirect. For example, if this is set to 127.0.1.1 then HTTP connections to 127.0.1.1 will be redirected to the HTTPS web interface. Typically this should be set to the external IP of your host. Do not set it to 0.0.0.0 as this will typically cause a conflict with OVERLEAF_LISTEN_IP. - Default: 127.0.1.1

    NGINX_HTTP_PORT

    Sets the host port that the TLS Proxy container will bind to for HTTP. - Default: 80

    TLS_PORT

    Sets the host port that the TLS Proxy container will bind to for HTTPS. - Default: 443

    (e) ephemeral files, can be deleted when the instance is stopped
    redis db datadir
  • ~/overleaf_data

    1. bin

      1. synctex (d)

        • unused in latest release, previously a custom synctex binary was used (synctex is used for source mapping between .tex files and the pdf)

    2. data

      1. cache (e)

        • binary file cache for compiles

      2. compiles (e)

    3. tmp

      1. dumpFolder (e)

        • temporary files from handling zip files

      2. uploads (e)

  • Folders in detail
    mongodump
    here

    S3

    This document covers the setup of S3 in Server CE and Server Pro. A separate guide can be found on migrating existing data to S3 compatible storage.

    When to consider using S3 for data storage

    For instances with fewer than 1000 seats we recommend using local disk storage with regular consistent backups.

    For larger instances with more than 1000 seats that reach limits of their local storage (size or throughput), we recommend using a S3 compatible object storage back end over other network based storage solutions like NFS.

    S3 compatible object storage options

    Here are the most popular options for S3 compatible object storage:

    • , managed, we suggest picking AWS S3 when running Overleaf CE/Server Pro on AWS

    • , self-hosted

    • , self-hosted

    • Other hosting providers also have some kind of managed S3 compatible object storage, you may want to use these instead of running your own when already running Overleaf CE/Server Pro at such a provider.

    Latency considerations when picking a S3 compatible object storage

    The latency between the Server CE/Server Pro instance and your S3 compatible object storage is a big contributor to the time it takes to complete the migration. The latency also impacts the file-upload performance in Server CE/Server Pro and slow file-downloads can have a big impact on PDF compile times as well. We suggest minimizing the geo-graphical distance between your Server CE/Server Pro instance and the S3 compatible object storage. In a managed environment, this would mean provisioning a bucket in the same region, and for an on-premise solution, running the two on the same campus.

    S3 setup

    We need four "buckets" and two restricted user accounts.

    Buckets should not be publicly accessible

    You may want/need to pick a different name, be sure to use the custom buckets in all the commands.

    The following will use placeholders for actual credentials:

    Environment variable
    Description

    Server CE and Server Pro only needs a small set of permissions on each bucket:

    • create object

    • get object

    • delete object

    • list bucket

    Access Policies

    Here is how a policy for the filestore user could look like:

    Here is how a policy for the history user could look like:

    Overview of variables

    When using AWS S3

    When using a self-hosted option

    MINIO setup

    MINIO_ROOT_USER and MINIO_ROOT_PASSWORD are the root credentials of the MINIO instance.

    Please follow the for obtaining a copy of mc.

    Binary files migration

    The upcoming major version 6.0 release of Server Pro and Community Edition will reduce the storage usage of binary files in half. An online migration is included in version 5.5.6 , allowing for minimal downtime as part of the upgrade.

    Since Server Pro 4.x, binary files are stored twice: in the active files storage in "filestore" and in the full project history system. Moving forward, a single copy of each file will be stored in the full project history system.

    The migration to the consolidated storage system is composed of two parts: A new flag for controlling the phase of the migration and a script that processes all active and soft-deleted projects.

    Phases:

    • OVERLEAF_FILESTORE_MIGRATION_LEVEL=0 (default), files are read and written to filestore. Files are written to history asynchronously.

    • OVERLEAF_FILESTORE_MIGRATION_LEVEL=1 , files are read from history with fallback to filestore and written to both filestore and the history. Downgrade to OVERLEAF_FILESTORE_MIGRATION_LEVEL=0 is possible.

    • OVERLEAF_FILESTORE_MIGRATION_LEVEL=2 files are read and written to history only. Downgrade to OVERLEAF_FILESTORE_MIGRATION_LEVEL=1 is not possible, unless it was performed "offline".

    When storing data in and using separate service accounts for filestore (OVERLEAF_FILESTORE_S3_ACCESS_KEY_ID) and history (OVERLEAF_HISTORY_S3_ACCESS_KEY_ID): Please grant the filestore user read access to the history bucket for blobs OVERLEAF_HISTORY_PROJECT_BLOBS_BUCKET . The filestore service will serve reads from the compiler service moving forward.

    It is highly recommended to perform the binary files migration in a non-production/sandbox environment first.

    If you upgrade to Server Pro/CE version 6.0 and later decide that you want to downgrade to an earlier version, then you should restore from a full system backup.

    Migration procedure

    1

    Create a backup

    Create a full of your instance with a consistent snapshot of the mongo, redis and sharelatex directories.

    2

    Offline migration

    If you want to prevent users from being able to log in while the binary file migration script is running, please follow these steps:

    • Log into your Overleaf instance with an admin account

    • Click on the Admin button and choose Manage Site

    • Click the Open/Close Editor tab

    • Click on the Close Editor button

    Once this has been done, if any users are logged in they will get redirected to the maintenance page, and any new users visiting the log-in page will see the maintenance page and won't be able to log in.

    You need to repeat these steps when restarting the instance. To re-open the site, simply restart the instance.

    Online migration

    It is possible to run the migration scripts while the application is still running. There are a few considerations to take into account:

    • The migration process is IO intensive, you should monitor resource usage while the script is running.

    • With a high processing concurrency, the event loop in filestore service might experience some blocking, which would lead to a degraded user experience. We recommend starting with the default values of --concurrency=10 and --concurrent-batches=1 .

    • You can stop the script at any time. Starting it again will validate the previous projects and skip over files that have been processed already. This is useful in case you prefer to run the migration in less busy hours (e.g. at night).

    Our recommendation is to close the site and run the migration offline in a maintenance window when your project count is less than 1000 projects (see output of the migration script when running with --report). If the number of projects is large you can run the script and monitor its progress, then decide whether to continue running it online or offline based on your particular case.

    Clean up legacy binary file data

    When you are done with the migration and verified that projects can still access all their files, you can remove the old file storage in /var/lib/overleaf/data/user_files. We highly recommend keeping these files around for a while - you can make them inaccessible to the application by renaming the folder first.

    Troubleshooting

    We will add troubleshooting advice here. Please note that while we normally offer support only to Server Pro customers, given the nature of this migration, we will also do our best to support CE customers who experience problems specific to the binary file migration.

    If the binary file migration script fails (i.e. exits with an error or prints a non-zero number of failed projects), please send the following details to our support team by email , detailing:

    Subject: Binary file migration problem

    Body:

    • Instance Type: CE or Server Pro (delete as appropriate)

    • Installation Type: Overleaf toolkit or docker-compose.yml or other (delete as appropriate)

    • Version: 5.5.x (toolkit: $ cat config/version)

    Consider attaching the log files for the filestore service to the email. You can find it at /var/log/overleaf/filestore.log inside the sharelatex container and export them like this:

    Please redact any sensitive information from the log files before attaching them.

    Missing files

    Older versions of Server Pro/CE created file-tree entries before user uploads finished, which could cause files to appear as missing when an upload failed. You might find a few of these cases reported as errors when processing all the file-trees.

    In case the number of missing files is low, consider manually reviewing these cases and delete them from the editor in the browser.

    In case the number of missing files is high, consider reaching out to support, see email template above.

    Finding broken file trees

    The migration may fail for projects which have a malformed file tree (for example, where filenames are empty). You can find a list of these problems using the find_malformed_filetrees script which checks all projects in the database:

    To fix the invalid paths, use the fix_malformed_filetree script, running the command once for each bad path:

    # Gracefully shutdown the old instance
    old-server$ bin/stop
    
    # Create the tar-ball
    old-server$ tar --create --file backup-old-server.tar config/ data/
    
    # Copy the backup-old-server.tar file from the old-server to the
    # new-server using any method that fits
    
    # Gracefully shutdown new instance (if started yet)
    new-server$ bin/stop
    
    # Move new data, you can delete it too
    new-server$ mkdir backup-new-server
    new-server$ mv config/ data/ backup-new-server/
    
    # Populate config/data dir again
    new-server$ tar --extract --file backup-old-server.tar
    
    # Start containers
    new-server$ bin/up
    # Gracefully shutdown the old instance
    old-server$ docker stop sharelatex
    old-server$ docker stop mongo redis
    
    # Create the tar-ball
    old-server$ tar --create --file backup-old-server.tar ~/OVERLEAF_data ~/mongo_data ~/redis_data
    
    # Copy the backup-old-server.tar file from the old-server to
    # the new-server using any method that fits
    
    # Gracefully shutdown new instance (if started yet)
    new-server$ docker stop sharelatex
    new-server$ docker stop mongo redis
    
    # Move new data, you can delete it too
    new-server$ mkdir backup-new-server
    new-server$ mv ~/OVERLEAF_data ~/mongo_data ~/redis_data backup-new-server/
    
    # Populate data dirs again
    new-server$ tar --extract --file backup-old-server.tar
    
    # Start containers
    new-server$ docker start mongo redis
    new-server$ docker start sharelatex

    latex compilation happens here

  • db.sqlite (d)

    • unused in latest release, previously stored clsi cache details (either moved to simple in-memory maps or we scan the disk)

  • db.sqlite-wal (d)

    • unused in latest release, see db.sqlite

  • output (e)

    • latex compilation output storage for serving to client

  • template_files (b)

    • image previews of template system (Server Pro only)

  • user_files (b)

    • binary files of projects

  • history (b)

    • full project history files

  • buffering of file uploads (binary file/new-project-from-zip upload)

  • projectHistories (e)

    • temporary files for full project history migrations

  • Sandboxed Compiles
    TLS Proxy
    here

    overleaf-chunks

    history chunks

    history

    history/overleaf-chunks

    Bucket

    Usage

    Service

    Previously in /var/lib/overleaf/data

    overleaf-user-files

    project user files

    filestore

    user_files

    overleaf-template-files

    template files

    filestore

    template_files

    overleaf-project-blobs

    project history blobs

    history and read-only filestore

    history/overleaf-project-blobs

    OVERLEAF_FILESTORE_S3_ACCESS_KEY_ID

    The access key/username of the restricted user of the filestore service.

    OVERLEAF_FILESTORE_S3_SECRET_ACCESS_KEY

    The secret key/password of the restricted user of the filestore service.

    OVERLEAF_HISTORY_S3_ACCESS_KEY_ID

    The access key/username of the restricted user of the history service.

    OVERLEAF_HISTORY_S3_SECRET_ACCESS_KEY

    The secret key/password of the restricted user of the history service.

    AWS S3
    MINIO
    Ceph
    official documentation
    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "s3:ListBucket"
          ],
          "Resource": "arn:aws:s3:::overleaf-user-files"
        },
        {
          "Effect": "Allow",
          "Action": [
            "s3:PutObject",
            "s3:GetObject",
            "s3:DeleteObject"
          ],
          "Resource": "arn:aws:s3:::overleaf-user-files/*"
        },
        {
          "Effect": "Allow",
          "Action": [
            "s3:GetObject",
          ],
          "Resource": "arn:aws:s3:::overleaf-project-blobs/*"
        },
        {
          "Effect": "Allow",
          "Action": [
            "s3:ListBucket"
          ],
          "Resource": "arn:aws:s3:::overleaf-template-files"
        },
        {
          "Effect": "Allow",
          "Action": [
            "s3:PutObject",
            "s3:GetObject",
            "s3:DeleteObject"
          ],
          "Resource": "arn:aws:s3:::overleaf-template-files/*"
        }
      ]
    }
    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "s3:ListBucket"
          ],
          "Resource": "arn:aws:s3:::overleaf-project-blobs"
        },
        {
          "Effect": "Allow",
          "Action": [
            "s3:PutObject",
            "s3:GetObject",
            "s3:DeleteObject"
          ],
          "Resource": "arn:aws:s3:::overleaf-project-blobs/*"
        },
        {
          "Effect": "Allow",
          "Action": [
            "s3:ListBucket"
          ],
          "Resource": "arn:aws:s3:::overleaf-chunks"
        },
        {
          "Effect": "Allow",
          "Action": [
            "s3:PutObject",
            "s3:GetObject",
            "s3:DeleteObject"
          ],
          "Resource": "arn:aws:s3:::overleaf-chunks/*"
        }
      ]
    }
    # Enable S3 backend for filestore
    OVERLEAF_FILESTORE_BACKEND=s3
    
    # Bucket name for project files
    OVERLEAF_FILESTORE_USER_FILES_BUCKET_NAME=overleaf-user-files
    
    # Bucket name for template files
    OVERLEAF_FILESTORE_TEMPLATE_FILES_BUCKET_NAME=overleaf-template-files
    
    # Key for filestore user
    OVERLEAF_FILESTORE_S3_ACCESS_KEY_ID=...
    
    # Secret for filestore user
    OVERLEAF_FILESTORE_S3_SECRET_ACCESS_KEY=...
    
    # Bucket region you picked when creating the buckets.
    OVERLEAF_FILESTORE_S3_REGION=""
    
    # Enable S3 backend for history
    OVERLEAF_HISTORY_BACKEND=s3
    
    # Bucket name for project history blobs
    OVERLEAF_HISTORY_PROJECT_BLOBS_BUCKET=overleaf-project-blobs
    
    # Bucket name for history chunks
    OVERLEAF_HISTORY_CHUNKS_BUCKET=overleaf-chunks
    
    # Key for history user
    OVERLEAF_HISTORY_S3_ACCESS_KEY_ID=...
    
    # Secret for history user
    OVERLEAF_HISTORY_S3_SECRET_ACCESS_KEY=...
    
    # Bucket region you picked when creating the buckets.
    OVERLEAF_HISTORY_S3_REGION=""
    # Enable S3 backend for filestore
    OVERLEAF_FILESTORE_BACKEND=s3
    
    # Bucket name for project files
    OVERLEAF_FILESTORE_USER_FILES_BUCKET_NAME=overleaf-user-files
    
    # Bucket name for template files
    OVERLEAF_FILESTORE_TEMPLATE_FILES_BUCKET_NAME=overleaf-template-files
    
    # Key for filestore user
    OVERLEAF_FILESTORE_S3_ACCESS_KEY_ID=...
    
    # Secret for filestore user
    OVERLEAF_FILESTORE_S3_SECRET_ACCESS_KEY=...
    
    # S3 provider endpoint
    OVERLEAF_FILESTORE_S3_ENDPOINT=http://10.10.10.10:9000
    
    # Path style addressing of buckets. Most likely you need to set this to "true".
    OVERLEAF_FILESTORE_S3_PATH_STYLE="true"
    
    # Bucket region. Most likely you do not need to configure this.
    OVERLEAF_FILESTORE_S3_REGION=""
    
    # Enable S3 backend for history
    OVERLEAF_HISTORY_BACKEND=s3
    
    # Bucket name for project history blobs
    OVERLEAF_HISTORY_PROJECT_BLOBS_BUCKET=overleaf-project-blobs
    
    # Bucket name for history chunks
    OVERLEAF_HISTORY_CHUNKS_BUCKET=overleaf-chunks
    
    # Key for history user
    OVERLEAF_HISTORY_S3_ACCESS_KEY_ID=...
    
    # Secret for history user
    OVERLEAF_HISTORY_S3_SECRET_ACCESS_KEY=...
    
    # S3 provider endpoint
    OVERLEAF_HISTORY_S3_ENDPOINT=http://10.10.10.10:9000
    
    # Path style addressing of buckets. Most likely you need to set this to "true".
    OVERLEAF_HISTORY_S3_PATH_STYLE="true"
    
    # Bucket region. Most likely you do not need to configure this.
    OVERLEAF_HISTORY_S3_REGION=""
    mc alias set s3 http://10.10.10.10:9000 MINIO_ROOT_USER MINIO_ROOT_PASSWORD
    
    # Put the contents of the policies from the previous section in the
    # respective json file policy-filestore.json and policy-history.json.
    # Reminder: Replace the bucket names and credentials accordingly.
    
    # filestore buckets, user and policy
    mc mb --ignore-existing s3/overleaf-user-files
    mc mb --ignore-existing s3/overleaf-template-files
    mc admin user add s3 \
      OVERLEAF_FILESTORE_S3_ACCESS_KEY_ID \
      OVERLEAF_FILESTORE_S3_SECRET_ACCESS_KEY
    mc admin policy create s3 overleaf-filestore policy-filestore.json
    mc admin policy attach s3 overleaf-filestore \
      --user=OVERLEAF_FILESTORE_S3_ACCESS_KEY_ID
    
    # history buckets, user and policy
    mc mb --ignore-existing s3/overleaf-project-blobs
    mc mb --ignore-existing s3/overleaf-chunks
    mc admin user add s3 \
      OVERLEAF_HISTORY_S3_ACCESS_KEY_ID \
      OVERLEAF_HISTORY_S3_SECRET_ACCESS_KEY
    mc admin policy create s3 overleaf-history policy-history.json
    mc admin policy attach s3 overleaf-history \
      --user=OVERLEAF_HISTORY_S3_ACCESS_KEY_ID
    Update

    Toolkit: Use the $ bin/upgrade script for upgrading the toolkit to the latest version and edit config/version to 5.5.6.

    Legacy docker-compose.yml: Update the version of the sharelatex service to 5.5.6.

    3

    Estimate the number of affected projects

    Example output:

    4

    Flush project history queues

    Repeat the flush until all projects have been flushed ("project_ids":0).

    In case "failedProjects" is not zero, please reach out to support and do not continue with the binary files migration.

    5

    Advance the migration phase to 1

    Toolkit: Set OVERLEAF_FILESTORE_MIGRATION_LEVEL=1 in config/variables.env.

    Legacy docker-compose.yml: Set OVERLEAF_FILESTORE_MIGRATION_LEVEL: '1' in the environment section of the sharelatex service.

    6

    Apply the configuration change and start the instance

    Toolkit: bin/up -d

    Legacy docker-compose.yml: docker compose up -d

    7

    Verify access to binary files

    Open a project in the Overleaf editor in the browser and select a binary file, like an image.

    8

    Run the migration script

    If you're persisting log files outside the sharelatex container, ensure that the logs directory owner is set to the www-data user (uid=33) so that the outputted log file can be written.

    The output should look like this:

    If the migration is successful, you'll get an exit code of 0, and the last lines indicating no failures:

    The log file will look like this (use the path as printed by the script):

    9

    Stop the instance

    Toolkit: bin/stop sharelatex

    Legacy docker-compose.yml: docker compose stop sharelatex

    10

    Make old files inaccessible to the application

    You can now move the old files to secondary storage. We recommend keeping the files around for a while in case issues arise later.

    11

    Advance the migration phase to 2

    Toolkit: Set OVERLEAF_FILESTORE_MIGRATION_LEVEL=2 in config/variables.env.

    Legacy docker-compose.yml: Set OVERLEAF_FILESTORE_MIGRATION_LEVEL: '2' in the environment section of the sharelatex service.

    12

    Apply the configuration change and start the instance

    Toolkit: bin/up -d

    Legacy docker-compose.yml: docker compose up -d

    13

    Verify access to binary files

    Open a project in the Overleaf editor in the browser and select a binary file, like an image.

    Click on the Disconnect all users button

    Migration script output (which should be located in the container under /var/log/overleaf)
  • Report: (run migration script with --report)

  • Processed projects: (as per the last run of the script)

  • Duration of the migration:

  • bin/doctor output (when using toolkit)

  • Toolkit version: $ git rev-parse HEAD (when using Toolkit)

  • S3
    backup
    [email protected]

    The standard Server Pro license allows you to run the application in a production environment as well as one in a non-production/sandbox environment; it is highly recommended that you provision a non-production environment for testing.

    SAML 2.0

    Server Pro provides SAML 2.0 server integration for user authentication. For Toolkit deployments, the SAML 2.0 integration is configured via the config/variables.env file.

    Overview

    Internally, the Overleaf SAML 2.0 integration uses the passport-SAML library. Most of these configuration options are passed through to the server configuration object which is used to configure passport-SAML.

    If you are having issues configuring SAML 2.0, it is worth reading the README for passport-SAML to get a feel for the configuration it expects.

    To enable the SAML 2.0 module, the EXTERNAL_AUTH variable must be set to saml:

    To preserve backward compatibility with older configuration files, if EXTERNAL_AUTH is not set, but OVERLEAF_SAML_ENTRYPOINT is set, then the SAML 2.0 module will be activated. We still recommend setting EXTERNAL_AUTH explicitly

    Configuration

    Name
    Description

    Passing keys and certificates

    As of Server Pro 2.7.0:

    • The value of the OVERLEAF_SAML_CERT environment variable cannot be empty if SAML 2.0 is enabled (with EXTERNAL_AUTH=saml, or if OVERLEAF_SAML_ENTRYPOINT is set).

    As of Server Pro 2.5.0:

    • The value of the OVERLEAF_SAML_CERT environment variable must be passed in single-line format (without the begin and end lines from the PEM format; see below for more information).

    • The value of the OVERLEAF_SAML_PRIVATE_CERT environment variable should be a full path to a file which contains the private key in PEM format.

    • The value of the OVERLEAF_SAML_DECRYPTION_PVK environment variable must be passed in PEM format (multi-line). (But single-line may be .)

    To pass a key or certificate in multi-line format, wrap the entire value in double quotes and use new line characters (\n) as usual:

    The above private key is an example key from the library's test suite. Do not use this key.

    Metadata for the Identity Provider

    Your Identity Provider (IdP) will need to be configured to recognize your Server Pro instance as a Service Provider (SP). How this is done will vary between different IdP's - we therefore recommend that you consult the documentation for your SAML 2.0 server for instructions on how to do this.

    As of version 2.6.0, Server Pro includes a metadata endpoint which can be used to retrieve Service Provider Metadata from, for example https://my-overleaf-instance.com/saml/meta

    Here is an example of appropriate Service Provider (SP) metadata, note the AssertionConsumerService.Location, EntityDescriptor.entityID and EntityDescriptor.ID properties, and set as appropriate.

    Release notes 3.x.x

    The standard Server Pro license allows you to run the application in a production environment as well as one in a non-production/sandbox environment; it is highly recommended that you provision a non-production environment for testing.

    Server Pro 3.5.13

    Release date: 2023-10-06

    Image ID: 4f2113a3c903 (Community Edition Image ID: 0038aa2cc383)

    • Fixes history soft retry cronjob, which was executing the operation as a hard retry.

    Server Pro 3.5.12

    Release date: 2023-09-25

    Image ID: af3621af7b83 (Community Edition Image ID: a461cd37241b)

    • Workaround a bug in the when multiple updates have the same version.

    Server Pro 3.5.11

    Release date: 2023-08-10

    Image ID: dcfec83c5091 (Community Edition Image ID: 6f8a5409f146)

    • Fixed a bug in the when large deleted documents exist.

    • Extended the to free up mongo storage space.

    We advise customers to re-run the script again as per the documentation.

    Server Pro 3.5.10

    Release date: 2023-07-20

    Image ID: f83dc1e03fcf (Community Edition Image ID: 373b0b94b156)

    This release includes security updates.

    Server Pro 3.5.9

    Release date: 2023-07-14

    Image ID: d746f967e231 (Community Edition Image ID: 25aa7097b27b)

    This release includes security updates.

    Server Pro 3.5.8

    Release date: 2023-06-29

    Image ID: 03c294380d2c (Community Edition Image ID: 39d691cb806e)

    Fixes a bug preventing anonymous users from adding changes to the Project History when Full Project History is enabled.

    Server Pro 3.5.7

    Release date: 2023-06-01

    Image ID: 65cc2f2e2af6 (Community Edition Image ID: cc998380cad7)

    Fixes a bug in the when using --force-clean that prevented migration reattempts in certain situations.

    Server Pro 3.5.6

    Release date: 2023-05-04

    Image ID: 0dee80908e57 (Community Edition Image ID: 89c35e1b6ec8)

    Added clean_sl_history_data script to .

    Server Pro 3.5.5

    Release date: 2023-03-21

    Image ID: 35bda2a2a778 (Community Edition Image ID: 9db95d7e350c)

    This release fixes the shutdown sequence in Server Pro / Community Edition.

    Server Pro 3.5.4

    Release date: 2023-03-20

    Image ID: 44d12da219d7 (Community Edition Image ID: 563d00cfad2a)

    This release disables the primary email check feature in Server Pro / Community Edition.

    Server Pro 3.5.3

    Release date: 2023-03-07

    Image ID: 8c7444b2e929 (Community Edition Image ID: 60bef8c323a5)

    This release includes a performance improvement to the .

    Server Pro 3.5.2

    Release date: 2023-03-07

    Image ID: dca7282041af (Community Edition Image ID: cd45ea2957b0)

    This release includes several improvements to the .

    Server Pro 3.5.1

    Release date: 2023-02-28

    Image ID: 6a64c0f67077 (Community Edition Image ID: bfa72dc4430f)

    This release includes a fix for a German translation in the editor.

    Server Pro 3.5.0

    Release date: 2023-02-13

    Image ID: f6963b4eaad9 (Community Edition Image ID: 678db4634722)

    This release includes the that is already available in our SaaS offering, and brings several improvements for users:

    Tracks changes in binary files, which is unsupported in the legacy system. There is support for labelled versions. The system is in general more robust, there is less chance of data loss.

    After upgrading your instance all new projects will be using Full Project History by default (unless opting-out, see environment variables in ). Existing projects will continue using the legacy History system, until they’re migrated.

    .

    This release also ships with official support for S3 compatible object storage. This could either be a self-hosted solution, like min.io or ceph.io, or AWS S3. The S3 based storage backend can optionally replaces the local fs/NFS storage backend. You can find a wiki page on and another wiki page describes the for moving existing data into S3. With S3-compatible object storage support we prepared Server Pro for horizontal scaling, look out for news here soon!

    Bugfixes

    • Remove empty "Advanced" tab in admin panel.

    Other changes

    • Added cleanup scripts to flush redis data on container shutdown. This might increase the time it takes to stop the instance to up to 1 minute. If you're not using the Overleaf Toolkit, you need to .

    • German translation coverage significantly improved ()

    Server Pro 3.4.0

    Release date: 2023-01-11

    Image ID: 07f5275feec5 (Community Edition Image ID: 009c80a8d63e)

    This release includes database migrations. Please before upgrading.

    New Features

    • New environment variable SHARELATEX_STATUS_PAGE_URL can be set to a custom status page URL. This URL is displayed when the site is closed for maintenance and on 500 errors.

    Bugfixes

    • Fix parsing of authnContext in passport-saml options (Server Pro).

    • Fix disconnect users option in site admin panel (Server Pro).

    Other changes

    • Drop limit for output.pdf requests. This should mitigate errors compiling a project several times in a short time.

    • Memory management improvements during file upload process. These changes reduce pressure on the disk from fewer IO operations.

    Server Pro 3.3.2

    Release date: 2022-11-15

    Image ID: c03e78f10d6d (Community Edition Image ID: eab840a50369)

    This release includes a fix for a server error that can stop the project dashboard from opening:

    TypeError: (project.archived || []).some is not a function

    The fix sports a new migration for converting the archived and trashed state of projects from a per-project setting to a per-user setting.

    As always, please take a of your database before upgrading to this release.

    Server Pro 3.3.1

    Release date: 2022-10-18

    Image Id: 9194fb1de6b3 (no Community Edition image)

    This release includes a security update addressing potential vulnerabilities with SAML auth provider integration.

    Server Pro 3.3.0

    Release date: 2022-10-13

    Image ID: 56f044d08198 (Community Edition Image ID: 4c4bad165ea6)

    This new release of Server Pro includes a MongoDB migration affecting several collections. Please ensure you have a before upgrading.

    For CE users, and Server Pro users that don't run there is a change in how Latex packages are installed, now requiring to run tlmgr path add again after every use of tlmgr install in order to correctly symlink all the binaries into the system path.

    New Features

    • User/Project audit logs can now store more than 200 entries.

    Other changes

    • HTML content in Template descriptions is now sanitized using . This might affect your existing templates.

    Server Pro 3.2.2

    Release date: 2022-09-19

    Image ID: 20e80bd600fb (Community Edition Image ID: 8552c59519a7)

    Bugfixes

    • Fixes TexLive package setup (non-sandboxed compiles) (https://github.com/overleaf/overleaf/issues/1044)

    Server Pro 3.2.1

    Release date: 2022-08-26

    Image ID: 3817bd0d07a4 (Community Edition Image ID: 31cc6bc2bfa7)

    Bugfixes

    • Fixes source editor not being displayed (https://github.com/overleaf/overleaf/issues/1043)

    Server Pro 3.2.0

    Release date: 2022-08-16

    Image ID: 4db483917643 (Community Edition Image ID: 1bce84a47f1f)

    This new release of Server Pro includes several new features. It also requires updating Mongo version to 4.4. Upgrade instructions are . Please ensure you have a before upgrading.

    New Features

    • User Activity and License Usage information (with a count of active users) is now displayed in the Admin Panel.

    • .

    • User Dictionary entries can now be deleted from the Editor Settings panel.

    • TexLive 2022 is available for instances running . Check the for instructions to upgrade. TexLive 2022 is also the default version for instances not running Sandboxed Compiles.

    Bugfixes

    • Fixed .

    Server Pro 3.1.1

    Release date: 2022-08-10

    Image ID: eb5802bfd8a4 (Community Edition Image ID: 401c5a25016d)

    Bugfixes

    • Fixes history diff navigation (https://github.com/overleaf/overleaf/issues/1035)

    Server Pro 3.1.0

    Release date: 2022-05-17

    Image ID: 699e7c990b0f (Community Edition Image ID: 9c9fe33828a0)

    This release requires updating Mongo version to 4.2. Upgrade instructions are . Please ensure you have a before upgrading.

    New Features

    Other changes

    • TexLive 2021 is available for instances running . Check the for instructions to upgrade.

    • The path of the application inside the container has changed from /var/www/sharelatex to /overleaf; if you have bind mounts that use the old path, they will need to be updated.

    • Many small improvements and bugfixes.

    Server Pro 3.0.1

    Release date: 2021-10-05

    Image ID: 5e87b3c5ad41 (Community Edition Image ID: 9155d8a13aaa)

    This major release includes migrations that update the database in a backwards incompatible format. Please ensure you have a before upgrading, in case of roll-back you will not be able to read data in the new format.

    This update brings general performance and stability improvements to the application, along with many small improvements and bugfixes.

    We've recently updated the way we tag our docker images. In addition to 3.0.1, we're also tagging the new version as 3 and 3.0, representing the latest major and minor versions for the 3.x.x branch respectively. These new tags will be updated again when a new minor or hotfix version is published.

    latest tag won't be immediately updated to this new major version. If you're using a docker-compose.yml please update your image tag to 3, 3.0 or 3.0.1. users can continue using the script as usual.

    Important: before upgrading to this new major version you need to upgrade to version 2.7.1 first.

    Troubleshooting

    Duplicate Keys

    A migration may occasionally fail due to unexpected duplicate entries in a mongo collection.

    Duplicate keys in tags collection

    If upgrading from 2.7.1 to 3.0.1 fails with messages containing MongoError: Error during migrate "20190912145029_create_tags_indexes": E11000 duplicate key error collection: sharelatex.tags index: user_id_1_name_1 dup key: {<…>} this means that one of your users has multiple tags/folders with the same name.

    To recover, revert to your 2.7.1 backups and ask the user to make their tag/folder names unique. (The user id and specific tag name will be reported in the error message, so you can contact the affected user and mention the specific tag name that is problematic.) Then attempt the upgrade again.

    You can also attempt to detect multiple tags in advance, before you upgrade, with the following aggregate:

    If it returns no results, there are no duplicate tags, and the migration should succeed.

    Duplicate keys in contacts collection

    If you see the error MongoError: Error during migrate "20190912145001_create_contacts_indexes": E11000 duplicate key error collection: sharelatex.contacts index: user_id_1 dup key{<…>} this indicates a similar problem in the contacts collection. You can check how many entries are affected with the following command:

    The contacts collection is a cache of names which appear as completions in the "Share Project" modal, it is not critical data. You can remove individual duplicate entries with the command

    where the ObjectId value should be taken from the list of duplicates. When the duplicate contacts have been removed, the migration should succeed.

    SAML initialisation error

    You might see a cert is required error when upgrading from Server Pro 2.6.2 or earlier if SHARELATEX_SAML_CERT .

    If you come across the issue, please add the SHARELATEX_SAML_CERT value, and update your instance to 2.7.1 before attempting to upgrade to 3.x.x.

    # Overleaf Toolkit users:
    $ bin/docker-compose exec sharelatex /bin/bash -c "source /etc/overleaf/env.sh && source /etc/container_environment.sh && cd /overleaf/services/history-v1 && /sbin/setuser www-data node storage/scripts/back_fill_file_hash.mjs --report"
    
    # Legacy docker-compose.yml users:
    $ docker compose exec sharelatex /bin/bash -c "source /etc/overleaf/env.sh && source /etc/container_environment.sh && cd /overleaf/services/history-v1 && /sbin/setuser www-data node storage/scripts/back_fill_file_hash.mjs --report"
    Current status:
    - Total number of projects: 10
    - Total number of deleted projects: 5
    Sampling 1000 projects to estimate progress...
    Sampled stats for projects:
    - Sampled projects: 9 (90% of all projects)
    - Sampled projects with all hashes present: 5
    - Percentage of projects that need back-filling hashes: 44% (estimated)
    - Sampled projects have 11 files that need to be checked against the full project history system.
    - Sampled projects have 3 files that need to be uploaded to the full project history system (estimating 27% of all files).
    Sampled stats for deleted projects:
    - Sampled deleted projects: 4 (80% of all deleted projects)
    - Sampled deleted projects with all hashes present: 3
    - Percentage of deleted projects that need back-filling hashes: 25% (estimated)
    - Sampled deleted projects have 2 files that need to be checked against the full project history system.
    - Sampled deleted projects have 1 files that need to be uploaded to the full project history system (estimating 50% of all files).
    # Overleaf Toolkit users:
    $ bin/docker-compose exec sharelatex /overleaf/bin/flush-history-queues
    
    # Legacy docker-compose.yml users:
    $ docker compose exec sharelatex /overleaf/bin/flush-history-queues
    found projects {"project_ids":0,"limit":100000,"ts":"2025-09-01T10:35:33.353Z"}
    total {"succeededProjects":0,"failedProjects":0}
    # Overleaf Toolkit users:
    $ bin/docker-compose exec sharelatex /bin/bash -c "source /etc/overleaf/env.sh && source /etc/container_environment.sh && cd /overleaf/services/history-v1 && /sbin/setuser www-data node storage/scripts/back_fill_file_hash.mjs --all"
    
    # Legacy docker-compose.yml users:
    $ docker compose exec sharelatex /bin/bash -c "source /etc/overleaf/env.sh && source /etc/container_environment.sh && cd /overleaf/services/history-v1 && /sbin/setuser www-data node storage/scripts/back_fill_file_hash.mjs --all"
    # Toolkit users:
    $ bin/docker-compose run --rm --entrypoint mv sharelatex --no-clobber --verbose /var/lib/overleaf/data/user_files /var/lib/overleaf/data/old_user_files
    
    # Legacy docker-compose.yml users:
    # We are assuming that you are using the default bind-mount in /var/lib/overleaf
    $ docker compose run --rm --entrypoint mv sharelatex --no-clobber --verbose /var/lib/overleaf/data/user_files /var/lib/overleaf/data/old_user_files
    # In case you are using selective bind-mounts, you can simply remove the bind-mount for /var/lib/overleaf/data/user_files inside the container.
    $ docker cp sharelatex:/var/log/overleaf/filestore.log .
    # replace <timestamp> with the timestamp as printed by the script
    $ docker cp sharelatex:/var/log/overleaf/file-migration-<timestamp>.log .
    $ bin/docker-compose exec sharelatex /bin/bash -c "cd /overleaf/services/web && /sbin/setuser www-data node scripts/find_malformed_filetrees.mjs > /tmp/malformed-file-trees.json"
    $ bin/docker-compose exec sharelatex /bin/bash -c "cd /overleaf/services/web && /sbin/setuser www-data node scripts/fix_malformed_filetree.mjs --logs=/tmp/malformed-file-trees.json"
    History Migration Scripts
    History Migration Scripts
    History Migration Cleanup Script
    History Migration Scripts
    cleanup legacy history data
    Full Project History migration script
    Full Project History migration scripts
    Full Project History feature
    overleaf.com
    Configuring Overleaf
    Full Project History migration instructions
    setting up S3 in Server Pro
    migration process
    specify the timeouts in your container configuration
    d5d3fcd
    backup your database
    consistent backup
    database backup
    Sandboxed Compiles
    Stop on First Error compilation mode
    sanitize-html default options
    available here
    database backup
    PDF Preview Detach
    Sandboxed Compiles
    documentation
    history diff navigation
    available here
    database backup
    Symbol Palette
    Sandboxed Compiles
    documentation
    database backup
    Toolkit
    bin/upgrade
    is not provided
    Set UV_THREADPOOL_SIZE=16
    {"name":"default","hostname":"c25e9faaeb53","pid":971,"level":30,"backend":"fs","msg":"Loading backend","time":"2025-07-25T15:00:58.166Z","v":0}
    Writing logs into /var/log/overleaf/file-migration-2025-07-25T15_00_58_199Z.log
    Starting project file backup...
    Loaded global blobs: 0
    Processing non-deleted projects...
    Processed 1 projects, elapsed time 0s
    Done updating live projects
    Processing deleted projects...
    The collection deletedProjects appears to be empty.
    
    Done updating deleted projects
    Done.
    
    Done.
    $ docker cp sharelatex:/var/log/overleaf/file-migration-2025-07-25T15_00_58_199Z.log .
    $ cat file-migration-2025-07-25T15_00_58_199Z.log
    {"name":"file-migration","hostname":"c25e9faaeb53","pid":971,"level":30,"end":"68839a8f577b9f009d947b27 (2025-07-25T14:54:07.000Z)","msg":"actually completed batch","time":"2025-07-25T15:00:58.379Z","v":0}
    {"name":"file-migration","hostname":"c25e9faaeb53","pid":971,"level":30,"time":"2025-07-25T15:00:58.383Z","LOGGING_IDENTIFIER":"4effa2000000000000000000","projects":1,"blobs":6,"filesWithHash":5,"filesWithoutHash":2,"filesDuplicated":0,"filesRetries":0,"filesFailed":0,"fileTreeUpdated":0,"badFileTrees":0,"globalBlobsCount":0,"globalBlobsEgress":0,"projectDeleted":0,"projectHardDeleted":0,"fileHardDeleted":0,"mongoUpdates":1,"readFromGCSCount":7,"readFromGCSIngress":28532,"writeToGCSCount":5,"writeToGCSEgress":300,"readFromGCSThroughputMiBPerSecond":0.14925639825786063,"eventLoop":{"idle":48.277844,"active":381.53244699971054,"utilization":0.8876763888372498},"diff":{"eventLoop":{"idle":48.223536,"active":134.04030200059555,"utilization":0.7354190687027976},"projects":1,"blobs":6,"filesWithHash":5,"filesWithoutHash":2,"filesDuplicated":0,"filesRetries":0,"filesFailed":0,"fileTreeUpdated":0,"badFileTrees":0,"globalBlobsCount":0,"globalBlobsEgress":0,"projectDeleted":0,"projectHardDeleted":0,"fileHardDeleted":0,"mongoUpdates":1,"readFromGCSCount":7,"readFromGCSIngress":28532,"writeToGCSCount":5,"writeToGCSEgress":300,"readFromGCSThroughputMiBPerSecond":0.14925639825786063},"deferredBatches":[],"msg":"file-migration stats","v":0}
    docker exec -it mongo mongo
    use sharelatex
    
    db.tags.aggregate([
      {$group: {
        _id: {name: "$name", user_id: "$user_id"},
        count: {$sum: 1}
      }},
      {$match: {count: {$gt: 1}}},
      {$sort: {count: -1}}
    ])
    docker exec -it mongo mongo
    use sharelatex
    
    db.contacts.aggregate([
      {$group: {
        _id: {user_id: "$user_id"},
        count: {$sum: 1}
      }},
      {$match: {count: {$gt: 1}}},
      {$sort: {count: -1}}
    ])
    db.contacts.deleteOne({ "user_id" : ObjectId("...") })

    OVERLEAF_SAML_CALLBACK_URL

    Callback URL for Overleaf service. Should be the full URL of the /saml/callback path. Example: https://sharelatex.example.com/saml/callback

    OVERLEAF_SAML_ISSUER

    The issuer name

    OVERLEAF_SAML_CERT

    (required since 2.7.0) Identity Provider's public signing certificate, used to validate incoming SAML messages, in single-line format. Example: MIICizCCAfQCCQCY8tKaMc0BMjANBgkqh...W== - See . - See for more information. - An array of certificates can be provided to support certificate rotation as of 5.1.0.

    OVERLEAF_SAML_PRIVATE_CERT

    Optional, path to a file containing a PEM-formatted private key used to sign auth requests sent by passport-saml. Note: This would be better called PRIVATE_KEY_FILE, but PRIVATE_CERT is the current name. See - See for more information.

    OVERLEAF_SAML_DECRYPTION_CERT

    Optional, public certificate matching the OVERLEAF_SAML_DECRYPTION_PVK, used for the . - See for how to pass the certificate. - See for more information.

    OVERLEAF_SAML_SIGNING_CERT

    Optional, public certificate matching OVERLEAF_SAML_PRIVATE_CERT. It's required when setting up the if the strategy is configured with a OVERLEAF_SAML_PRIVATE_CERT. - An array of certificates can be provided to support certificate rotation. When supplying an array of certificates, the first entry in the array should match the current OVERLEAF_SAML_PRIVATE_CERT. - See for how to pass the certificate. - See for more information.

    OVERLEAF_SAML_DECRYPTION_PVK

    Optional, private key that will be used to attempt to decrypt any encrypted assertions that are received, in PEM (multi-line) format. - See for how to pass the key in PEM format. - See for more information.

    OVERLEAF_SAML_SIGNATURE_ALGORITHM

    Optionally set the signature algorithm for signing requests, valid values are sha1 (default) or sha256

    OVERLEAF_SAML_ADDITIONAL_PARAMS

    JSON dictionary of additional query params to add to all requests

    OVERLEAF_SAML_ADDITIONAL_AUTHORIZE_PARAMS

    JSON dictionary of additional query params to add to 'authorize' requests. Example: {"some_key": "some_value"}

    OVERLEAF_SAML_IDENTIFIER_FORMAT

    If present, name identifier format to request from identity provider (Default: urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress)

    OVERLEAF_SAML_ACCEPTED_CLOCK_SKEW_MS

    Time in milliseconds of skew that is acceptable between client and server when checking OnBefore and NotOnOrAfter assertion condition validity timestamps. Setting to -1 will disable checking these conditions entirely. Default is 0.

    OVERLEAF_SAML_ATTRIBUTE_CONSUMING_SERVICE_INDEX

    Optional, AttributeConsumingServiceIndex attribute to add to AuthnRequest to instruct the IdP which attribute set to attach to the response ()

    OVERLEAF_SAML_AUTHN_CONTEXT

    If present, name identifier format to request auth context (Default: urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport)

    OVERLEAF_SAML_FORCE_AUTHN

    If true, the initial SAML request from the service provider specifies that the IdP should force re-authentication of the user, even if they possess a valid session.

    OVERLEAF_SAML_DISABLE_REQUESTED_AUTHN_CONTEXT

    If true, do not request a specific auth context. For example, you can this this to true to allow additional contexts such as password-less logins (urn:oasis:names:tc:SAML:2.0:ac:classes:X509). Support for additional contexts is dependant on your IdP.

    OVERLEAF_SAML_SKIP_REQUEST_COMPRESSION

    If set to true, the SAML request from the service provider won't be compressed.

    OVERLEAF_SAML_AUTHN_REQUEST_BINDING

    If set to HTTP-POST, will request authentication from IDP via HTTP POST binding, otherwise defaults to HTTP Redirect Note: If OVERLEAF_SAML_AUTHN_REQUEST_BINDING is set to HTTP-POST, then OVERLEAF_SAML_SKIP_REQUEST_COMPRESSION must also be set to true.

    OVERLEAF_SAML_VALIDATE_IN_RESPONSE_TO

    If truthy, then InResponseTo will be validated from incoming SAML responses

    OVERLEAF_SAML_REQUEST_ID_EXPIRATION_PERIOD_MS

    Defines the expiration time when a Request ID generated for a SAML request will not be valid if seen in a SAML response in the InResponseTo field. Default is 8 hours.

    OVERLEAF_SAML_CACHE_PROVIDER

    Defines the implementation for a cache provider used to store request Ids generated in SAML requests as part of InResponseTo validation. Default is a built-in in-memory cache provider. See for more information.

    OVERLEAF_SAML_LOGOUT_URL

    Base address to call with logout requests - Default: entryPoint

    OVERLEAF_SAML_LOGOUT_CALLBACK_URL

    The value with which to populate the Location attribute in the SingleLogoutService elements in the generated service provider metadata.

    OVERLEAF_SAML_ADDITIONAL_LOGOUT_PARAMS

    JSON dictionary of additional query params to add to 'logout' requests

    OVERLEAF_SAML_IS_ADMIN_FIELD and OVERLEAF_SAML_IS_ADMIN_FIELD_VALUE

    When both environment variables are set, the login process updates user.isAdmin = true when the profile returned by the SAML IdP contains OVERLEAF_SAML_IS_ADMIN_FIELD, and its value is either equals to OVERLEAF_SAML_IS_ADMIN_FIELD_VALUE, or an array containing OVERLEAF_SAML_IS_ADMIN_FIELD_VALUE. - Introduced: 5.2.0

    OVERLEAF_SAML_AUDIENCE

    Used to set the value for the Audience used in the Server Pro metadata (/saml/meta). - Default: When not set defaults to using OVERLEAF_SAML_ISSUER

    OVERLEAF_SAML_IDENTITY_SERVICE_NAME

    Display name for the Identity Provider, used on the login page.

    OVERLEAF_SAML_EMAIL_FIELD

    Name of the Email field in user profile, defaults to nameID. Alias: OVERLEAF_SAML_EMAIL_FIELD_NAME

    OVERLEAF_SAML_FIRST_NAME_FIELD

    Name of the firstName field in user profile, defaults to givenName

    OVERLEAF_SAML_LAST_NAME_FIELD

    Name of the lastName field in user profile, defaults to lastName

    OVERLEAF_SAML_UPDATE_USER_DETAILS_ON_LOGIN

    If set to true, will update the users firstName and lastName fields on each login, and turn off the user-details form on /user/settings page.

    OVERLEAF_SAML_ENTRYPOINT

    Entrypoint URL for the SAML Identity Service Example: https://idp.example.com/simplesaml/saml2/idp/SSOService.php Azure: https://login.microsoftonline.com/8b26b46a-6dd3-45c7-a104-f883f4db1f6b/saml2

    supported soon
    xml-encryption

    Release notes 2.x.x

    The standard Server Pro license allows you to run the application in a production environment as well as one in a non-production/sandbox environment; it is highly recommended that you provision a non-production environment for testing.

    Server Pro 2.7.1

    Release date: 2021-09-16

    Image ID: 823f6cb592f4 (Community Edition Image ID: 4f7d059759d2)

    Bugfixes

    • This release includes a security update preventing editor sessions from being disconnected.

    New Features

    • An image placeholder is displayed when a template preview is not generated (due to having ENABLE_CONVERSIONS environment variable set to false).

    Server Pro 2.7.0

    Release date: 2021-07-12

    Image ID: e8efe0e39698 (Community Edition Image ID: 9ca6a3256fb6)

    Bugfixes

    • Fixed comment attribution in projects with anonymous comments

    • Fixed collaborators redirected out of a project when the owner edited the collaborators

    • Fixed redis connections in the host machine when no password authentication is defined

    • Fixed host headers in i18n installs

    Other changes

    • SHARELATEX_SAML_CERT for SAML setup.

    • Many small improvements and bugfixes

    Server Pro 2.6.2

    Release date: 2021-05-20

    Image ID: 1f1f4f1c4f02 (Community Edition Image ID: 2d8a8b6d1930)

    Bugfixes

    • Fixed references service crashing with .bib files larger than 6mb.

    • Fixed incorrect emailing attempt during user registration, which displayed an error message in the logs.

    • Fixed LDAP registration when firstName and lastName contain a list of variations with non-ascii characters.

    Server Pro 2.6.1

    Release date: 2021-04-23

    Image ID: dd382a10a3e5 (Community Edition Image ID: cfd4ec616219)

    This release includes performance and stability improvements for handling larger projects. These improvements are backed by changes to data structures in the Mongo database. The changes are implemented in a backwards compatible way for reading existing data, but new data is written in a backwards incompatible format. You may be able to upgrade without making any changes to the database at this time, but in case of a roll-back, you will not be able to read all the newly written data. A future release will migrate the old data to the new format. As with previous updates, please ensure you have a backup before upgrading.

    Bugfixes

    • This release includes important security updates. It fixes some potential XSS vulnerabilities and upgrades to node 12 ahead of node 10 reaching end of life on 30 Apr 2021.

    • Fallback linearisation breaks PDF/A when not using sandboxed compiles.

    New Features

    • SAML: Add /saml/meta endpoint to fetch .

    • for SMTP: SHARELATEX_EMAIL_SMTP_NAME and SHARELATEX_EMAIL_SMTP_LOGGER.

    • Added (SHARELATEX_EMAIL_AWS_SES_REGION).

    Other

    • UI and performance improvements.

    • All services have been upgraded to Node v12 from v10.

    Note: 2.6.1 is the initial release on the 2.6.x line, version 2.6.0 has not been published.

    Server Pro 2.5.2

    Release date: 2021-01-26

    Image ID: 8afec2bb0ace (Community Edition Image ID: 62b08784fc5d)

    Bugfixes

    • Fixed account activation with uppercase emails (https://github.com/overleaf/overleaf/issues/819)

    Server Pro 2.5.1

    Release date: 2021-01-14

    Image ID: e9a932e0effd (Community Edition Image ID: 5d6493ce30fe)

    Bugfixes

    • Fixed log rotation

    Server Pro 2.5.0

    Release date: 2020-11-20

    Image ID: 7ae2382c68b3 (Community Edition Image ID: 6e6f3526af69)

    New Features

    • .

    • is now available.

    • Mongo version updated to 4.0 (see ).

    Bugfixes

    • Fixed anonymous read/write project links redirecting to the login page.

    • HTML code in SHARELATEX_LEFT_FOOTER is now correctly displayed.

    • Fixed SHARELATEX_CUSTOM_EMAIL_FOOTER not working.

    Other

    • This will be the last CE/SP release where we officially support IE11. The next release in Q1 2021 will no longer be tested on IE11.

    Server Pro 2.4.2

    Release date: 2020-10-5

    Image ID: 83c76915b65a (Community Edition Image ID: 814858a6bb38)

    Bugfixes

    • Fixed anonymous read/write sharing

    • Fixed html links in left footer

    Server Pro 2.4.1

    Release date: 2020-08-26

    Image ID: 6cf8c22f2903 (Community Edition Image ID: 4be5fcb14878)

    No changes from 2.4.0. This release is just to keep the version numbering consistent between Server Pro and Community Edition.

    Server Pro 2.4.0

    Release date: 2020-08-20

    Image ID: 6cf8c22f2903 (Community Edition Image ID: 2ff144360052)

    New Features

    • Audit log for users' account settings updates

    Bugfixes

    • This release fixes an important security issue: previously, it was possible for a specially crafted websocket request to bypass project authorization checks. https://github.com/overleaf/real-time/pull/177

    Other changes

    • Many small improvements and bugfixes

    Server Pro 2.3.1

    Release date: 2020-06-30

    Image ID: 6fc8c7709df6 (Community Edition Image ID: 050f166647d2)

    Bugfixes

    • Fixed .

    Server Pro 2.3.0

    Release date: 2020-06-11

    Image ID: feb1b349654b (Community Edition Image ID: 843316001077)

    New Features

      • (when using sandboxed compiles)

    • Show latexmk output in compile logs

    Bugfixes

    • Fixed broken LuaLatex builds when not using sandboxed compiles

    • Fixed PDF/A validation broken when not using sandboxed compiles

    • Fixed project uploads from zip files with many large text files

    Other changes

    • gravatar.com service is no longer used

    • Deleted documents no longer count toward overall project file limit

    • Improvements to dashboard tag management

    • Many small improvements and bugfixes

    Server Pro 2.2.1

    Release date: 2020-03-10

    Image ID: 11dce4970997

    Bugfixes

    • TexLive image not being persisted in project entities (project.imageName field)

    Server Pro 2.2.0

    Release date: 2020-02-10

    Image ID: 4b4d9f8d4fad (Community Edition Image ID: 0867310d1151)

    Bugfixes

    • Incorrect template layout is now fixed

    • Node upgrade to fix CVE-2019-15605, CVE-2019-15606 and CVE-2019-15604

    New Features

    • reCAPTCHA is now disabled

    • Removed external access to Google Fonts.

    • Other minor improvements and bugfixes.

    Server Pro 2.1.1

    Release date: 2020-01-21

    Image ID: 23f9a28eeef2 (Community Edition Image ID: e01ae3fd29ac)

    Bugfixes

    • Fixed unable to share projects via email address.

    Server Pro 2.1.0

    Release date: 2020-01-14

    Image ID: 61a994c2584f (Community Edition Image ID: 503763f211f2)

    New Features

    • Email confirmation banner can be disabled with the new environment variable EMAIL_CONFIRMATION_DISABLED: 'true'

    • Project ownership can be changed from the admin panel.

    Other Changes

    • Admin: improved search using regular expressions

    • Other minor improvements and bugfixes.

    Server Pro 2.0.3

    Release date: 2019-12-06

    Image ID: d29f5373eca9

    2.0.3 is a Server Pro-only release, no Community Edition has been published.

    Bugfixes

    • Fixed unable to share projects via email address.

    Other Changes

    • Reenabled recaptcha, which was the root cause of the issue above.

    Server Pro 2.0.2

    Release date: 2019-11-26

    Image ID: 9907ccc100e5 (Community Edition Image ID: de647e8b462c)

    Bugfixes

    • Fixed link sharing for anonymous users when SHARELATEX_ALLOW_PUBLIC_ACCESS: 'true' and SHARELATEX_ALLOW_ANONYMOUS_READ_AND_WRITE_SHARING: 'true'.

    • Fixed read-only access to shared projects.

    • Fixed SAML logout (Server Pro only).

    Other Changes

    • Disabled recaptcha (Server Pro only).

    • Importing external files is disabled by default.

    • IMPORTANT: A new SYNCTEX_BIN_HOST_PATH is required when using Sibling Containers. Check the setup instructions in the wiki: https://github.com/overleaf/overleaf/wiki/Server-Pro:-sandboxed-compiles#mapping-the-location-of-synctex-in-the-host.

    Server Pro 2.0.1

    Release date: 2019-10-18

    Image ID: cb014e03204a (Community Edition Image ID: 708b20c0a403)

    Bugfixes

    • Fixed .

    • Fixed .

    Known issues

    • SyncTeX not working on Sandboxed Compiles .

    Server Pro 2.0.0

    Release date: 2019-10-09

    Image ID: 8fdd3419f5a5 (Community Edition Image ID: 2cdbdc229d4f)

    A lot has changed in the last few years, with ShareLaTeX to create one incredible authoring platform. Now that the merge is complete it's time to release a new version of ShareLaTeX Overleaf Community Edition and Server Pro!

    New Features

    This release brings Community Edition and Server Pro up to date with the cloud-based version of . A lot has changed since the last release, with too many bug fixes and small improvements to count, but here are a few highlights:

    • A brand new user interface theme

    • Improved project dashboard

    • A new interface for creating (or uploading) files in a project

    • Linked Files: import a file from another project.

    Server Pro

    This release of Server Pro includes a few new premium features:

    • Rich Text mode: write your document like a rich-text document, backed by nice clean LaTeX

    • Improved Sandboxed Compiles: no more fiddling with group permissions (see below)

    • Improved Admin Interface: now you can inspect the state of a project from the Admin page, plus many more small improvements

    Changes to the Docker-Compose file format

    This release adds a few new options to the docker environment. We recommend using our updated example file and updating it to reflect your old configuration where necessary.

    The new variables are:

    • ENABLED_LINKED_FILE_TYPES: a comma-separated list-keys, which controls which types of "linked file" are available in the New File modal. Defaults to 'url,project_file', as in the example file.

    • ENABLE_CONVERSIONS: If set to 'true', will enable on-the-fly file preview conversions using ImageMagick. Set to another value to disable this feature

    • REDIS_HOST

    And for Server Pro:

    • DOCKER_RUNNER: set to 'true' when enabling Sandboxed Compiles with sibling containers. See the updated documentation on .

    • SYNCTEX_BIN_HOST_PATH (introduced in 2.0.2): set to <your_sharelatex_data_directory>/bin/synctex. Check for extra context

    Changes to Sandboxed Compiles

    We've made some changes to the way the work. In previous versions, the administrators often needed to fiddle with user and group permissions on the docker socket to get Sibling Containers to work. In this release, we've changed all that so it's handled automatically inside the Server Pro container, so it should just work in the majority of cases.

    From this release onwards we will no longer support the old "Docker-In-Docker" method of sandboxed compiles, as it has become more and more difficult to get this to work as time goes on. We strongly encourage admins to consider the newer Sibling Containers method as an alternative.

    Upgrading TexLive

    You can now opt-in to a new version of TeX Live. The default is still TeX Live 2017, but you can find instructions on how to get TeX Live 2018 or later here: https://github.com/overleaf/overleaf/wiki/Server-Pro:-sandboxed-compiles#changing-the-texlive-image

    Before updating to a newer version of TexLive we strongly recommend and .

    Database Migrations

    The following database migrations have been added, and will run automatically:

    • Alter the structure of the User model to support future work

    • Change structure of project.tokens, to enforce uniqueness on the numeric part of a read-and-write sharing token

    Administrators and end-users should not notice any change in behaviour due to these migrations.

    Support

    If anything seems out of place, or you run into any problems while upgrading, please get in touch with us via email at [email protected]

    Release
    Release Date
    Status
    Latest Patch

    6.0

    2025-10-30

    Supported

    (2025-11-17)

    5.5

    2025-05-29

    Supported

    (2025-11-17)

    5.4

    2025-04-11

    EOL

    Release
    Release Date
    Status
    Latest Patch

    6.0

    2025-10-30

    Supported

    (2025-11-17)

    5.5

    2025-05-29

    Supported

    (2025-11-17)

    5.4

    2025-04-11

    EOL

    Release notes 4.x.x

    Server Pro 4.2.9

    Release date: 2025-03-21

    • Server Pro Image ID: dcfa08126e52

    EXTERNAL_AUTH=saml
    OVERLEAF_SAML_CERT=MIIEowIBAAKCAQEAxmJWY0eJcuV2uBtLnQ4004fuknbODo5xIyRhkYNkls5n9OrBq4Lok6cjv7G2Q8mxAdlIUmzhTSyuNkrMMKZrPaMsAkNKE/aNpeWuSLXqcMs8T/8gYCDcEmC5KYEJakNtKb3ZX2FKwT4yHHpsNomLDzJD5DyJKbRpNBm2no7ggIy7TQRJ2H00mogQIQu8/fUANXVeGPshvLJU8MXEy/eiXkHJIT3DDA4VSr/C/tfP0tGJSNTM874urc4zej+4INuTuMPtesZS47J0AsPxQuxengS4M76cVt5cH+Iqd1nKe5UqiSKvLCXacPYg/T/Kdx0tBnwHIjKo/cbzZ+r+XynsCwIDAQABAoIBAFPWWwu5v6x+rJ1Ba8MDre93Eqty6cHdEJL5XQJRtMDGmcg3LYF94SwFBmaMg6pCIjvVx2qN+OjUaQsosQIeUlPKEV8jcLrfBx2E4xJ3Tow8V1C3UMdPG7Hojler4H633/oz8RkN1Lm1vxep5PFnTw0tAOQDcTPeulb6RuLbHqU0FEnf/jVOMhtPLcMAwJ3fkAJQ+ljFW2VKCQ83d+ci1p+NHY/dbGLSR4lK58mVghcRMO3zhe5scrbECHJMfT6fCb2TXdjaueFUGC6+fqUXvDj8HRfUilzTegNq8ZhwgMSw1HeX/PuiczSKc3aHYSsohMBugTErnkW+qF4ZkE+kxgECgYEA/sm7umcyFuZME+RWYL8Gsp8agH1OGEgsmIiMi1z6RTlTmdR8fN18ItzXyW+363VZln/1b5wCaPdLIxgASxybLAaxnKAXfmL7QvyVAaMwxj7N0ogvMQoNx2VuSGZSam2+LFVIMWHq1C+3fvVnCDLm6oHvIMK/zvEsPBBtz+L6rlECgYEAx1PrKogaGHCi1XgsrNv9aFaayRvmhzZbmiigF0iWKAd3KKww94BdyyGSVfMfyL23LAbMQDCrDNGpYAnpNZo/cL+OcGPYzlPsWDBrJub1HOA/H3WQlP4oEcfdbmJZhIkEwTGFHaCHynEu4ekiCrWz9+XVNCquTyqnmaVDEzAfEZsCgYA8jQbfUt0Vkh+sboyUq3FVC/jJZn4jyStICNOV3z/fKbOTkGsRZbW1t1RVHAbSn23uFXTn1GTCO1sQ+QhA0YiTGvgk5+sNb0qVbd+fpv/VbWGO0iyc8+24YIOoEyEtB+21LYNdsQ6U5M4wDvQwf6BfRQfmekIJVUmU8LaYPDIlMQKBgDSRiT/aTSeM7STnYMDl89sEnCXV2eJnD5mEhVQerJs5/M8ZOoDLtfDQlctdJ1DF1/0gfdWgADyNPuI5OuwMFhciLequKoufzoEjo97KonJPIdamJs9kiCTIVTm7bmhpyns5GCZMJAPb/cVOus+gRCpozuXHK9ltIm5/C0WQN2FpAoGBAOss6RN2krieqbn1mG8e2v5mMUd0CJkiJu2y5MnF3dYHXSQ3/ePAh/YgJOthpgYgBh+mV0DLqJhx/1DLS/xiqcoHDlndQDmYbtvvY7RlMo00+nGzkRVOfrqyhC+1KsYHGPbSQixNQXtvFbAAVMSo+RRBkVGINYGDFnlQUpkppYRk
    OVERLEAF_SAML_DECRYPTION_PVK="-----BEGIN RSA PRIVATE KEY-----
    MIIEowIBAAKCAQEAxmJWY0eJcuV2uBtLnQ4004fuknbODo5xIyRhkYNkls5n9OrB
    q4Lok6cjv7G2Q8mxAdlIUmzhTSyuNkrMMKZrPaMsAkNKE/aNpeWuSLXqcMs8T/8g
    YCDcEmC5KYEJakNtKb3ZX2FKwT4yHHpsNomLDzJD5DyJKbRpNBm2no7ggIy7TQRJ
    2H00mogQIQu8/fUANXVeGPshvLJU8MXEy/eiXkHJIT3DDA4VSr/C/tfP0tGJSNTM
    874urc4zej+4INuTuMPtesZS47J0AsPxQuxengS4M76cVt5cH+Iqd1nKe5UqiSKv
    LCXacPYg/T/Kdx0tBnwHIjKo/cbzZ+r+XynsCwIDAQABAoIBAFPWWwu5v6x+rJ1B
    a8MDre93Eqty6cHdEJL5XQJRtMDGmcg3LYF94SwFBmaMg6pCIjvVx2qN+OjUaQso
    sQIeUlPKEV8jcLrfBx2E4xJ3Tow8V1C3UMdPG7Hojler4H633/oz8RkN1Lm1vxep
    5PFnTw0tAOQDcTPeulb6RuLbHqU0FEnf/jVOMhtPLcMAwJ3fkAJQ+ljFW2VKCQ83
    d+ci1p+NHY/dbGLSR4lK58mVghcRMO3zhe5scrbECHJMfT6fCb2TXdjaueFUGC6+
    fqUXvDj8HRfUilzTegNq8ZhwgMSw1HeX/PuiczSKc3aHYSsohMBugTErnkW+qF4Z
    kE+kxgECgYEA/sm7umcyFuZME+RWYL8Gsp8agH1OGEgsmIiMi1z6RTlTmdR8fN18
    ItzXyW+363VZln/1b5wCaPdLIxgASxybLAaxnKAXfmL7QvyVAaMwxj7N0ogvMQoN
    x2VuSGZSam2+LFVIMWHq1C+3fvVnCDLm6oHvIMK/zvEsPBBtz+L6rlECgYEAx1Pr
    KogaGHCi1XgsrNv9aFaayRvmhzZbmiigF0iWKAd3KKww94BdyyGSVfMfyL23LAbM
    QDCrDNGpYAnpNZo/cL+OcGPYzlPsWDBrJub1HOA/H3WQlP4oEcfdbmJZhIkEwTGF
    HaCHynEu4ekiCrWz9+XVNCquTyqnmaVDEzAfEZsCgYA8jQbfUt0Vkh+sboyUq3FV
    C/jJZn4jyStICNOV3z/fKbOTkGsRZbW1t1RVHAbSn23uFXTn1GTCO1sQ+QhA0YiT
    Gvgk5+sNb0qVbd+fpv/VbWGO0iyc8+24YIOoEyEtB+21LYNdsQ6U5M4wDvQwf6Bf
    RQfmekIJVUmU8LaYPDIlMQKBgDSRiT/aTSeM7STnYMDl89sEnCXV2eJnD5mEhVQe
    rJs5/M8ZOoDLtfDQlctdJ1DF1/0gfdWgADyNPuI5OuwMFhciLequKoufzoEjo97K
    onJPIdamJs9kiCTIVTm7bmhpyns5GCZMJAPb/cVOus+gRCpozuXHK9ltIm5/C0WQ
    N2FpAoGBAOss6RN2krieqbn1mG8e2v5mMUd0CJkiJu2y5MnF3dYHXSQ3/ePAh/Yg
    JOthpgYgBh+mV0DLqJhx/1DLS/xiqcoHDlndQDmYbtvvY7RlMo00+nGzkRVOfrqy
    hC+1KsYHGPbSQixNQXtvFbAAVMSo+RRBkVGINYGDFnlQUpkppYRk
    -----END RSA PRIVATE KEY-----"
    <?xml version="1.0"?>
    <EntityDescriptor xmlns="urn:oasis:names:tc:SAML:2.0:metadata"
                      xmlns:ds="http://www.w3.org/2000/09/xmldsig#"
                      entityID="sharelatex-saml"
                      ID="OVERLEAF_saml">
      <SPSSODescriptor protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
        <NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress</NameIDFormat>
        <AssertionConsumerService index="1"
                                  isDefault="true"
                                  Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST"
                                  Location="https://sharelatex.example.com/saml/callback" />
      </SPSSODescriptor>
    </EntityDescriptor>

    Allow Nginx connection limits to be changed.

  • Administrators can now promote other users to administrator again.

  • Added ADDITIONAL_TEXT_EXTENSIONS for customisation of editable file types.

  • Fixed sync between editor and pdf with synctex (Server Pro only).
  • Fixed track changes slow to commit.

  • Improved History view

    : should be set to the name of the Redis host, same as the
    SHARELATEX_REDIS_HOST
    variable. In the case of a simple docker-compose based deployment, this will just be
    'redis'
    . This duplication is, unfortunately, necessary in the short term while users migrate to the new Community Edition and Server Pro images, and will be resolved in a later release.
  • REDIS_PORT: In case we desire to use the port for Redis other than the default, we need to set the value in REDIS_PORT to be the same as in SHARELATEX_REDIS_HOST, for the same reason described above.

  • #895
    #896
    is now required
    Service Provider Metadata
    New configuration parameters
    configurable AWS Region to email settings
    File Outline
    TexLive 2020
    upgrade instructions
    sync between editor and pdf with synctex when not using sandboxed compiles
    TexLive version selector
    New Archival/trashing workflow
    "Delete Forever" button has no effect
    admin creation using CLI
    (see workaround instructions)
    joining forces with Overleaf
    Overleaf
    docker-compose.yml
    Sandboxed Compiles
    Sibling Containers documentation
    Sanboxed Compiles
    backing up your data
    update to the latest version of Server Pro available
    more information about passing keys and certificates
    full documentation
    more information about passing keys and certificates
    full documentation
    metadata endpoint
    more information about passing keys and certificates
    full documentation
    metadata endpoint
    more information about passing keys and certificates
    full documentation
    more information about passing keys and certificates
    full documentation
    link
    link

    5.4.1 (2025-04-30)

    5.3

    2025-01-29

    EOL

    5.3.3

    (2025-03-21)

    5.2

    2024-10-24

    EOL

    5.2.1

    (2024-10-24)

    5.1

    2024-07-17

    EOL

    5.1.1

    (2024-08-13)

    5.0

    -

    EOL

    5.0.7 (2024-07-12)

    4.2

    2023-11-10

    EOL

    4.2.9

    (2025-03-21)

    4.1

    2023-08-24

    EOL

    4.1.6 (2023-11-02)

    4.0

    -

    EOL

    4.0.6 (2023-08-10)

    3.5

    2023-02-13

    EOL

    3.5.13

    (2023-10-06)

    3.4

    2023-01-11

    EOL

    3.4.0

    (2023-01-11)

    3.3

    2022-10-13

    EOL

    3.3.2

    (2022-11-15)

    3.2

    2022-08-26

    EOL

    3.2.2

    (2022-09-19)

    2.7

    2021-07-12

    EOL

    2.7.1

    (2021-09-16)

    2.6

    2021-04-23

    EOL

    2.6.2

    (2021-05-20)

    2.5

    2020-11-20

    EOL

    2.5.2

    (2021-01-26)

    2.4

    2020-08-20

    EOL

    2.4.2

    (2020-10-05)

    2.3

    2020-06-11

    EOL

    2.3.1

    (2020-06-30)

    2.2

    2020-02-10

    EOL

    2.2.1

    (2020-03-10)

    2.1

    2020-01-14

    EOL

    2.1.1

    (2020-01-21)

    2

    2019-10-09

    EOL

    2.0.3

    (2019-12-06)

    1.2

    -

    EOL

    1.2.1

    1.1

    -

    EOL

    1.1.0

    1

    -

    EOL

    1.0.2

    0.6

    -

    EOL

    0.6.3

    0.5

    -

    EOL

    0.5.11

    0.3

    -

    EOL

    0.3.0

    0.2

    -

    EOL

    0.2.0

    0.1

    -

    EOL

    0.1.4

    6.0.1
    5.5.7

    5.4.1 (2025-04-30)

    5.3

    2025-01-29

    EOL

    5.3.3

    (2025-03-21)

    5.2

    2024-10-24

    EOL

    5.2.1

    (2024-10-24)

    5.1

    2024-07-17

    EOL

    5.1.1

    (2024-08-13)

    5.0

    -

    EOL

    5.0.7 (2024-07-12)

    4.2

    2023-11-10

    EOL

    4.2.9

    (2025-03-21)

    4.1

    2023-08-24

    EOL

    4.1.6 (2023-11-02)

    4.0

    -

    EOL

    4.0.6 (2023-08-10)

    3.5

    2023-02-13

    EOL

    3.5.13

    (2023-10-06)

    3.4

    2023-01-11

    EOL

    3.4.0

    (2023-01-11)

    3.3

    2022-10-13

    EOL

    3.3.2

    (2022-11-15)

    3.2

    2022-08-26

    EOL

    3.2.2

    (2022-09-19)

    2.7

    2021-07-12

    EOL

    2.7.1

    (2021-09-16)

    2.6

    2021-04-23

    EOL

    2.6.2

    (2021-05-20)

    2.5

    2020-11-20

    EOL

    2.5.2

    (2021-01-26)

    2.4

    2020-08-20

    EOL

    2.4.2

    (2020-10-05)

    2.3

    2020-06-11

    EOL

    2.3.1

    (2020-06-30)

    2.2

    2020-02-10

    EOL

    2.2.1

    (2020-03-10)

    2.1

    2020-01-14

    EOL

    2.1.1

    (2020-01-21)

    2

    2019-10-09

    EOL

    2.0.3

    (2019-12-06)

    1.2

    -

    EOL

    1.2.1

    1.1

    -

    EOL

    1.1.0

    1

    -

    EOL

    1.0.2

    0.6

    -

    EOL

    0.6.3

    0.5

    -

    EOL

    0.5.11

    0.3

    -

    EOL

    0.3.0

    0.2

    -

    EOL

    0.2.0

    0.1

    -

    EOL

    0.1.4

    6.0.1
    5.5.7
    Community Edition Image ID: 8fda0e836de1
  • Git Bridge Image ID: 59a17a340612

  • This is a security release, we updated internal dependencies used by SAML integration.

    Server Pro 4.2.8

    Release date: 2024-08-13

    • Server Pro Image ID: 03df62558008

    • Community Edition Image ID: b455e431db42

    • Git Bridge Image ID: 59a17a340612

    Bugfixes

    • Fix for invalid URLs returning 500 instead of 400.

    Other changes

    • /metrics and /health_check now return 404.

    • Security update to prevent remote image loading in Visual Editor.

    Server Pro 4.2.7

    Release date: 2024-07-12

    • Server Pro Image ID: b57040dd7e45

    • Community Edition Image ID: 60b9c65a00a7

    • Git Bridge Image ID: 59a17a340612

    This is a security release. We added stricter controls for accessing project invite details and locked down access to files via the LaTeX compilation service.

    We strongly recommend turning on the Sandboxed Compiles feature in Server Pro.

    Server Pro 4.2.6

    Release date: 2024-06-20

    • Server Pro Image ID: e9c52f2dd6df

    • Community Edition Image ID: 8ac3da599b94

    • Git Bridge Image ID: 59a17a340612

    This is a security release. We added stricter controls for creating projects from ZIP URLs.

    Server Pro 4.2.5

    Release date: 2024-06-11

    • Server Pro Image ID: cbe8a3d11874

    • Community Edition Image ID: 8ac3da599b94

    • Git Bridge Image ID: 59a17a340612

    This release provides security updates, bugfixes, and performance enhancements, including:

    • Stricter controls to prevent arbitrary JavaScript execution in the project editor.

    • Stricter controls to prevent arbitrary CSS loading in the project editor.

    • Updated libraries to enhance security and performance.

    Server Pro 4.2.4

    Release date: 2024-04-17

    • Server Pro Image ID: 875dd6e64e96

    • Community Edition Image ID: ab1e82612ec9

    • Git Bridge Image ID: 455a8c0559a4

    Security release

    Server Pro 4.2.4 is a security release for the application runtime.

    The Node.js runtime has been upgraded to 18.20.2. Check the release notes (18.20.1, 18.20.2) for more information.

    Other changes

    • All services are now using IPv4 in the container

    • Adds bin/flush-history-queues and bin/force-history-resyncs utility scripts.

    Server Pro 4.2.3

    Release date: 2024-02-16

    • Server Pro Image ID: a251a3f77aaa

    • Community Edition Image ID: 168968a20483

    • Git Bridge Image ID: 59a17a340612

    Security release

    Server Pro 4.2.3 is a security release for the application runtime.

    The Node.js runtime has been upgraded to 18.19.1 as per the security announcement upstream. It is worth noting that only CVE-2024-22019, a Denial of Service vulnerability, is applicable to Server Pro.

    If an access point to your Server Pro instance is publicly accessible via the internet, such as a login page or redirect to it, it is particularly important that you upgrade to Server Pro version 4.2.3.

    Server Pro 4.2.2

    Release date: 2024-02-07

    • Server Pro Image ID: 166a56c173a1

    • Community Edition Image ID: f33f1873b490

    • Git Bridge Image ID: 59a17a340612

    This release increases security against brute force attacks on projects with link-sharing enabled.

    If your Server Pro instance is configured with link-sharing enabled, using SHARELATEX_ALLOW_PUBLIC_ACCESS=true, it is particularly important that you upgrade to Server Pro version 4.2.2.

    We would also like to highlight a required upgrade of MongoDB to version 5.0 for the next Server Pro release. MongoDB 4.4 reaches end of life this month, February 2024. We recommend that all customers upgrade to MongoDB 5.0 at their earliest convenience.

    Server Pro 4.2.1

    Release date: 2023-11-23

    • Server Pro Image ID: 3a75a815d297

    • Community Edition Image ID: ae1b8c082224

    • Git Bridge Image ID: 59a17a340612

    This release restores public access to the /saml/meta endpoint.

    Server Pro 4.2.0

    Release date: 2023-11-10

    • Server Pro Image ID: 8bdf368e59f4

    • Community Edition Image ID: ae1b8c082224

    • Git Bridge Image ID: 59a17a340612

    This release separates the web service into an internal API service and a user facing service. Most of the changes in this regard are behind the scenes. The Git integration in Server Pro talks to the Server Pro container "from the outside" and its config needs changing.

    • Toolkit users: please upgrade the toolkit (bin/upgrade) before upgrading to Server Pro 4.2.0.

    • docker-compose deployments: please update the contents of the GIT_BRIDGE_API_BASE_URL variable:

    New features

    Toolbar in Code Editor

    A toolbar has been added to the Code Editor, which provides buttons for basic text styling, and inserting special characters, figures, code for tables, citations, and more.

    Add and edit tables without writing code

    An easier way to create and edit tables is now available in Server Pro. You can also copy and paste tables and formatted text directly into Visual Editor, without losing the formatting.

    Check the blog post for more information.

    New toolbar option: Insert figure

    The new Insert figure feature allows user to upload or just copy and paste an image file from your computer directly into the editor.

    Please refer to the blog post for more information.

    Symbol preview in editor autocomplete

    Math symbols are now previewed along with the autocomplete options in the editor.

    Bugfixes

    • XeLatex is now available in the default Tex Live install when not using Sandboxed Compiles.

    Other changes

    As announced with the previous Server Pro release, the legacy source editor has been removed from the editor. You can read more about the new editing experience on our blog.

    The new release also includes the following changes:

    • Session length can now be configured with SHARELATEX_COOKIE_SESSION_LENGTH.

    • Node runtime has been updated to v18.18.2

    Server Pro 4.1.6

    Release date: 2023-11-02

    • Server Pro Image ID: e40c0df3207f

    • Community Edition Image ID: 50437e9a470c

    • Git Bridge Image ID: f499a7ef6e64

    This release adds several dependency patches bringing performance improvements in different parts of the application.

    Server Pro 4.1.5

    Release date: 2023-10-25

    • Server Pro Image ID: 47246d85316b

    • Community Edition Image ID: d909899af648

    • Git Bridge Image ID: f499a7ef6e64

    This release includes a bug-fix for streaming compression in the history system that could result in hanging flushes. History changes will accumulate in Redis and do not get flushed for permanent storage on disk/S3, leading to potential data-loss when Redis runs out of memory.

    We advise all customers to upgrade to this release at their earliest convenience.

    Server Pro 4.1.4

    Release date: 2023-10-24

    • Server Pro Image ID: ef772a5f1148

    • Community Edition Image ID: 1bcb24c3b31a

    • Git Bridge Image ID: f499a7ef6e64

    This release includes additional logging and a new config option for a request timeout.

    Server Pro 4.1.3

    Release date: 2023-10-06

    • Server Pro Image ID: 6661a336d695

    • Community Edition Image ID: e46e0cf12e97

    • Git Bridge Image ID: f499a7ef6e64

    This release includes a fix for the history soft retry cronjob, which was executing the operation as a hard retry.

    Server Pro 4.1.2

    Release date: 2023-09-27

    • Server Pro Image ID: fab9def8230a

    • Community Edition Image ID: 1ce6ef6ea798

    • Git Bridge Image ID: f499a7ef6e64

    This release includes security updates for the Git Bridge.

    Server Pro 4.1.1

    Release date: 2023-09-05

    • Server Pro Image ID: fab9def8230a

    • Community Edition Image ID: 1ce6ef6ea798

    • Git Bridge Image ID: e5e9753fc979

    Bugfixes

    • Hide tabs on user admin info pages that are only relevant for overleaf.com

    Server Pro 4.1.0

    Release date: 2023-08-24

    • Server Pro Image ID: a6c6bfe92bd1

    • Community Edition Image ID: 1ce6ef6ea798

    • Git Bridge Image ID: e5e9753fc979

    Security release

    Server Pro 4.1 is a security release for the application runtime.

    The Node.js runtime has been upgraded from version 16 to 18 ahead of the upcoming deprecation of Node.js 16 on September 11, 2023.

    Only Server Pro 4.1 will operate with Node.js 18. All other supported versions of Server Pro require Node.js 16, which is being deprecated. We recommend that all customers upgrade to Server Pro 4.1 at their earliest convenience.

    If an access point to your Server Pro instance is publicly accessible via the internet, such as a login page or redirect to it, it is particularly important that you upgrade to Server Pro version 4.1 before September 11, 2023.

    History migration

    Reminder: History migration for Server Pro 3.5.X and earlier

    If you are still using a Server Pro version before 4.0, we recommend starting with the upgrade process immediately. In Server Pro 4.0 we introduced a breaking change in the history system that requires migrating all the history data into the new system in order for Server Pro to function.

    The migration process can handle the majority of project histories without any manual work. However, very old projects can contain data that require additional steps to migrate. Starting the migration process now will give our support team adequate time to take a look into your migration issues and help you finish the migration ahead of the EOL date.

    History cleanup

    Cleanup of orphaned data

    Server Pro versions 3.5.11, 4.0.6 and the latest 4.1 release include an updated script that fully deletes orphaned mongo data from the old history system. It is safe to run the script again. Please refer to the documentation on how to run the cleanup script.

    Upcoming changes

    Retirement of legacy source editor

    Server Pro 4.1 will be the last release with the legacy source editor. You can read more about the new editing experience on our blog.

    Other changes

    Rich Text/Visual Editor enhancements

    • The Rich Text/Visual editing experience has been improved.

    • The "Source" editor has been renamed to "Code Editor" and the "Rich Text" editor has been renamed to "Visual Editor".

    Server Pro 4.0.6

    Release date: 2023-08-10

    Image ID: da6f6f617532 (Community Edition Image ID: 504b19c82c27)

    • Bring back the History Migration Cleanup Script with a fix to free up mongo storage space.

    We advise customers to re-run the script again as per the documentation.

    Server Pro 4.0.5

    Release date: 2023-07-20

    • Server Pro Image ID: bd37a572f01a

    • Community Edition Image ID: 883bb853c896

    • Git Bridge Image ID: 9bfd98050a43

    Bugfixes

    • Fixes numbers replaced by underscores when downloading projects (overleaf/overleaf/issues/1133).

    Other changes

    • Security updates.

    Server Pro 4.0.4

    Release date: 2023-07-14

    • Server Pro Image ID: bcec664460d0

    • Community Edition Image ID: 1cf00822f942

    • Git Bridge Image ID: 9bfd98050a43

    This release includes security updates.

    Server Pro 4.0.3

    Release date: 2023-06-29

    • Server Pro Image ID: 963eb95c3c86

    • Community Edition Image ID: 380e3cb72a42

    • Git Bridge Image ID: 9bfd98050a43

    Fixes a bug preventing anonymous users from adding changes to the Project History.

    Server Pro 4.0.2

    Release date: 2023-06-08

    • Server Pro Image ID: aa27991a39a7

    • Community Edition Image ID: 26c75dfb6485

    • Git Bridge Image ID: 9bfd98050a43

    Fixes a bug navigating through the documentation pages when SHARELATEX_PROXY_LEARN=true.

    Server Pro 4.0.1

    Release date: 2023-05-30

    • Server Pro Image ID: 3014d696b579

    • Community Edition Image ID: 26c75dfb6485

    • Git Bridge Image ID: 9bfd98050a43

    Note: An issue was discovered with version 4.0 so it was never made public. This resulted in 4.0.1 being the first release in the 4.0 release line.

    Important: Before upgrading to this new major version you will need to first upgrade your Overleaf Server Pro instance to version 3.5.10 and migrate your projects to the new Full Project History system. Server Pro 4.0.0 will fail to start unless all the projects have been migrated.

    Read Full Project History migration instructions.

    This major release includes database migrations. Please ensure you have a database backup before upgrading.

    MongoDB now needs to run as a Replica Set. If you use an external Mongo database, you might already be running a replica set. If you use the Overleaf Toolkit you just need to pull the Toolkit's latest version. If you don't use the Toolkit, please see the instructions at the end of these release notes.

    We’ve also updated the version of Redis to 6.2. This change requires no action other than updating the image version. If you’re using the Overleaf Toolkit, add the environment variable REDIS_IMAGE=redis:6.2 to config/overleaf.rc (or update the version, if it was already defined). If you’re using a custom docker-compose.yml, change the redis container image to redis:6.2.

    If upgrading to Redis 6.2 results in a restart loop, see this article in our troubleshooting guide for more information.

    New features (Server Pro only)

    • Overleaf Git integration – See the documentation for instructions to set up the git-bridge in your Server Pro install.

    • Enhanced Rich Text functionality – Rich-text commenting and tracked changes.

    • Support documentation for horizontal scaling, which allows for increased computing resources for large deployments

    New features for Overleaf Community Edition and Server Pro

    • A new Source editor in addition to the Legacy editor will be available to users. (The Legacy editor will eventually be retired. If users have any feedback or issues, please fill out this form.) The new Source editor provides better accessibility, and better support for non-latin text.

    • Deleted projects and users can be automatically cleaned up after 90 days. This is an opt-in feature that can be enabled by setting the ENABLE_CRON_RESOURCE_DELETION environment variable to true. See the configuration documentation.

    Other changes

    • TeX Live 2023 is now the default version for instances not running Sandboxed Compiles.

    • The limit on a project’s editable content size (the sum of sizes of all editable files) has been increased from 5MB to 7MB.

    • General performance and stability improvements to the application, along with many small improvements and bugfixes.

    Manually setting up MongoDB as a replica set

    The following instructions are not necessary if you use the Overleaf Toolkit or if you use an external Mongo database already configured as a replica set.

    If you run MongoDB with docker-compose, add the following command to the mongo container configuration:

    Restart the mongo container then start a mongo shell with docker-compose exec mongo mongo. In that shell, run the following command to initiate the replica set:

    The standard Server Pro license allows you to run the application in a production environment as well as one in a non-production/sandbox environment; it is highly recommended that you provision a non-production environment for testing.

    -GIT_BRIDGE_API_BASE_URL: "http://sharelatex/api/v0/"
    +GIT_BRIDGE_API_BASE_URL: "http://sharelatex:3000/api/v0/"
    mongo:
        command: "--replSet overleaf"
    rs.initiate({ _id: "overleaf", members: [ { _id: 0, host: "mongo:27017" } ] })

    Full project history migration

    The 3.5.x release of the Community Edition includes the Full Project History feature that is already available in our SaaS offering, overleaf.com

    After upgrading your instance to Overleaf CE 3.5.13, all new projects will be using Full Project History by default. Existing projects will continue using the legacy History system, until they’re migrated.

    If you upgrade to 3.5.13 and decide to downgrade to an earlier version, then you should restore from a full system backup. The history of projects created in 3.5.13 is not compatible with earlier versions of Overleaf CE.

    The new Full Project History brings several improvements for users:

    • It tracks changes in binary files, which is unsupported in the legacy system.

    • There is support for labelled versions.

    • The system is in general more robust, there is less chance of data loss.

    Check for more information about full project history.

    Migrating existing projects

    1

    Create a backup

    Create a full of your instance with a consistent snapshot of the mongo, redis and sharelatex directories.

    2

    Offline migration

    To prevent users from being able to log in while the history migration script is running, please follow these steps:

    • Log into your Overleaf instance with an admin account

    • Click on the Admin button and choose Manage Site

    • Click the Open/Close Editor tab

    • Click on the Close Editor button

    Once this has been done, if any users are logged in they will get redirected to the maintenance page, and any new users visiting the log-in page will see the maintenance page and won't be able to log in.

    Online migration

    It is possible to run the migration scripts while the application is still running. There are a few considerations to take into account:

    • The migration process is CPU intensive, you should monitor resource usage while the script is running.

    • With a high --concurrency value, the event loop in some services (track-changes in particular) might experience some blocking, which would lead to a degraded UX experience. We recommend starting with the default --concurrency=1 value.

    • You can stop the script at any time. Starting it again will resume the migration when you left it. This is useful in case you prefer to run the migration in less busy hours (e.g. at night).

    Our recommendation is to close the site and run the migration offline in a maintenance window when your project count is less than 1000 projects (db.projects.count()). If the number of projects is large you can run the script and monitor its progress, then decide whether to continue running it online or offline based on your particular case.

    Clean up legacy history data

    A script to cleanup legacy history data was added in Server Pro 3.5.6, 4.0.6 and 4.1.0.

    The script can be run after all the projects have been migrated. It can also be used to free some space while performing an online migration.

    In Server Pro before version 3.5.13, the script deletes the content of docHistory and docHistoryIndex collections. MongoDB does not release disk space after you delete documents, instead, it will reuse that space for future documents in the same collection. Nothing will write to these collections again after the history migration, so the disk space will remain unused.

    If you want to make the disk space available again you can upgrade to Server Pro 3.5.13 (when still using the 3.x release) or Server Pro 4.2.5 (when using the 4.x release) and re-run the cleanup script.

    The cleanup script as included in Server Pro the latest patch releases of 3.5.x and latest 4.x.x are dropping the collections as the final step.

    Troubleshooting

    We will add troubleshooting advice here. Please note that while we normally offer support only to Server Pro customers, given the nature of this migration, we will also do our best to support CE customers who experience problems specific to the full project history migration.

    If the full project history migration script fails (i.e. exits with an error or prints a non-zero number of failed projects), please send the following details to our support team by email , detailing:

    Subject: Full project history migration problem

    • Instance Type: CE or Server Pro (delete as appropriate)

    • Installation Type: Overleaf toolkit or docker-compose.yml or other (delete as appropriate)

    • Version: 3.5.x (toolkit: $ cat config/version)

    Consider attaching the log files for the history-v1, project-history and track-changes services to the email. You can find these at /var/log/sharelatex inside the sharelatex container and export them like this:

    Please redact any sensitive information from the log files before attaching them.

    Finding broken file trees

    The migration may fail for projects which have a malformed file tree (for example, where filenames are empty). You can find a list of these problems using the find_malformed_filetrees script which checks all projects in the database:

    To fix the invalid paths, use the fix_malformed_filetree script, running the command once for each bad path:

    Downgrading projects from full project history to legacy history

    If there is a project that has been migrated to full project history but you want to go back to the legacy history, use the downgrade_project script as follows:

    Update

    Update the version of sharelatex/sharelatex image to 3.5.13.

    Toolkit: Use the $ bin/upgrade script for upgrading the toolkit to the latest version and edit config/version to 3.5.13.

    3

    Start the instance

    Ideally, you’d want to prevent users from accessing your instance while the migration takes place, to avoid data loss in case you need to restore your backup. See Offline migration for more information on how to do this.

    4

    Wait until all services are up and running

    Wait until all services are up and running (see command below)

    5

    Run the migration script

    --force-clean clears partially migrated project history data in the new system, this allows retrying the migration for individual projects that failed in prior attempts;

    --fix-invalid-characters replaces non printable characters that are not supported by the new history system;

    --convert-large-docs-to-file converts documents that are above the 2MB editable-size threshold to a non-editable file)

    The output should look like this:

    If the migration is successful, you'll get an exit code of 0, and the last lines indicating no failures:

    You can reopen access to your users (see next step). If there are failures, please see the troubleshooting section below. You can still reopen the site if the problems are not immediately fixed, and the unmigrated projects will remain on the legacy history system.

    6

    Reopen the site

    If you had chosen to perform an offline migration then you will need to re-open the site. If you are still logged in you will need to:

    1. Click on the Admin button and choose Manage Site

    2. Click the Open/Close Editor tab

    3. Click the Reopen Editor button

    If you have closed your browser then you will need to restart the site with $ bin/up.

    Click on the Disconnect all users button

    It is safe to re-run the cleanup script.
    Migration script output (which should be located in the container under /overleaf/services/web)
  • Migrated Projects: (as per migration script output)

  • Total Projects: (as per migration script output)

  • Remaining Projects: (as per migration script output)

  • Duration of the migration:

  • bin/doctor output (when using toolkit)

  • Toolkit version: $ git rev-parse HEAD (when using Toolkit)

  • Full Project History documentation
    backup
    [email protected]

    Sandboxed Compiles

    Server Pro comes with the option to run compiles in a secured sandbox environment for enterprise security achieving sandbox isolation between projects. It does this by running every project in its own secured Docker environment. With Sandboxed Compiles you also benefit from easier package management via access to our customized TeX Live images.

    Improved security

    Sandboxed Compiles are the recommended approach for Server Pro due to many LaTeX documents requiring/having the ability to execute arbitrary shell commands as part of the PDF compile process. If you use Sandboxed Compiles, each compile runs in a separate Docker container with limited capabilities that are not shared with any other user or project and has no access to outside resources such as the host network.

    Easier package management

    To avoid manually installing packages, we recommend enabling Sandboxed Compiles. This is a configurable setting within Server Pro that will provide your users with access to the same TeX Live environment as that on overleaf.com but within your own on-premise installation. TeX Live images used by Sandboxed Compiles contain the most popular packages and fonts tested against our gallery templates, ensuring maximum compatibility with on-premise projects.

    Enabling Sandboxed Compiles allows you to configure which TeX Live versions users are able to choose from within their project along with setting a default TeX Live image version for new projects.

    If you attempt to run Server Pro without Sandboxed Compiles, your instance will default to using a basic scheme version of TeX Live for compiles. This basic version is lightweight and only contains a very limited subset of LaTeX packages, which will most likely result in missing package errors for your users, especially if they try to use pre-built templates.

    As Server Pro has been architected to work offline, there isn't an automated way to integrate overleaf.com gallery templates into your on-premise installation, it is, however, possible to do this manually on a per-template basis. For more information on how this works, please check out our guide.

    Sandboxed Compiles requires that the sharelatex container has access to the Docker socket on the host machine (via a bind mount) so it can manage these sibling compile containers.

    How it works

    When Sandboxed Compiles are enabled, the Docker socket will be mounted from the host machine into the sharelatex container, so that the compiler service in the container can create new Docker containers on the host. Then for each run of the compiler in each project, the LaTeX compiler service (CLSI) will do the following:

    • Write out the project files to a location inside the OVERLEAF_DATA_PATH,

    • Use the mounted Docker socket to create a new texlive container for the compile run

    • Have the texlive container read the project data from the location under OVERLEAF_DATA_PATH

    Enabling Sandboxed Compiles

    In config/overleaf.rc, set SIBLING_CONTAINERS_ENABLED=true, and ensure that the DOCKER_SOCKET_PATH setting is set to the location of the Docker socket on the host machine.

    The next time you start the Docker services (with bin/up), the Toolkit will verify that it can communicate with Docker on the host machine, and will pull all configured TeX Live images set by the ALL_TEX_LIVE_DOCKER_IMAGES environment variable in the config/variables.env file.

    Docker Compose Example

    Starting with Overleaf CE/Server Pro 5.0.3 environment variables have been rebranded from SHARELATEX_* to OVERLEAF_*.

    If you're using a 4.x version (or earlier) please make sure the variables are prefix accordingly (e.g. SHARELATEX_MONGO_URL instead of OVERLEAF_MONGO_URL)

    Changing the TeX Live Image

    Server Pro uses three environment variables to determine which TeX Live images to use for Sandboxed Compiles:

    • TEX_LIVE_DOCKER_IMAGE: name of the default image for new projects

    • ALL_TEX_LIVE_DOCKER_IMAGES: comma-separated list of all images in use

    • ALL_TEX_LIVE_DOCKER_IMAGE_NAMES: Optional: comma-separated list of user-facing friendly names for the images. If omitted, the version number will be used, for example, texlive-full:2018.1

    When starting your Server Pro instance using the bin/up command, the Toolkit will automatically pull all of the images listed in ALL_TEX_LIVE_DOCKER_IMAGES.

    The current default is quay.io/sharelatex/texlive-full:2017.1, but you can override these values in the config/variables.env if you are using the Toolkit or the environment section of the docker-compose.yml file if you are using Docker Compose.

    Here's an example where we default to TeX Live 2024 for new projects, and keep both 2023 and 2022 in use for existing projects:

    Available TeX Live images

    These are all the TeX Live images that can be added to TEX_LIVE_DOCKER_IMAGE and ALL_TEX_LIVE_DOCKER_IMAGES:

    • quay.io/sharelatex/texlive-full:2025.1

    • quay.io/sharelatex/texlive-full:2024.1

    • quay.io/sharelatex/texlive-full:2023.1

    Using your own image registry

    As Server Pro has been architected to work offline, it may not always be possible to reach the registry to pull TeX Live images. If you need to use your own image registry you can use the following steps:

    • Set the TEX_LIVE_IMAGE_NAME_OVERRIDE environment variable in config/variables.env to the name of the mirror. For example: your-image-repository/sharelatex (be careful not to include a trailing /)

    • Ensure that all TeX Live images that are set in ALL_TEX_LIVE_DOCKER_IMAGES, are pulled, correctly tagged (see note below) are then pushed to your mirror. For example:

    Both the TEX_LIVE_DOCKER_IMAGE and ALL_TEX_LIVE_DOCKER_IMAGES environment variables must still be set to use quay.io/sharelatex images — the value set in the TEX_LIVE_IMAGE_NAME_OVERRIDE environment variable will replace the quay.io/sharelatex component of the image name at compile time.

    • Set SIBLING_CONTAINERS_PULL=false in config/overleaf.rc

    • Recreate the sharelatex container using bin/up -d

    There is a strict schema concerning how images must be tagged (the following regex applies ^[0-9]+.[0-9]+, for which the first number determines the TeX Live year and the second the patch version).

    $ bin/docker-compose exec sharelatex /bin/bash -c "curl http://localhost:3000/status"
    web sharelatex is alive (api)%
    # Overleaf Toolkit users:
    $ bin/docker-compose exec sharelatex /bin/bash -c "cd /overleaf/services/web; VERBOSE_LOGGING=true node scripts/history/migrate_history.js --force-clean --fix-invalid-characters --convert-large-docs-to-file"
    
    # legacy docker-compose.yml users:
    $ docker exec sharelatex /bin/bash -c "cd /overleaf/services/web; VERBOSE_LOGGING=true node scripts/history/migrate_history.js --force-clean --fix-invalid-characters --convert-large-docs-to-file"
    bin/docker-compose exec sharelatex /bin/bash -c "cd /overleaf/services/web; node scripts/history/clean_sl_history_data.js"
    $ docker cp sharelatex:/var/log/sharelatex/history-v1.log history-v1.log
    $ docker cp sharelatex:/var/log/sharelatex/project-history.log project-history.log
    $ docker cp sharelatex:/var/log/sharelatex/track-changes.log track-changes.log
    $ bin/docker-compose exec sharelatex /bin/bash -c "cd /overleaf/services/web; node scripts/find_malformed_filetrees.js"
    BAD PATH: 123456789012345678901234 rootFolder.0.1.2.3
    BAD PATH: 123456789012345678901234 rootFolder.0.4.5.6
    ...
    $ bin/docker-compose exec sharelatex /bin/bash -c "cd /overleaf/services/web; node scripts/fix_malformed_filetree.js 123456789012345678901234 rootFolder.0.1.2.3"
    $ bin/docker-compose exec sharelatex /bin/bash -c "cd /overleaf/services/web; node scripts/fix_malformed_filetree.js 123456789012345678901234 rootFolder.0.4.5.6"
    ...
    $ bin/docker-compose exec sharelatex /bin/bash -c "cd /overleaf/services/web; PROJECT_ID=YOUR
    Migrated Projects  :  1
    Total Projects     :  51
    Remaining Projects :  51
    Total history records to migrate: 98
    Starting migration...
    Migrating project: 63d29b5772dd80015a81bffe
    migration result { upgraded: true, historyType: 'NoneWithoutConversion' }
    Migrating project: 63d29c2e72dd80015a81c0a2
    migration result { upgraded: true, historyType: 'NoneWithoutConversion' }
    
    // …
    
    Migration complete
    ==================
    Projects migrated:  51
    Projects failed:  0
    Done.
    Projects failed:  0
    Done.

    Compile the project inside the texlive container

    quay.io/sharelatex/texlive-full:2022.1
  • quay.io/sharelatex/texlive-full:2021.1 (legacy)

  • quay.io/sharelatex/texlive-full:2020.1 (legacy)

  • quay.io/sharelatex/texlive-full:2019.1 (legacy)

  • quay.io/sharelatex/texlive-full:2018.1 (legacy)

  • quay.io/sharelatex/texlive-full:2017.1 (legacy)

  • quay.io/sharelatex/texlive-full:2016.1 (legacy)

  • quay.io/sharelatex/texlive-full:2015.1 (legacy)

  • quay.io/sharelatex/texlive-full:2014.2 (legacy)

  • docker pull quay.io/sharelatex/texlive-full:2024.1

  • docker tag quay.io/sharelatex/texlive-full:2024.1 your-image-repository/sharelatex/texlive-full:2024.1

  • docker push your-image-repository/sharelatex/texlive-full:2024.1

  • transferring templates from overleaf.com
    quay.io

    Updating MongoDB

    Any new release of Server CE/Server Pro will indicate any change on the supported version of MongoDB in its release notes.

    Should I update MongoDB?

    You should only consider updating your MongoDB version if you're planning to upgrade your instance of Server CE/Server Pro.

    If you're running a MongoDB version that is newer than the recommended for your current (or target) version there's no need to make any changes.

    You should never downgrade your MongoDB version.

    If you experience a specific problem that you think might be related to your current version of MongoDB, feel free to if you are a Server CE user or contact Overleaf Support if you are Server Pro a user.

    Checking your MongoDB version

    Opening the mongo shell should immediately print the current version.

    Overleaf Toolkit users:

    Docker Compose users:

    Update process

    Updating the version of MongoDB during an upgrade of your Server CE/Server Pro instance is as follows:

    1. Decide the version of Server CE/Server Pro you plan to upgrade to.

    2. Find the version of MongoDB recommended by that specific Overleaf Server CE/Server Pro release.

    3. Follow the instructions to upgrade MongoDB to the target version.

    4. Upgrade Server CE/Server Pro image version and restart the instance.

    Our recommendation is to always upgrade Server CE/Server Pro to the latest version available, since it's always guaranteed to be supported (Server Pro users only).

    Version support information

    In case you decide to go to an earlier version, this table shows the recommended version of MongoDB for earlier releases of Server CE/Server Pro, but you should never downgrade your MongoDB version.

    Server CE/Server Pro
    MongoDB Version
    Minimum Feature Compatibility Version
    Maximum Version Supported by Node.js Driver

    The minimum feature compatibility version above is based on the corresponding MongoDB version recommend for use with the version of Overleaf shown. If you plan to use a higher version, MongoDB will have its own minimum requirement.

    You can view the compatibility table that specifies the supported versions of the MongoDB Node.js driver for use with MongoDB .

    You can view the end-of-life status for each version of MongoDB .

    Upgrading MongoDB

    MongoDB requires step-by-step upgrades. That means you can't go straight from, let's say 4.0 to 5.0. You need first to update 4.2 to 4.4, and then 5.0.

    MongoDB uses even numbers for their stable versions.

    Update instructions when running MongoDB outside Docker

    Here are links to the update instructions from mongodb.com when upgrading MongoDB.

    Instructions for 5.0 and higher point to a replica set install, instead of standalone. As Server Pro/CE 4.0.1+ uses transactions, MongoDB needs to be run as a replica set.

    Documentation for MongoDB 3.2 to 4.2 is now available via

    Basic Instructions

    In most cases the update requires setting up a compatibility flag before actually updating the mongo version. The steps are as follows:

    1. Set the compatibility flag as described in MongoDB release notes (see the examples below).

    2. Then update the mongo image:

      1. Toolkit users Update MONGO_VERSION, e.g. MONGO_VERSION=6.0

    Example: Upgrading MongoDB from 5.0 to 6.0

    Let's start by making sure we're running MongoDB 6.0:

    Overleaf Toolkit users:

    Docker Compose users:

    According to the , the only requirement is to have featureCompatibilityVersion set to 5.0. We do so by opening a MongoDB shell and running the indicated command:

    Overleaf Toolkit users:

    Docker Compose users can run docker compose exec mongo mongosh to get a shell and run the same commands as Toolkit users.

    Overleaf Toolkit users:

    We'll then stop Server CE/Server Pro and MongoDB instances using the bin/stop command, set MONGO_VERSION=6.0 in config/overleaf.rc, and then restart the mongo service using bin/up mongo) to verify the update went smoothly.

    Finally, we'll update the Server CE/Server Pro image version to our target version and recreate all the services using the bin/up -d command.

    Docker Compose users:

    We'll then stop Server CE/Server Pro and MongoDB instances using the docker compose stop command, update file to use image: mongo:6.0, and then restart the mongo service using the docker compose up mongo command to verify the update went smoothly.

    Finally, we'll update Server CE/Server Pro image version to our target version and recreate all services using the docker compose up command.

    Example: Upgrading MongoDB from 6.0 to 7.0 (toolkit users)

    Start by making sure that you're running MongoDB 6.0 using the mongod --version commands above.

    According to the , the only requirement is to have featureCompatibilityVersion set to 6.0. We do so by opening a MongoDB shell and running the command db.adminCommand({ setFeatureCompatibilityVersion: "6.0" }) .

    Overleaf Toolkit users:

    We'll then stop Server CE/Server Pro and MongoDB instances using the bin/stop command, set MONGO_VERSION=7.0 in config/overleaf.rc, and then restart the mongo service using bin/up mongo) to verify the update went smoothly.

    Finally, we'll update the Server CE/Server Pro image version to our target version and recreate all the services using the bin/up -d command.

    Example: Upgrading MongoDB from 7.0 to 8.0 (toolkit users)

    Start by making sure that you're running MongoDB 7.0 using the mongod --version commands above.

    According to the , the only requirement is to have featureCompatibilityVersion set to 7.0. We do so by opening a MongoDB shell and running the command db.adminCommand({ setFeatureCompatibilityVersion: "7.0", confirm: true }). Note that this now requires an additional confirm: true parameter.

    We'll then stop Server CE/Server Pro and MongoDB instances using the bin/stop command, set MONGO_VERSION=8.0 in config/overleaf.rc, and then restart the mongo service using bin/up mongo) to verify the update went smoothly.

    Finally, we'll update the Server CE/Server Pro image version to our target version and recreate all the services using the bin/up -d command.

    Equivalent commands for docker compose users

    For docker compose users, the equivalent command are:

    • docker compose exec mongo mongod --version to display the mongo version

    • docker compose exec mongo mongosh to start a mongo shell for admin commands

    • docker compose stop command to stop the server

    Creating a custom role

    In version 5.5.1, we introduced a startup check to verify the feature compatibility version for MongoDB. If your MongoDB database uses authentication (e.g., basic authentication), the sharelatex container might not start, displaying a "not authorized on admin to execute command" permission error.

    To resolve this, you can either create a new role in MongoDB and assign it to the user account used to access the database using the instructions below, or set ALLOW_MONGO_ADMIN_CHECK_FAILURES=true to allow the check to fail without preventing the deployment from starting.

    This new role only grants permission to read cluster-wide MongoDB server parameters and could be reused for monitoring purposes,

    version: '2'
    services:
        sharelatex:
            restart: always
            image: quay.io/sharelatex/sharelatex-pro:5.0.3
            container_name: sharelatex
            depends_on:
                - mongo
                - redis
            ports:
                - 80:80
            links:
                - mongo
                - redis
            volumes:
                - /data/overleaf_data:/var/lib/overleaf # (/var/lib/sharelatex for versions 4.x and earlier)
                - /var/run/docker.sock:/var/run/docker.sock    #### IMPORTANT
            environment:
                OVERLEAF_MONGO_URL: mongodb://mongo/sharelatex
                OVERLEAF_REDIS_HOST: redis
                OVERLEAF_APP_NAME: 'My Overleaf'
                OVERLEAF_SITE_URL: "http://overleaf.mydomain.com"
                OVERLEAF_NAV_TITLE: "Our Overleaf Instance"
                OVERLEAF_ADMIN_EMAIL: "[email protected]"
                ...
                DOCKER_RUNNER: "true"
                SANDBOXED_COMPILES: "true"
                SANDBOXED_COMPILES_SIBLING_CONTAINERS: "true"    #### IMPORTANT
                # Note: (/var/lib/sharelatex for versions 4.x and earlier)
                SANDBOXED_COMPILES_HOST_DIR: "/data/overleaf_data/data/compiles"  #### IMPORTANT 
        TEX_LIVE_DOCKER_IMAGE: "quay.io/sharelatex/texlive-full:2024.1"
        ALL_TEX_LIVE_DOCKER_IMAGES: "quay.io/sharelatex/texlive-full:2024.1,quay.io/sharelatex/texlive-full:2023.1,quay.io/sharelatex/texlive-full:2022.1"
        ALL_TEX_LIVE_DOCKER_IMAGE_NAMES: "TeX Live 2024.1,TeX Live 2023.1,TeX Live 2022.1"

    -

    >=3.1.0

    4.2

    -

    -

    >=3.2.0

    4.4

    -

    -

    >=4.2.0

    5.0

    -

    -

    >=5.1.0

    6.0

    -

    -

    >=5.3.1

    6.0

    5.0

    8.0

    >=5.5.0

    6.0

    6.0

    8.0

    6.0.0

    8.0

    8.0

    8.0

    MongoDB release notes - upgrading MongoDB from 7.0 to 8.0

    Docker Compose users Update the version of the mongo image tag, e.g. services -> mongo -> image: mongo:6.0;
    Edit the docker-compose.yml file to use image: mongo:6.0 to upgrade the mongo version
  • docker compose up mongo to restart the mongo service and verify the update went smoothly

  • Edit the docker-compose.yml file to use image: sharelatex:VERSION to upgrade the image version

  • docker compose up to recreate all services.

  • 2.0.x

    3.4

    -

    -

    2.1.x to 2.4.x

    3.6

    -

    -

    >=2.5.0

    4.0

    raise an issue
    here
    here
    MongoDB release notes - upgrading MongoDB from 4.2 to 4.4
    MongoDB release notes - upgrading MongoDB from 4.4 to 5.0
    MongoDB release notes - upgrading MongoDB from 5.0 to 6.0
    MongoDB release notes - upgrading MongoDB from 6.0 to 7.0
    https://www.mongodb.com/docs/legacy/
    upgrade instructions
    docker-compose.yml
    upgrade instructions
    upgrade instructions

    When performing an upgrade of Server CE/Pro, we recommend upgrading to the latest release of the deployed major version before upgrading to the latest release of the next major version. If your deployment is more than one major version behind latest, you will be required to perform a multi-stepped upgrade.

    For example, if you're running 3.5.10, you'll need to upgrade to 3.5.13 -> Perform the Full Project History migration -> 4.2.9 -> 5.5.4.

    You should never skip major versions (3.5.10 -> 5.5.4). If you are using the Toolkit, and are more than one major version behind latest, you must not use the bin/upgrade script as you will be need to perform a manual multi-stepped upgrade.

    It is important to ensure that you take a consistent backup before every major version upgrade to enable you to roll back should you require it.

    -

    bin/docker-compose exec mongo mongod --version
    db version v5.0.24
    Build Info: {
        "version": "5.0.24",
        "gitVersion": "f034f0c51b3dffef4b8c9452d77ede9888f28f66",
        "openSSLVersion": "OpenSSL 1.1.1f  31 Mar 2020",
        "modules": [],
        "allocator": "tcmalloc",
        "environment": {
            "distmod": "ubuntu2004",
            "distarch": "x86_64",
            "target_arch": "x86_64"
        }
    }
    docker compose exec mongo mongod --version
    db version v5.0.24
    Build Info: {
        "version": "5.0.24",
        "gitVersion": "f034f0c51b3dffef4b8c9452d77ede9888f28f66",
        "openSSLVersion": "OpenSSL 1.1.1f  31 Mar 2020",
        "modules": [],
        "allocator": "tcmalloc",
        "environment": {
            "distmod": "ubuntu2004",
            "distarch": "x86_64",
            "target_arch": "x86_64"
        }
    }
    
    bin/docker-compose exec mongo mongod --version
    # db version v5.0.24
    docker compose exec mongo mongod --version
    # db version v5.0.24
    bin/mongo
    # MongoDB shell version v5.0.24
    # ...
    # overleaf:PRIMARY> db.adminCommand( { setFeatureCompatibilityVersion: "5.0" } )
    # { 
    # "ok" : 1,
    # ...
    # }
    overleaf:PRIMARY> exit
    # bye
    bin/mongo
    # ...
    # overleaf:PRIMARY> db.adminCommand( { setFeatureCompatibilityVersion: "6.0" } )
    # { 
    # "ok" : 1,
    # ...
    # }
    overleaf:PRIMARY> exit
    # bye
    bin/mongo
    # ...
    # overleaf:PRIMARY> db.adminCommand( { setFeatureCompatibilityVersion: "7.0", confirm: true } )
    # { 
    # "ok" : 1,
    # ...
    # }
    overleaf:PRIMARY> exit
    # bye
    # Toolkit users
    $ bin/docker-compose exec -it mongo mongosh -u {{YOUR-ADMIN-USERNAME}} -p
    
    # Switch to the "admin" database using
    overleaf [direct: primary] sharelatex> use admin
    switched to db admin
    overleaf [direct: primary] admin> 
    
    # Create a new role with permission to use "getParamter". Copy and paste the function below into the shell and press the return key
    
    db.createRole(
      {
        role: "clusterParameterReader",
        privileges: [
          {
            resource: { cluster: true },
            actions: ["getParameter"]    
          }
        ],
        roles: [] 
      }
    );
    
    # Switch back to the "sharelatex" database 
    use sharelatex
    switched to db sharelatex
    overleaf [direct: primary] sharelatex> 
    
    # Assign the new "clusterParameterReader" role to your database user by copy and pasting the function below into the shell and press the return key 
    db.grantRolesToUser(
      "{{YOUR-DATABASE-USER}}",
      [
        { role: "clusterParameterReader", db: "admin" }
      ]
    );
    
    # Type exit then return to exit the MongoDB shell
    # Run bin/up -d to start the deployment stack
    $ bin/up -d

    Release notes 5.x.x

    The standard Server Pro license allows you to run the application in a production environment as well as one in a non-production/sandbox environment; it is highly recommended that you provision a non-production environment for testing.

    You must upgrade to the latest 5.5.X before attempting the upgrade to 6.0. For more information see the binary files migration instructions.

    Server Pro 5.5.7

    Release date: 2025-11-17

    • Server Pro Image ID: d6695be28887

    • Community Edition Image ID: 15b96730c84a

    • Git Bridge Image ID: 346ef9a195f1

    This release fixes several compile issues emerging after the latest Docker and runc updates.

    Server Pro 5.5.6

    Release date: 2025-10-29

    • Server Pro Image ID: a7fabd92df1d

    • Community Edition Image ID: 670af1d40458

    • Git Bridge Image ID: 346ef9a195f1

    This is a security release containing updates to the base image and installed packages.

    Server Pro 5.5.5

    Release date: 2025-10-23

    • Server Pro Image ID: 662319c9321f

    • Community Edition Image ID: 18b74885001f

    • Git Bridge Image ID: 24939e88f5aa

    This release contains internal tools and checks designed to prepare a Server Pro instance for the upcoming 6.0 upgrade.

    Server Pro 5.5.4

    Release date: 2025-07-31

    • Server Pro Image ID: dd3d1c61f194

    • Community Edition Image ID: 7b216673bd81

    • Git Bridge Image ID: 45770796de58

    This release includes bug fixes for an upcoming binary file migration.

    Server Pro 5.5.3

    Release date: 2025-07-29

    • Server Pro Image ID: 2bf634002f11

    • Community Edition Image ID: 62812cf70518

    • Git Bridge Image ID: 45770796de58

    This is a security release, we have updated internal dependencies used by the SAML integration. This release also contains updates to the base image and installed packages. Customers using SAML authentication are advised to upgrade.

    New Features

    Added script for bulk transfer of projects ().

    Server Pro 5.5.2

    Release date: 2025-07-09

    • Server Pro Image ID: 4f55e24737e4

    • Community Edition Image ID: a9b671a7f751

    • Git Bridge Image ID: 24939e88f5aa

    This is a bug-fix release.

    Bugfixes

    • Fixes bug which prevented anonymous editors from making tracked changes

    • Fixes bug which caused a missing header image when using OVERLEAF_HEADER_IMAGE_URL

    • Fixes bug which prevented the "Stop compile" button working when not using Sandboxed Compiles

    Other Changes

    • You can now optionally configure your deployment to start even if the initial MongoDB startup checks fail by setting ALLOW_MONGO_ADMIN_CHECK_FAILURES=true

    • Applied security updates to base image

    Server Pro 5.5.1

    Release date: 2025-05-09

    • Server Pro Image ID: ccf59bc84efb

    • Community Edition Image ID: 7fb7924f9e3d

    • Git Bridge Image ID: 24939e88f5aa

    Bugfixes

    • Fixes License Usage tab in the admin panel.

    • Fixes Redis TLS configuration in history-v1 service.

    • Fixes create-user script when used with mjs extension.

    Other Changes

    • Improved error message when using an invalid Feature Compatibility Version in MongoDB.

    If you're using an externalized or a self-hosted MongoDB database with authentication (such as username/password), you may see "MongoServerError: not authorized on admin to execute command" in the sharelatex container logs and the container stuck in a reboot loop. If so, please see for creating a custom clusterParameterReader role to address this.

    Server Pro 5.5.0

    Release date: 2025-05-29

    • Server Pro Image ID: f778900dbcb5

    • Community Edition Image ID: d56f85856198

    • Git Bridge Image ID: 24939e88f5aa

    This release bumps the minimum mongo version to 6.0. If you've previously updated your MongoDB version to 6.0 following the instructions in the you might need to set the to 6.0:

    When featureCompatibilityVersion is set to a value lower than 6.0 you would be seeing a Expression not supported in partial index error like:

    New Features

    • Add --skip-email option to .

    • New improved UI for the review panel.

    Bugfixes

    • Fixes Configuration property backupStore is not defined error being logged.

    • Fixes email delivery when mail server uses self-signed certificates.

    • Fixes Redis TLS configuration in references service.

    Other Changes

    • Podman based deployments: the configuration has been merged and it is no longer possible to disable seccomp. Please download a copy of the and store it on the Docker host, then point Server Pro at it using the environment variable SECCOMP_PROFILE="/docker/host/path/of/seccomp/clsi-profile.json".

    Podman deployments are not officially supported.

    • Added a new daily cron job that flushes projects with pending changes.

    • Update base image to noble-1.0.2 and node@22

    • Many small improvements and bug fixes.

    Server Pro 5.4.1

    Release date: 2025-04-30

    • Server Pro Image ID: 24f0a095a3bc

    • Community Edition Image ID: a5b8db34908e

    • Git Bridge Image ID: 15a29bbb6524

    This is a security release containing updates to the base image and installed packages.

    Bugfixes

    • Fixes connection errors when attempting to use Redis via TLS.

    Server Pro 5.4.0

    Release date: 2025-04-11

    • Server Pro Image ID: def5d40bc8a4

    • Community Edition Image ID: 637631dedf09

    • Git Bridge Image ID: 15a29bbb6524

    New Features

    • New export-user-projects.mjs script to export all user's projects. For more information see .

    • TeX Live 2025 is the new default image when not using in Server Pro.

    Bugfixes

    • Fixes documentation access when running the instance behind a proxy.

    Other Changes

    • Added rate limiter to LDAP /login endpoint.

    • Mitigate risk of data loss when shutting down the instance. A new MAX_RECONNECT_GRACEFULLY_INTERVAL_MS environment variable allows a finer configuration of the delay between editor graceful reconnection and data flushing, and container shutdown.

    Server Pro 5.3.3

    Release date: 2025-03-21

    • Server Pro Image ID: 2a15214c521f

    • Community Edition Image ID: eb2d221f5f5e

    • Git Bridge Image ID: 8aa85fa0d7df

    This is a security release, we updated internal dependencies used by SAML integration.

    Server Pro 5.3.2

    Release date: 2025-03-11

    • Server Pro Image ID: 72f7039d52c6

    • Community Edition Image ID: eb2d221f5f5e

    • Git Bridge Image ID: 8aa85fa0d7df

    Bugfixes

    • Fixes access to Overleaf documentation when using a proxy for external requests.

    Other Changes

    • Adds rate limiters to LDAP /login endpoint

    Server Pro 5.3.1

    Release date: 2025-01-29

    • Server Pro Image ID: 6df5c59837a8

    • Community Edition Image ID: eb2d221f5f5e

    • Git Bridge Image ID: 8aa85fa0d7df

    An issue was discovered with version 5.3.0, so it was never made public. This resulted in 5.3.1 being the first release in the 5.3 release line.

    New Features

    • OVERLEAF_LOGIN_SUPPORT_TEXT can now be used to display support information underneath the login button. The text will be shown in the login screen and can be used to direct users to internal support or provide guidance related to logging in, creating accounts, etc.

    • V1_HISTORY_URL_FOR_GIT_BRIDGE allows separating the history-v1 endpoint for internal traffic (web service → history-v1 service, both in sharelatex container) and external traffic (git-bridge → history-v1

    Bugfixes

    • Fixed a bug where account deletion fails in certain situations where email service is not available.

    Other changes

    • Improve file upload processing. The disk-IO load of large instances can drop by up-to 50%.

    • Security updates to the base image and installed packages, along with improvements and bugfixes.

    There are some changes in the languages supported by the spelling service.

    Click to see the languages affected

    These languages have migrated to more specific variants:

    • English -> English (American)

    • Norwegian -> Norwegian (BokmÃ¥l)

    These languages are no longer supported:

    Server Pro 5.2.1

    Release date: 2024-10-24

    • Server Pro Image ID: a1b1852ac7bd

    • Community Edition Image ID: e187f0ff616c

    • Git Bridge Image ID: f09f6dbba5ee

    Note: An issue was discovered with version 5.2.0, so it was never made public. This resulted in 5.0.1 being the first release in the 5.0 release line.

    New Features

    Admin capabilities can be granted via LDAP/SAML attributes

    The following environment variables are now available:

    • LDAP: OVERLEAF_LDAP_IS_ADMIN_ATT and OVERLEAF_LDAP_IS_ADMIN_ATT_VALUE

    • SAML: OVERLEAF_SAML_IS_ADMIN_FIELD and OVERLEAF_SAML_IS_ADMIN_FIELD_VALUE

    When both environment variables are set, the login process updates user.isAdmin = true when the profile returned by the identity provided contains OVERLEAF_LDAP_IS_ADMIN_ATT/OVERLEAF_SAML_IS_ADMIN_FIELD, and its value is either:

    • Equals to OVERLEAF_LDAP_IS_ADMIN_ATT_VALUE/OVERLEAF_SAML_IS_ADMIN_FIELD_VALUE

    • An array containing OVERLEAF_LDAP_IS_ADMIN_ATT_VALUE/OVERLEAF_SAML_IS_ADMIN_FIELD_VALUE

    Other new features

    • Chat feature can be disabled with OVERLEAF_DISABLE_CHAT=true

    • SAML Audience, which defaults to OVERLEAF_SAML_ISSUER can now be configured with OVERLEAF_SAML_AUDIENCE

    Bugfixes

    • Fixes anonymous users accessing a project via read-write link not being able to create labels in the history panel.

    • Fixes some scenarios where users are unable to change the TeX Live version in the editor (Server Pro only)

    • Admin: searching users by domain now display admins users.

    Other changes

    • Admin: a num_active_users metric with the count of active users is now available via /metrics.

    • Admin: editor resources checks are no longer part of the Launchpad main screen.

    • Many small improvements and bugfixes.

    Server Pro 5.1.1

    Release date: 2024-08-13

    • Server Pro Image ID: cb82f2debf6f

    • Community Edition Image ID: 28f666f253f8

    • Git Bridge Image ID: 4cd4bea6fb01

    Bugfixes

    • Fixes TexLive version selection after a version of TexLive is removed from ALL_TEX_LIVE_DOCKER_IMAGES.

    • Fix for invalid URLs returning 500 instead of 400.

    • Fix SAML SSO when using POST request to the Identity Provider when CSP are enabled.

    Other changes

    • Removed Editor Resources check from launchpad, which has been broken for a while and wasn't providing any value.

    • /metrics and /health_check now return 404.

    • Security update to prevent remote image loading in Visual Editor.

    Server Pro 5.1.0

    Release date: 2024-07-17

    • Server Pro Image ID: 7216db608356

    • Community Edition Image ID: 41a77f59f69e

    • Git Bridge Image ID: 4cd4bea6fb01

    MongoDB upgrade to v6

    MongoDB 5 is reaching end of life on . All customers should upgrade to MongoDB 6.0. Follow the link to the official for instructions.

    Toolkit users now need to split the MongoDB image between MONGO_IMAGE (with just the image name) and MONGO_VERSION in their config/overleaf.rc file.

    Example:

    Please ensure you have a consistent database backup before upgrading.

    Redis AOF Persistence enabled by default

    AOF (Append Only File) persistence is now the recommended configuration for Redis persistence.

    .

    Toolkit users have AOF persistence enabled by default for new installs. Existing users are recommended to follow the instructions on the official documentation to switch to AOF:

    Deprecation for docker-compose v1

    docker-compose v1 has reached its End Of Life in July 2023 (). Support for docker-compose v1 in the Overleaf Toolkit will be dropped with the release of Server Pro 5.2. We recommend upgrading to Docker Compose v2 before then.

    New features

    • SAML: multiple certificates are now supported. You can now set a list of comma-separated certificates in OVERLEAF_SAML_SIGNING_CERT and OVERLEAF_SAML_CERT

    • CSP (Content Security Policy) is now enabled by default. It can be disabled adding OVERLEAF_CSP_ENABLED=false to config/variables.env.

    Bugfixes

    • Fixes a bug where projects created before enabling the templates feature couldn't be published as templates.

    • Fixed spacing in project list footer.

    • Fixed post-login redirection when login after clicking the "Log in" button in the header.

    Other changes

    • Removed support for running LaTeX compiles with Docker-In-Docker in Server Pro. Sandboxed compiles using "sibling" containers is not affected by this.

    • TeX Live images, as used for Sandboxed Compiles, need to be pulled outside of Server Pro now. All customers have been granted read access to quay.io/sharelatex/texlive-full.

      The Overleaf Toolkit is pulling all configured images as part of bin/up. You can disable the automatic pulling using SIBLING_CONTAINERS_PULL=false in your config/overleaf.rc file.

    Server Pro 5.0.7

    Release date: 2024-07-12

    • Server Pro Image ID: a8c301474a4d

    • Community Edition Image ID: 6f3e55a67fd5

    • Git Bridge Image ID: 455a8c0559a4

    This is a security release. We added stricter controls for accessing project invite details and locked down access to files via the LaTeX compilation service.

    We strongly recommend turning on the feature in Server Pro.

    Server Pro 5.0.6

    Release date: 2024-06-20

    • Server Pro Image ID: c9de60b06959

    • Community Edition Image ID: 46bb44d4215d

    • Git Bridge Image ID: 455a8c0559a4

    This is a security release. We added stricter controls for creating projects from ZIP URLs.

    Server Pro 5.0.5

    Release date: 2024-06-11

    • Server Pro Image ID: 60da5806f83e

    • Community Edition Image ID: 46bb44d4215d

    • Git Bridge Image ID: 455a8c0559a4

    This is a security release. We added stricter controls to prevent arbitrary CSS loading in the project editor.

    Server Pro 5.0.4

    Release date: 2024-05-24

    • Server Pro Image ID: b0db0405a7ce

    • Community Edition Image ID: abcec6efbbf7

    • Git Bridge Image ID: 455a8c0559a4

    This release provides security updates, bugfixes, and performance enhancements, including:

    • Stricter controls to prevent arbitrary JavaScript execution in the browser.

    • Updated libraries to enhance security and performance.

    Server Pro 5.0.3

    Release date: 2024-04-24

    • Server Pro Image ID: dc88a9ade14d

    • Community Edition Image ID: b4712d596c75

    • Git Bridge Image ID: 455a8c0559a4

    This release builds up on 5.0.2 and includes the second revision of the recovery process for doc versions.

    If you never ran Server Pro version 5.0.1 or Community Edition version 5.0.1, or you started a brand new instance with 5.0.1, you do not need to run this recovery process. Please see the below for details on the need for a recovery and follow the .

    Server Pro 5.0.2 (Retracted)

    2024-04-22: We are retracting version 5.0.2. We have identified a few corner cases in the recovery procedure for docs.

    2024-04-24: Server Pro version 5.0.3 sports fixes for the previously identified corner cases.

    Release date: 2024-04-22

    • Server Pro Image ID: 06eed5680340

    • Community Edition Image ID: 9f018f899ba5

    • Git Bridge Image ID: 455a8c0559a4

    Security release

    Server Pro 5.0.2 is a security release for the application runtime.

    The Node.js runtime has been upgraded to 18.20.2. Check their release notes (, ) for more information.

    Bugfixes

    • Fixes database migration that resulted in the loss of doc versions. These are used by the history system and their loss resulted in the history system skipping over updates effectively resulting in no further changes to the history view and git-integration. This release fixes the database migration and also sports a recovery process for instances that ran release 5.0.1. If you ran version 5.0.1, please take a look at the dedicated doc version recovery process.

    • Fixes references and templates services on Docker 26 IPv6.

    Other changes

    • Adds bin/flush-history-queues and bin/force-history-resyncs utility scripts.

    Server Pro 5.0.1 (Retracted)

    2024-04-18: We have identified a critical bug in a database migration that causes data loss. Please defer upgrading to release 5.0.1 until further notice on the mailing list.

    2024-04-24: Server Pro 5.0.3 has been released with a fix and recovery process that does not need access to a backup. See details above.

    Release date: 2024-04-02

    • Server Pro Image ID: 0d28770b4692

    • Community Edition Image ID: ee69bf0baddf

    • Git Bridge Image ID: 455a8c0559a4

    This major release includes the following changes:

    • Required database upgrade from MongoDB 4 to MongoDB 5

    • Rebranding of SHARELATEX_* to OVERLEAF_* environment variables

    • Rebranding of filesystem paths from ShareLaTeX brand to Overleaf brand

    Important: the Toolkit will help migrating your configuration, please follow the prompts of bin/upgrade.

    MongoDB upgrade to v5

    MongoDB 4.4 has reached end of life on February 2024. All customers should before upgrading to the 5.0 release line.

    The release also includes migrations that update the database in a backwards incompatible format.

    Please ensure you have a consistent database backup before upgrading. In case of roll-back, you will need to restore the database backup. Server Pro 4.x is not capable of reading the new format, which can result in data-loss or broken projects.

    Configuration changes

    Environment variables have been rebranded from SHARELATEX_* to OVERLEAF_*. users should be prompted to perform the migration when running bin/upgrade, and warnings will be printed when trying to run the Overleaf instance with the incorrect configuration.

    Filesystem paths have also been rebranded from ShareLaTeX brand to Overleaf brand:

    • /var/lib/sharelatex -> /var/lib/overleaf

    • /var/log/sharelatex -> /var/log/overleaf

    • /etc/sharelatex -> /etc/overleaf

    Filesystem changes are automatically handled by the Overleaf Toolkit. Otherwise, make sure bind-mount targets are updated to refer to the Overleaf equivalent, e.g.

    docker-compose/yml before:

    docker-compose.yml after:

    New features

    • Added support for using IAM credentials when using AWS S3 for project/history files

    • Server Pro will refuse to start when using an older version of MongoDB

    Bugfixes

    • Fixes a scenario in which the share project modal doesn't display the link-sharing links immediately after turning on the feature

    Other changes

    • All services are now using IPv4 in the container

    • Container image upgrade from Ubuntu 20.04 to 22.04 LTS

    • Security updates to the base image and installed packages, along with improvements and bugfixes.

    , running in separate containers).

    Kurdish

  • Ndebele

  • Northern Sotho

  • Punjabi

  • Southern Sotho

  • Tsonga

  • Tswana

  • Upper Sorbian

  • Welsh

  • Xhosa

  • These languages are newly supported:

    • English (Australian)

    • English (South African)

    • Aragonese

    • Belarusian

    • Bengali

    • Bosnian

    • Dzongkha

    • Galician

    • German (Austria)

    • German (Switzerland)

    • Guarani

    • Gujarati

    • Hebrew

    • Hindi

    • Hungarian

    • Icelandic

    • Korean

    • Kurmanji

    • Laotian

    • Malayalam

    • Mongolian

    • Nepali

    • Norwegian (Nynorsk)

    • Occitan

    • Scottish Gaelic

    • Serbian

    • Sinhala

    • Swahili

    • Telugu

    • Thai

    • Tibetan

    • Turkish

    • Ukrainian

    • Uzbek

    • Vietnamese

    Stricter and faster graceful shutdown procedure for the Server Pro container

  • The environment variable SYNCTEX_BIN_HOST_PATH is no longer used by the application

  • We are sunsetting window properties like window.project_id. If you need access to any of these, please reach out to [email protected] to discuss options.

  • Significant reduction in Docker image size for Server Pro and CE

  • Security updates to the base image and installed dependencies.

  • Minor improvements and bugfixes.

  • documentation
    here
    5.1.0 release
    featureCompatibilityVersion setting
    delete-user.js script
    Sandboxed Compiles
    seccomp profile
    documentation
    Sandboxed Compiles
    October 2024
    documentation
    Redis documentation in the Overleaf wiki
    https://redis.io/docs/latest/operate/oss_and_stack/management/persistence/#how-i-can-switch-to-aof-if-im-currently-using-dumprdb-snapshots
    https://docs.docker.com/compose/migrate/
    Sandboxed Compiles
    Bugfixes section for Server Pro 5.0.2
    updated wiki page on the recovery process
    18.20.1
    18.20.2
    upgrade to MongoDB 5.0
    Overleaf Toolkit
    $ bin/mongo
    > db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } )
     ... 
     {
        featureCompatibilityVersion: { version: '5.0' },
    ...
    > db.adminCommand( { setFeatureCompatibilityVersion: "6.0" } ) 
    MongoServerError: Error during migrate "20250411200550_active_chunk_index_update": Error in specification { name: "projectId_1_startVersion_1_v2", unique: true, partialFilterExpression: { state: { $in: [ "active", "closed" ] } }, background: true, key: { projectId: 1, startVersion: 1 }, v: 2 } :: caused by :: Expression not supported in partial index: state $in [ "active" "closed" ]
    # When using a custom image, MONGO_VERSION is required
    MONGO_IMAGE=my.docker.hub/mongo
    MONGO_VERSION=6.0-custom
    volumes:
        - /my/docker-host/path:/var/log/sharelatex
    volumes:
        - /my/docker-host/path:/var/log/overleaf

    Horizontal scaling

    Starting with version 3.5.6 Server Pro supports horizontal scaling.

    This document lists the technical requirements and provides guidelines for running Server Pro in more than one node.

    Starting with Server CE/Server Pro 5.0.3 environment variables have been rebranded from SHARELATEX_* to OVERLEAF_*.

    If you're using a

    4.x
    version (or earlier) please make sure the variables are prefix accordingly (e.g.
    SHARELATEX_SITE_URL
    instead of
    OVERLEAF_SITE_URL
    )

    Setting up horizontal scaling requires a significant amount of effort. We advise considering horizontal scaling only when reaching a certain scale. As an example, a Server Pro installation for 1,000 total users has been set up successfully using a single server provisioned with two 4-core processors and 32GB of system memory. See the hardware requirements documentation for recommendations.

    A deployment of Server Pro with horizontal scaling involves a set of external components, such as a Load Balancer and an S3-compatible storage backend.

    We can help troubleshoot errors in the Server Pro containers that might be the result of misconfiguration and provide general advice based on this document. Unfortunately, we are unable to provide assistance configuring third-party applications/systems.

    Resolving technical issues specific to your hardware/software to provide the external components are not covered by our support terms.

    Requirements

    External, central data storage

    The data storage in Server Pro can be split into four data stores:

    • MongoDB

      • Most of the data is persisted into MongoDB.

      • We support either a local instance or an external instance, such as MongoDB Atlas (a fully managed MongoDB service that runs within the AWS infrastructure).

      Note: Unfortunately, there is no official support for MongoDB compatible databases such as CosmoDB/DocumentDB at the moment, as we have not tested Server Pro with them. While deploying Server Pro with compatible databases may be possible, we only officially support deployments using MongoDB.

    • Redis

      • Redis stores temporary data, such as pending document updates before they are flushed to MongoDB.

      • Redis is used for communicating document updates between different services and notifying the editor about state changes in a given project.

      • Redis is used for storing the user sessions.

    • Project files and History files

      • Non-editable project files are stored outside of MongoDB.

        The new project history system (Server Pro 3.5 onwards) stores the history outside MongoDB as well.

      • For small single instances we support either a local file system (which could be backed by a local SSD, NFS or EBS) or a .

    • Ephemeral files

      • LaTeX compiles need to run on fast, local disks for optimal performance. The output of the compilation does not need to persisted or backed up.

      • Buffering of new file uploads and the creation of project zip files also benefits from using a local disk.

    We strongly advise on using a local disk. Using any kind of networked disk (such as NFS or EBS) can result in unexpected compile errors and other performance issues.

    Git-bridge

    Git-bridge is available in Server Pro starting with version 4.0.1.

    The git-repositories are stored locally on disk. There are no replication options available. Git-bridge should be run as a singleton. For optimal performance, we advise on using a local disk for git-bridge data. The git-bridge data disk should be backed up regularly.

    For the data storage with horizontal scaling, you need:

    • a central MongoDB instance that is accessible from all Server Pro instances

    • a central Redis instance that is accessible from all Server Pro instances

    • a central S3 compatible storage backend for project and history files

    • a local disk on each instance for ephemeral files

    • a local disk on the instance that hosts the git-bridge container for git-bridge data

    Load balancer requirements

    • Persistent routing, e.g. using a cookie

      This requirement stems from these components:

      • The real-time editing capability in Server Pro uses WebSockets with a fallback to XHR polling. Each editing session has local state on the server side and the requests of a given editing session always need to be routed to the same Server Pro instance. The collaboration feature uses Redis Pub/Sub for sharing updates between multiple Server Pro instances.

      • The LaTeX compilation keeps the output and compile cache locally for optional performance. Upon issuing a compile request to one Server Pro instance, the following PDF/log download requests need to be routed to the same Server Pro instance.

    • Long request timeouts to support the compilation of large LaTeX documents

    • WebSocket support for optimal performance

    • POST payload size of 50MB

    • Keep-alive timeout must be lower than the Server Pro keep-alive timeout

      The keep-alive timeout inServer Pro can be configured using the environment variable NGINX_KEEPALIVE_TIMEOUT. The default value is 65s.

      With the default, a keep-alive timeout of 60s in the load balancer works.

      With NGINX_KEEPALIVE_TIMEOUT=120, the load balancer could pick 115s.

    • Client IPs

      Set the request header X-Forwarded-For to the client IP.

    • When terminating SSL

      The load balancer needs to add the request header X-Forwarded-Proto: https.

    Sample HAProxy configuration

    Server Pro configuration

    Secrets

    The Server Pro instances need to agree on shared secrets:

    • WEB_API_PASSWORD (web api auth)

    • STAGING_PASSWORD and V1_HISTORY_PASSWORD same value (history auth)

    • CRYPTO_RANDOM (for session cookie)

    • OT_JWT_AUTH_KEY (history auth)

    All of these secrets need to be configured with their own unique value and shared between the instances.

    When not configured and user requests get routed to different Server Pro instances, their request will fail authentication checks and they either get redirect to the login page frequently or their actions in the UI will fail in unexpected ways.

    When not configured, Server Pro uses a new random value for each secret based on 32 random bytes from /dev/urandom (256 random bits).

    MongoDB

    Point OVERLEAF_MONGO_URL (SHARELATEX_MONGO_URL for versions 4.x and earlier) at the central MongoDB instance.

    Redis

    Point OVERLEAF_REDIS_HOST (SHARELATEX_REDIS_HOST for versions 4.x and earlier) and REDIS_HOST at the central Redis instance.

    S3 compatible storage for project and history files

    Please see the documentation on S3 compatible storage for details.

    Ephemeral files

    The default bind-mount of a local SSD to /var/lib/overleaf (/var/lib/sharelatex for versions 4.x and earlier) will be sufficient. Be sure to point SANDBOXED_COMPILES_HOST_DIR at the mount point on the host.

    We strongly advise using a local disk. Using any kind of networked disk (such as NFS or EBS) can result in unexpected compile errors and other performance issues.

    Proxy configuration

    • Set OVERLEAF_BEHIND_PROXY=true (SHARELATEX_BEHIND_PROXY for versions 4.x and earlier) for accurate client IPs.

    • Set TRUSTED_PROXY_IPS to the IP of the load balancer (Multiple CIDRs can be specified, separated with a comma).

    Git-bridge integration

    Git-bridge is available in Server Pro starting with version 4.0.1.

    The git-bridge container needs a sibling Server Pro container for handling incoming git requests. This sibling container can serve regular user traffic as well. In the sample configuration, the first instance acts as sibling container for git-bridge, but any instance could function as that really.

    Why do we need to designate one Server Pro container as sibling for git-bridge? Server Pro hands out download URLs for the history service to git-bridge. We need to configure these history URLs to be accessible from the git-bridge container.

    Server Pro container config:

    • Set GIT_BRIDGE_ENABLED to 'true'

    • Set GIT_BRIDGE_HOST to <git-bridge container name> e.g. git-bridge

    • Set GIT_BRIDGE_PORT to 8000

    • Set V1_HISTORY_URL to http://<server-pro sibling container name>:3100/api.

      Note: This is only necessary on the sibling container for the git-bridge container. The other instances can use a localhost URL, which is the default.

    git-bridge container config:

    • Set GIT_BRIDGE_API_BASE_URL to http://<server-pro sibling container name>/api/v0, e.g. http://server-pro-ha-1/api/v0

    • Set GIT_BRIDGE_OAUTH2_SERVER to http://<server-pro sibling container name>, e.g. http://server-pro-ha-1

    • Set GIT_BRIDGE_POSTBACK_BASE_URL to http://<git-bridge container name>:8000, e.g. http://git-bridge:8000

    • Set GIT_BRIDGE_ROOT_DIR to the bind-mounted git-bridge data disk, e.g. /data/git-bridge

    Sample docker-compose.yml configuration

    The following configuration is showing a self-contained setup. For the demo to work, you need to provide a valid SSL key/certificate and adjust the OVERLEAF_SITE_URL (SHARELATEX_SITE_URL for versions 4.x and earlier). For an actual setup, you must replace the dummy secrets with actual secrets as noted inline. For an actual setup, you need to move the individual containers onto dedicates nodes and adjust the IP addresses to your local network setup.

    Hardware

    We recommend using the same hardware specifications for all the Server Pro instances that are taking part in horizontal scaling.

    The general recommendations on hardware specifications for Server Pro instances apply.

    Upgrading Server Pro

    As part of the upgrade process, Server Pro automatically runs database migrations. These migrations are not designed to be run from multiple instances in parallel.

    The migrations need to finish before the actual web application is started. You can either check the logs for an entry of Finished migrations or wait until the application accepts traffic.

    The upgrade procedure looks like this:

    1. Schedule a maintenance window

    2. Stop all the instances of Server Pro

    3. Take a consistent backup as described in the documentation

    4. Start a single instance of Server Pro with the new version

    5. Validate that the new instance is working as expected

    6. Bring up the other instances with the new version

    global
      group haproxy
      user haproxy
    
      # Verbose logging
      log stdout format raw local0 debug
    
    defaults
      mode                    http
      option                  httpchk HEAD /status
      http-check              expect status 200
      default-server          check
    
      # Verbose logging
      log                     global
      option                  httplog
    
      # Reroute to a different backend if the sticky one is down
      option                  redispatch 1
      # These retries are for TCP connect errors, not on HTTP status 500 responses
      retries                 3
    
      # Sticky session for 24h of inactivity -- compile output is deleted after 24h
      cookie                  server-pro-ha insert maxidle 24h
    
      # Try to connect to any backend for 1min, then return 503
      timeout queue           1m
      # Give Server Pro instances 15s to startup
      timeout connect         15s
    
      # Abort requests from very slow clients (allow 1min of inactivity when reading a request)
      timeout client          1m
    
      # Allow slow compiles -- hard-coded limit in clsi is 10min
      timeout server          10m
    
      # Disconnect the editor after 23h -- 1h ahead of their last use yesterday
      timeout tunnel          23h
    
      # Note: The keepalive behavior in haproxy works great with the default keepalive setup in Server Pro.
      #       Haproxy is cleaning up connections in the background and it will redispatch requests when needed.
    
    listen server-pro-ha-http
      bind :80
      http-request redirect scheme https unless { ssl_fc }
    
    listen server-pro-ha-https
      bind :443 ssl crt /etc/ssl/certs/ssl-key-and-certificate-bundle.pem
    
      # Tell the application that we are behind https
      http-request set-header X-Forwarded-Proto https
    
      # Tell the application the actual client ip
      option forwardfor
    
      # See https://hstspreload.org/#deployment-recommendations
      http-response set-header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload;"
    
      # Route git traffic to the sibling container of the git-bridge
      use-server server-pro-ha-1 if { path_beg /git/ }
    
      # Debugging
      http-response add-header X-Served-By %s
      stats enable
      stats uri /haproxy
    
      server server-pro-ha-1 198.18.1.1:80 cookie server-pro-ha-1
      server server-pro-ha-2 198.18.1.2:80 cookie server-pro-ha-2
      server server-pro-ha-3 198.18.1.3:80 cookie server-pro-ha-3
    version: '2.2'
    
    # Actual horizontal scaling setup: pick your own network and replace IPs in config.
    networks:
        default:
            ipam:
                config:
                    # This subnet is part of a reserved subnet used for benchmarking
                    # https://tools.ietf.org/html/rfc2544
                    # The full subnet is 198.18.0.0/15
                    # Use 198.18.0.0/24 for lb and dbs
                    # Use 198.18.1.0/24 for server-pro
                    # Use 198.18.0.128/25 for ephemeral container
                    - gateway: 198.18.0.1
                      ip_range: 198.18.0.128/25
                      subnet: 198.18.0.0/23
    
    services:
        # Actual horizontal scaling setup: run haproxy outside docker on a separate host.
        lb:
            image: haproxy:2.6
            container_name: lb
            user: root
            logging:
                driver: local
                options:
                    max-size: 10g
                    max-file: '100'
            volumes:
                - ./haproxy.conf:/usr/local/etc/haproxy/haproxy.cfg
                # $ cat certificate.pem key.pem > ssl-key-and-certificate-bundle.pem
                - /path/to/ssl-key-and-certificate-bundle.pem:/etc/ssl/certs/ssl-key-and-certificate-bundle.pem
            # Alternative to "ports": use host network to avoid docker-proxy overhead
            network_mode: host
    
            # Alternative to "network_mode: host": use docker-proxy for network isolation
            # ports:
            #     - "80:80"
            #     - "443:443"
            # networks:
            #     default:
            #         ipv4_address: 198.18.0.2
    
            # Actual horizontal scaling setup: remove these as they run on other hosts.
            depends_on:
                server-pro-ha-1:
                    condition: service_started
                server-pro-ha-2:
                    condition: service_started
                server-pro-ha-3:
                    condition: service_started
    
        # Actual horizontal scaling setup: run this container next to server-pro-ha-1.
        # For Server Pro 4.0 onwards.
        git-bridge:
            restart: always
            # The tag should match the `server-pro-ha-1` container tag.
            image: quay.io/sharelatex/git-bridge:4.0.1
            volumes:
                # Actual horizontal scaling setup: point /data/git-bridge at a dedicated local ssd.
                - ~/git_bridge_data:/data/git-bridge
            container_name: git-bridge
            environment:
                GIT_BRIDGE_API_BASE_URL: "http://server-pro-ha-1/api/v0"
                GIT_BRIDGE_OAUTH2_SERVER: "http://server-pro-ha-1"
                GIT_BRIDGE_POSTBACK_BASE_URL: "http://198.18.0.6:8000"
                GIT_BRIDGE_ROOT_DIR: "/data/git-bridge"
            user: root
            command: ["/server-pro-start.sh"]
    
            # Actual horizontal scaling setup: run on host 198.18.0.6 and expose port
            # ports:
            #     - "8000:8000"
            networks:
                default:
                    ipv4_address: 198.18.0.6
    
        # Actual horizontal scaling setup: run this container on a separate host.
        server-pro-ha-1: &server-pro-ha-config
            restart: always
            image: quay.io/sharelatex/sharelatex-pro:4.0.1
            container_name: server-pro-ha-1
            hostname: server-pro-ha-1
            depends_on:
                # Actual horizontal scaling setup: keep this entry.
                git-bridge:
                    condition: service_started
    
                # Actual horizontal scaling setup: remove the ones below as they run on other hosts.
                mongo:
                    condition: service_healthy
                redis:
                    condition: service_started
                minio:
                    condition: service_started
                mongo_replica_set_setup:
                    condition: service_completed_successfully
                minio_setup:
                    condition: service_completed_successfully
            stop_grace_period: 60s
            volumes:
                - /tmp/scratch-disk1:/var/lib/sharelatex
                - /var/run/docker.sock:/var/run/docker.sock
            environment: &server-pro-ha-environment
                # Actual horizontal scaling setup: provide your own domain/app name.
                OVERLEAF_SITE_URL: 'https://overleaf.example.com'
                OVERLEAF_APP_NAME: Server Pro Horizontal Scaling Demo
    
                OVERLEAF_MONGO_URL: mongodb://198.18.0.3/sharelatex
                OVERLEAF_REDIS_HOST: 198.18.0.4
                REDIS_HOST: 198.18.0.4
    
                ENABLED_LINKED_FILE_TYPES: 'project_file,project_output_file'
                EMAIL_CONFIRMATION_DISABLED: 'true'
    
                SANDBOXED_COMPILES: 'true'
                SANDBOXED_COMPILES_SIBLING_CONTAINERS: 'true'
                SANDBOXED_COMPILES_HOST_DIR: '/tmp/scratch-disk1/data/compiles'
    
                # S3
                # Actual horizontal scaling setup: pick secure credentials.
                OVERLEAF_FILESTORE_BACKEND: s3
                OVERLEAF_FILESTORE_USER_FILES_BUCKET_NAME: overleaf-user-files
                OVERLEAF_FILESTORE_TEMPLATE_FILES_BUCKET_NAME: overleaf-template-files
                OVERLEAF_FILESTORE_S3_ACCESS_KEY_ID: OVERLEAF_FILESTORE_S3_ACCESS_KEY_ID
                OVERLEAF_FILESTORE_S3_SECRET_ACCESS_KEY: OVERLEAF_FILESTORE_S3_SECRET_ACCESS_KEY
                OVERLEAF_FILESTORE_S3_ENDPOINT: http://198.18.0.5:9000
                OVERLEAF_FILESTORE_S3_PATH_STYLE: 'true'
                OVERLEAF_FILESTORE_S3_REGION: ''
    
                OVERLEAF_HISTORY_BACKEND: "s3"
                OVERLEAF_HISTORY_PROJECT_BLOBS_BUCKET: "overleaf-project-blobs"
                OVERLEAF_HISTORY_CHUNKS_BUCKET: "overleaf-chunks"
                OVERLEAF_HISTORY_S3_ACCESS_KEY_ID: "OVERLEAF_HISTORY_S3_ACCESS_KEY_ID"
                OVERLEAF_HISTORY_S3_SECRET_ACCESS_KEY: "OVERLEAF_HISTORY_S3_SECRET_ACCESS_KEY"
                OVERLEAF_HISTORY_S3_ENDPOINT: http://198.18.0.5:9000
                OVERLEAF_HISTORY_S3_PATH_STYLE: 'true'
                OVERLEAF_HISTORY_S3_REGION: ''
                # /S3
    
                # git-bridge
                GIT_BRIDGE_ENABLED: 'true'
                GIT_BRIDGE_HOST: 198.18.0.6
                GIT_BRIDGE_PORT: 8000
                # Only needed on the sibling instance of git-bridge
                V1_HISTORY_URL: "http://server-pro-ha-1:3100/api"
                # /git-bridge
    
                # Horizontal scaling
                # Actual horizontal scaling setup: pick secure credentials.
                WEB_API_PASSWORD: WEB_API_PASSWORD
                STAGING_PASSWORD: V1_HISTORY_PASSWORD
                V1_HISTORY_PASSWORD: V1_HISTORY_PASSWORD
                CRYPTO_RANDOM: CRYPTO_RANDOM
                OT_JWT_AUTH_KEY: OT_JWT_AUTH_KEY
                OVERLEAF_BEHIND_PROXY: 'true'
                # Actual horizontal scaling setup: IPs of load balancers
                TRUSTED_PROXY_IPS: 198.18.0.1,198.18.0.2
                # /Horizontal scaling
    
            # Actual horizontal scaling setup: run on host 198.18.1.1 and expose ports
            # ports:
            #     - "80:80"
            networks:
                default:
                    ipv4_address: 198.18.1.1
    
        # Actual horizontal scaling setup: run this container on a separate host.
        server-pro-ha-2:
            <<: *server-pro-ha-config
            hostname: server-pro-ha-2
            container_name: server-pro-ha-2
            volumes:
                - /tmp/scratch-disk2:/var/lib/sharelatex
                - /var/run/docker.sock:/var/run/docker.sock
            environment:
                <<: *server-pro-ha-environment
                SANDBOXED_COMPILES_HOST_DIR: '/tmp/scratch-disk2/data/compiles'
                V1_HISTORY_URL: "http://localhost:3100/api"
    
            # Actual horizontal scaling setup: run on host 198.18.1.2 and expose ports
            # ports:
            #     - "80:80"
            networks:
                default:
                    ipv4_address: 198.18.1.2
    
        # Actual horizontal scaling setup: run this container on a separate host.
        server-pro-ha-3:
            <<: *server-pro-ha-config
            hostname: server-pro-ha-3
            container_name: server-pro-ha-3
            volumes:
                - /tmp/scratch-disk3:/var/lib/sharelatex
                - /var/run/docker.sock:/var/run/docker.sock
            environment:
                <<: *server-pro-ha-environment
                SANDBOXED_COMPILES_HOST_DIR: '/tmp/scratch-disk3/data/compiles'
                V1_HISTORY_URL: "http://localhost:3100/api"
    
            # Actual horizontal scaling setup: run on host 198.18.1.3 and expose ports
            # ports:
            #     - "80:80"
            networks:
                default:
                    ipv4_address: 198.18.1.3
    
        # Actual horizontal scaling setup: run this container on a separate host.
        minio:
            image: minio/minio:RELEASE.2023-05-18T00-05-36Z
            container_name: minio
            command: server /data
            volumes:
                # Actual horizontal scaling setup: run minio with multiple disks, see minio docs.
                - ~/minio_data:/data
            environment:
                # Actual horizontal scaling setup: pick secure credentials.
                MINIO_ROOT_USER: MINIO_ROOT_USER
                MINIO_ROOT_PASSWORD: MINIO_ROOT_PASSWORD
    
            # Actual horizontal scaling setup: run on host 198.18.0.5 and expose port
            # ports:
            #     - "9000:9000"
            networks:
                default:
                    ipv4_address: 198.18.0.5
    
        # Actual horizontal scaling setup: run this setup once on a separate host.
        minio_setup:
            depends_on:
                - minio
            image: minio/mc:RELEASE.2023-05-18T16-59-00Z
            entrypoint: sh
            command:
                - '-c'
                # Actual horizontal scaling setup: pick secure credentials.
                - |
                    mc alias set s3 http://198.18.0.5:9000 MINIO_ROOT_USER MINIO_ROOT_PASSWORD \
                    || sleep 10 && \
                    mc alias set s3 http://198.18.0.5:9000 MINIO_ROOT_USER MINIO_ROOT_PASSWORD \
                    || sleep 10 && \
                    mc alias set s3 http://198.18.0.5:9000 MINIO_ROOT_USER MINIO_ROOT_PASSWORD \
                    || sleep 10 && \
                    mc alias set s3 http://198.18.0.5:9000 MINIO_ROOT_USER MINIO_ROOT_PASSWORD
    
                    mc mb --ignore-existing s3/overleaf-user-files
                    mc mb --ignore-existing s3/overleaf-template-files
                    mc admin user add s3 \
                      OVERLEAF_FILESTORE_S3_ACCESS_KEY_ID \
                      OVERLEAF_FILESTORE_S3_SECRET_ACCESS_KEY
    
                    mc mb --ignore-existing s3/overleaf-project-blobs
                    mc mb --ignore-existing s3/overleaf-chunks
                    mc admin user add s3 \
                      OVERLEAF_HISTORY_S3_ACCESS_KEY_ID \
                      OVERLEAF_HISTORY_S3_SECRET_ACCESS_KEY
    
                    echo '
                      {
                        "Version": "2012-10-17",
                        "Statement": [
                          {
                            "Effect": "Allow",
                            "Action": [
                              "s3:ListBucket"
                            ],
                            "Resource": "arn:aws:s3:::overleaf-user-files"
                          },
                          {
                            "Effect": "Allow",
                            "Action": [
                              "s3:PutObject",
                              "s3:GetObject",
                              "s3:DeleteObject"
                            ],
                            "Resource": "arn:aws:s3:::overleaf-user-files/*"
                          },
                          {
                            "Effect": "Allow",
                            "Action": [
                              "s3:ListBucket"
                            ],
                            "Resource": "arn:aws:s3:::overleaf-template-files"
                          },
                          {
                            "Effect": "Allow",
                            "Action": [
                              "s3:PutObject",
                              "s3:GetObject",
                              "s3:DeleteObject"
                            ],
                            "Resource": "arn:aws:s3:::overleaf-template-files/*"
                          }
                        ]
                      }' > policy-filestore.json
    
                    echo '
                      {
                        "Version": "2012-10-17",
                        "Statement": [
                          {
                            "Effect": "Allow",
                            "Action": [
                              "s3:ListBucket"
                            ],
                            "Resource": "arn:aws:s3:::overleaf-project-blobs"
                          },
                          {
                            "Effect": "Allow",
                            "Action": [
                              "s3:PutObject",
                              "s3:GetObject",
                              "s3:DeleteObject"
                            ],
                            "Resource": "arn:aws:s3:::overleaf-project-blobs/*"
                          },
                          {
                            "Effect": "Allow",
                            "Action": [
                              "s3:ListBucket"
                            ],
                            "Resource": "arn:aws:s3:::overleaf-chunks"
                          },
                          {
                            "Effect": "Allow",
                            "Action": [
                              "s3:PutObject",
                              "s3:GetObject",
                              "s3:DeleteObject"
                            ],
                            "Resource": "arn:aws:s3:::overleaf-chunks/*"
                          }
                        ]
                      }' > policy-history.json
    
                    # Put the contents of the policy from the previous section in policy-filestore.json
                    # Reminder: Replace the bucket names accordingly.
                    mc admin policy create s3 overleaf-filestore policy-filestore.json
                    mc admin policy attach s3 overleaf-filestore \
                      --user=OVERLEAF_FILESTORE_S3_ACCESS_KEY_ID || true
    
                    mc admin policy create s3 overleaf-history policy-history.json
                    mc admin policy attach s3 overleaf-history \
                      --user=OVERLEAF_HISTORY_S3_ACCESS_KEY_ID || true
    
        # Actual horizontal scaling setup: run this container on a separate host.
        mongo:
            restart: always
            image: mongo:4.4
            container_name: mongo
            command: "--replSet overleaf"
            expose:
                - 27017
            volumes:
                - ~/mongo_data:/data/db
            healthcheck:
                test: echo 'db.stats().ok' | mongo localhost:27017/test --quiet
                interval: 10s
                timeout: 10s
                retries: 5
    
            # Actual horizontal scaling setup: run on host 198.18.0.3 and expose port
            # ports:
            #     - "27017:27017"
            networks:
                default:
                    ipv4_address: 198.18.0.3
    
        mongo_replica_set_setup:
            image: mongo:4.4
            entrypoint: sh
            depends_on:
                mongo:
                    condition: service_healthy
            command:
                - '-c'
                - |
                    mongo 198.18.0.3 --eval "rs.initiate({ _id: \"overleaf\", members: [ { _id: 0, host: \"198.18.0.3:27017\" } ] })"
    
        # Actual horizontal scaling setup: run this container on a separate host.
        redis:
            restart: always
            image: redis:6.2
            container_name: redis
            expose:
                - 6379
            volumes:
                - ~/redis_data:/data
    
            # Actual horizontal scaling setup: run on host 198.18.0.4 and expose port
            # ports:
            #     - "6379:6379"
            networks:
                default:
                    ipv4_address: 198.18.0.4
    # https://github.com/overleaf/overleaf/blob/45ca0f796c679103efd305ddbef28073c4a5de32/server-ce/init_scripts/00_regen_sharelatex_secrets.sh#L14
    dd if=/dev/urandom bs=1 count=32 2>/dev/null | base64 -w 0 | rev | cut -b 2- | rev | tr -d '\n+/'
    We support either a local instance or an external instance.

    Note: Unfortunately, there is no official support for Redis compatible key/values stores such as KeyDB/Valkey at the moment, as we have not tested Server Pro with them. While deploying Server Pro with compatible stores may be possible, we only officially support deployments using Redis.

    For horizontal scaling, we only support S3 compatible data storage systems.

    Important: NFS/Amazon EFS/Amazon EBS are not supported for horizontal scaling. Please see the hardware storage requirements section on scaling storage in Server Pro for more details.

    S3 compatible data storage system

    Roles and permissions

    Account

    From the perspective of managing their own account, all users are treated as regular users — Site Admins and Template Users do not get any additional permissions. There are, however, restrictions on what actions regular users can do based on how they authenticate.

    Settings
    Internal Accounts
    SSO (SAML/LDAP)

    Update account info

    Yes

    No

    Change password

    Yes

    No

    Generate Git bridge authentication tokens

    Yes

    Yes

    Delete Git bridge authentication tokens

    Yes

    The Git Bridge integration is only available in Server Pro. Check out the Server Pro vs. Community Edition for more information.

    Your Sessions

    User

    Clear sessions

    Yes

    View current session

    Yes

    View other sessions

    Yes

    Project Dashboard

    From the perspective of the project dashboard, all users are treated as regular users — Site Admins and Template users do not get any additional permissions.

    Project management and collaboration

    User

    Create new project

    Yes

    Open a project

    Yes

    Rename a project

    Yes

    View template gallery

    Yes

    Copy a project

    Yes

    Trash single project

    Yes

    Organizing and finding projects

    User

    List owned and invited projects

    Yes

    Search for projects

    Yes

    Filter projects based on group (All, Your, Shared with you, Archived and Trashed Projects )

    Yes

    Create new tag

    Yes

    Tag a project

    Yes

    Tag multiple projects

    Yes

    Account actions and navigation

    User

    Log out

    Yes

    Open account settings

    Yes

    Editor IDE

    From the perspective of the Overleaf Editor IDE, you can be one of the following roles: Project Owner , Editor , Reviewer , Viewer , Site Administrator or Template User.

    In Server Pro and Community Edition, there is support for providing anonymous read-only and read-write access to projects.

    For more information on this check out the OVERLEAF_ALLOW_PUBLIC_ACCESS and OVERLEAF_ALLOW_ANONYMOUS_READ_AND_WRITE_SHARING environment variables here.

    Text operations

    Owner
    Editor
    Reviewer
    Viewer
    Viewer

    Named Collaborator

    Link Sharing

    Edit text

    Yes

    Yes

    Sharing

    Owner
    Editor
    Reviewer
    Viewer
    Viewer

    Named Collaborator

    Link Sharing

    Invite new users or update sharing permissions

    Yes

    No

    Project & file operations

    Owner
    Editor
    Reviewer
    Viewer
    Viewer

    Named collaborator

    Link sharing

    Rename the project

    Yes

    No

    Collaborating

    Owner
    Editor
    Reviewer
    Viewer
    Viewer

    Named collaborator

    Link sharing

    Add & reply to comments

    Yes

    Yes

    Commenting and Real-time tracked changes are only available in Server Pro. Check out the Server Pro vs. Community Edition for more information.

    The in-project chat feature can be disabled by setting OVERLEAF_DISABLE_CHAT=true. See the Environment variables section for more information on customizing your deployment.

    History

    Owner
    Editor
    Reviewer
    Viewer
    Viewer

    Named collaborator

    Link sharing

    View history

    Yes

    Yes

    Integrations

    Owner
    Editor
    Reviewer
    Viewer
    Viewer

    Named collaborator

    Link sharing

    Git: Clone & pull from Overleaf

    Yes

    Yes

    The Git Bridge integration is only available in Server Pro. Check out the Server Pro vs. Community Edition for more information.

    Manage template

    User
    Template User
    Admin

    Publish template to gallery (public)

    No

    Yes

    No

    Unpublish template (public)

    No

    Yes

    No

    Republish template in gallery (public)

    No

    Yes

    The Template User role is specific to Server Pro. For more information on managing templates check out the Templates section.

    Template Gallery

    User
    Template User
    Admin

    List templates

    Yes

    Yes

    Yes

    Open as Template

    Yes

    Yes

    Yes

    Download template as Zip file

    Yes

    Yes

    The Template User role is specific to Server Pro, it is not available in the Community Edition. For more information on managing templates check out the Templates section.

    Admin Panel

    Manage Site

    System Messages

    Server Pro
    Community Edition

    Post Message

    Yes

    Yes

    Clear all messages

    Yes

    Yes

    Open/Close Editor

    Server Pro
    Community Edition

    Close Editor

    Yes

    Yes

    Disconnect all users

    Yes

    Yes

    Reopen Editor

    Yes

    Yes

    Manage Users

    The Admin Portal in the Community Edition only supports registering users. Full user managment is only availaing in Server Pro. Check out the Server Pro vs. Community Edition for more information.

    Manage Users -> Users

    Server Pro
    Community Edition

    List all users

    Yes

    No

    Create user

    Yes (if not using SSO)

    Yes

    Delete multiple users

    Yes

    No

    Search for users

    Yes

    Manage Users -> Users -> User -> User Info

    Server Pro
    Community Edition

    View user information

    Yes

    No

    Add email address

    Yes

    No

    Delete email address

    Yes

    No

    Change primary email address

    Yes

    Manage Users -> Users -> User -> Projects

    Server Pro
    Community Edition

    Search projects

    Yes

    No

    View all projects

    Yes

    No

    Delete multiple projects

    Yes

    No

    View collaborators

    Yes

    Manage Users -> Users -> User -> Project -> Project Info

    Server Pro
    Community Edition

    View project information

    Yes

    No

    Open project

    Yes

    No

    Transfer ownership of project to another user

    Yes

    No

    View collaborators and permissions (direct shares)

    Yes

    Manage Users -> Users -> User -> Project -> Deleted Docs

    Server Pro
    Community Edition

    List deleted documents

    Yes

    No

    Undelete deleted documents

    Yes

    No

    Manage Users -> Users -> User -> Project -> Audit Log

    Server Pro
    Community Edition

    View project Audit Log

    Yes

    No

    Manage Users -> Users -> User -> Deleted Projects

    Server Pro
    Community Edition

    List deleted projects

    Yes

    No

    View delete project information

    Yes

    No

    Manage Users -> Users -> User -> Audit Log

    Server Pro
    Community Edition

    View user Audit Log information

    Yes

    No

    Manage Users -> Users -> User -> Sessions

    Server Pro
    Community Edition

    View current user session information

    Yes

    No

    Clear all sessions

    Yes

    No

    License Usage

    Server Pro
    Community Edition

    View active user count

    Yes

    No

    Project URL Lookup

    Server Pro
    Community Edition

    Search for project by URL

    Yes

    No

    Yes

    Manage sessions

    Yes

    Yes

    Restore a project

    Yes

    Trash multiple projects

    Yes

    Restore multiple projects

    Yes

    Download a Zip of project

    Yes

    Download a Zip containing multiple projects

    Yes

    Join project (via banner)

    Yes

    Leave a project

    Yes

    Leave multiple projects

    Yes

    Filter projects based on tag

    Yes

    Archive a project

    Yes

    Archive multiple projects

    Yes

    Edits become suggestions

    No

    No

    No

    No

    No

    See named collaborator who the project is shared with

    Yes

    Yes

    Yes

    Yes

    No

    No

    No

    No

    Create/rename/delete/move files

    Yes

    Yes

    No

    No

    No

    Download project or files

    Yes

    Yes

    Yes

    Yes

    Yes

    Duplicate the project

    Yes

    Yes

    Yes

    Yes

    Yes

    Yes

    No

    No

    View comments

    Yes

    Yes

    Yes

    Yes

    No

    Resolve or delete collaborator comments

    Yes

    Yes

    No

    No

    No

    Add tracked changes

    Yes

    Yes

    Yes

    No

    No

    View tracked changes

    Yes

    Yes

    Yes

    Yes

    Yes (cannot see author)

    Accept or reject collaborator tracked changes

    Yes

    Yes

    No

    No

    No

    View and send chat messages.

    Yes

    Yes

    Yes

    Yes

    No

    Yes

    Yes

    No

    Restore file or project from history

    Yes

    Yes

    No

    No

    No

    Add labels

    Yes

    Yes

    Yes

    No

    No

    Yes

    Yes

    Yes

    Git: Push to Overleaf

    Yes

    Yes

    No

    No

    No

    No

    Publish template to gallery (private)

    No

    Yes

    Yes

    Unpublish template (private)

    No

    Yes

    Yes

    Republish template in gallery (private)

    No

    Yes

    Yes

    Yes

    Unpublish template

    No

    Yes

    Yes

    Republish template

    No

    Yes

    Yes

    No

    No

    Generate password reset link (if using internal authentication)

    Yes

    No

    Edit user profile information

    Yes

    No

    View editor settings for user

    Yes

    No

    Delete user

    Yes

    No

    Assign Site Admin role

    Yes

    No

    No

    Open project

    Yes

    No

    View project information

    Yes

    No

    No

    View token-access collaborators and permissions (link sharing)

    Yes

    No

    Open a copy of the project

    Yes

    No

    If you attempt to run Server Pro without Sandboxed Compiles, the compile runs alongside other concurrent compiles inside the main Docker container and users have full read and write access to the sharelatex container resources (filesystem, network and environment variables) when running LaTeX compiles.