Skip to main content

Command Palette

Search for a command to run...

Deploying Overleaf Open-Source LaTeX Collaboration Platform on Ubuntu 24.04

Step-by-step guide to deploy Overleaf Community Edition with the official Toolkit, Docker Compose, and Traefik on Ubuntu 24.04 for a self-hosted LaTeX editor with automatic HTTPS.

Updated
3 min read
Deploying Overleaf Open-Source LaTeX Collaboration Platform on Ubuntu 24.04
S
A Developer Advocate with a focus on improving the developer experience through clear communication, technical enablement, and community engagement.
A
DevOps Engineer with experience in Kubernetes, automation, cloud infrastructure, and observability. I work in Developer Relations, contribute to technical documentation, and collaborate on engineering-focused projects.

Overleaf is an open-source, collaborative LaTeX editor that bundles MongoDB, Redis, and the ShareLaTeX application into a single self-hosted stack. This guide deploys Overleaf Community Edition using the official Toolkit plus a Traefik override that adds automatic HTTPS via Let's Encrypt, following LaTeX collaboration platform deployment practices documented in Vultr Docs.


Set Up the Project Directory

1. Clone the Overleaf Toolkit:

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

2. Initialize the configuration:

bin/init

This creates config/overleaf.rc, config/variables.env, and config/version.

3. Create a directory for Traefik file-provider routes:

mkdir traefik-routes

Configure Overleaf for a Reverse Proxy

1. Edit config/variables.env:

nano config/variables.env
OVERLEAF_APP_NAME="My Overleaf Instance"
OVERLEAF_SITE_URL=https://overleaf.example.com
OVERLEAF_NAV_TITLE="Overleaf CE"
OVERLEAF_BEHIND_PROXY=true
OVERLEAF_SECURE_COOKIE=true

The last two flags are required when Overleaf is fronted by an HTTPS reverse proxy.

2. Edit config/overleaf.rc:

nano config/overleaf.rc
SIBLING_CONTAINERS_ENABLED=false

3. Create the project-level .env file used by the Traefik Compose file:

nano .env
DOMAIN=overleaf.example.com
LETSENCRYPT_EMAIL=admin@example.com
SERVER_IP=192.0.2.1

SERVER_IP should be the server's public IP (Traefik binds 80/443 to it).


Add the Traefik Route

1. Create the dynamic route:

nano traefik-routes/overleaf.yml
http:
  routers:
    overleaf:
      rule: "Host(`overleaf.example.com`)"
      service: overleaf
      entryPoints:
        - websecure
      tls:
        certResolver: le
  services:
    overleaf:
      loadBalancer:
        servers:
          - url: "http://sharelatex:80"

2. Create the Traefik Compose file:

nano docker-compose.traefik.yml
services:
  traefik:
    image: traefik:v3.6
    container_name: traefik
    restart: unless-stopped
    command:
      - "--providers.docker=true"
      - "--providers.docker.exposedbydefault=false"
      - "--providers.file.directory=/etc/traefik/routes"
      - "--entrypoints.web.address=:80"
      - "--entrypoints.websecure.address=:443"
      - "--entrypoints.web.http.redirections.entrypoint.to=websecure"
      - "--entrypoints.web.http.redirections.entrypoint.scheme=https"
      - "--certificatesresolvers.le.acme.httpchallenge=true"
      - "--certificatesresolvers.le.acme.httpchallenge.entrypoint=web"
      - "--certificatesresolvers.le.acme.email=${LETSENCRYPT_EMAIL}"
      - "--certificatesresolvers.le.acme.storage=/letsencrypt/acme.json"
    ports:
      - "${SERVER_IP}:80:80"
      - "${SERVER_IP}:443:443"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - ./letsencrypt:/letsencrypt
      - ./traefik-routes:/etc/traefik/routes
    networks:
      - overleaf_default

networks:
  overleaf_default:
    external: true

Start the Stacks

1. Add your user to the Docker group:

sudo usermod -aG docker $USER
newgrp docker

2. Run the Toolkit doctor:

bin/doctor

3. Start Overleaf (sharelatex + mongo + redis):

bin/up -d
bin/docker-compose ps

4. Start Traefik in the same Docker network:

docker compose -f docker-compose.traefik.yml up -d
docker compose -f docker-compose.traefik.yml ps
docker compose -f docker-compose.traefik.yml logs traefik

Create the Admin and First Project

1. Open the launchpad and register the admin user:

https://overleaf.example.com/launchpad

2. Sign in, then open Admin → Manage Users to create more accounts.

3. Create your first LaTeX project:

  • Visit https://overleaf.example.com/project.

  • Click Create a new project → Example project.

  • Enter a name and click Create.

  • Edit the default template and click Recompile to render the PDF preview.


Next Steps

Overleaf CE is running and served securely over HTTPS. From here you can:

  • Configure SMTP under config/variables.env for invitations and notifications

  • Mount external storage volumes for data/sharelatex_data to scale capacity

  • Pin the Overleaf release in config/version and use bin/upgrade for controlled updates

For the full guide with additional tips, visit the original article on Vultr Docs.

The Self-Hosted Stack

Part 1 of 50

The Self-Hosted Stack is a developer-focused series exploring open-source tools you can deploy, run, and manage on your own infrastructure. From AI platforms and databases to developer tools, observability stacks, and authentication systems, each guide walks through deploying production-ready open-source software on Vultr cloud infrastructure.