Skip to content

Overleaf

Overleaf is a collaborative, cloud-based LaTeX editor used for writing, editing, and publishing scientific documents. This instance runs the Community Edition via the Overleaf Toolkit on a dedicated Proxmox LXC container.

The stack consists of three Docker containers managed by the toolkit:

  • sharelatex – the main Overleaf web application (sharelatex/sharelatex:{{ version }})
  • mongo – MongoDB 8.0 for document storage
  • redis – Redis 7.4 for session and queue management

🛠 Installation

Default Port: 8080

Toolkit path: /opt/overleaf/

Config path: /opt/overleaf/config/

Data path: /opt/overleaf/data/

Proxmox LXC

Create a Debian LXC with Docker installed, then install the toolkit:

# Clone the toolkit
git clone https://github.com/overleaf/toolkit.git /opt/overleaf
cd /opt/overleaf

# Initialize default config
bin/init

⚙ Configure

Edit /opt/overleaf/config/overleaf.rc:

config/overleaf.rc

PROJECT_NAME=overleaf
OVERLEAF_DATA_PATH=data/overleaf
SERVER_PRO=false
OVERLEAF_LISTEN_IP=0.0.0.0
OVERLEAF_PORT=8080
SIBLING_CONTAINERS_ENABLED=false
MONGO_ENABLED=true
MONGO_DATA_PATH=data/mongo
MONGO_IMAGE=mongo
MONGO_VERSION=8.0
REDIS_ENABLED=true
REDIS_DATA_PATH=data/redis
REDIS_IMAGE=redis:7.4
REDIS_AOF_PERSISTENCE=true

Edit /opt/overleaf/config/variables.env:

config/variables.env

OVERLEAF_APP_NAME="Our Overleaf Instance"
ENABLED_LINKED_FILE_TYPES=project_file,project_output_file
ENABLE_CONVERSIONS=true
EMAIL_CONFIRMATION_DISABLED=true
EXTERNAL_AUTH=none

🚀 Start

cd /opt/overleaf
bin/up

👤 Create Admin User

After first start, navigate to http://<ip>:8080/launchpad to create the first admin user.

📝 Usage

🔄 Start / Stop

Start

cd /opt/overleaf && bin/start

Stop

cd /opt/overleaf && bin/stop

⬆ Upgrade

cd /opt/overleaf && bin/upgrade

🩺 Doctor

Run the health check tool to verify the setup:

cd /opt/overleaf && bin/doctor

📄 Logs

cd /opt/overleaf && bin/logs

💾 Backup Config

cd /opt/overleaf && bin/backup-config ~/overleaf-config-backup

Task List

task: Available tasks for this project:
* backup-config:       Backup the Overleaf config directory.
* default:             List all available tasks.
* doctor:              Run the Overleaf Toolkit doctor to check the setup.
* export:              Export the task list to `task-list.txt`.
* logs:                View the Overleaf application logs.
* restart:             Stop then start the Overleaf Docker services.
* shell:               Open an interactive shell inside the Overleaf container.
* start:               Start the Overleaf Docker services.
* status:              Check the status of the Overleaf Docker services.
* stop:                Stop the Overleaf Docker services.
* up:                  Run Docker Compose in the foreground.
* up-d:                Run Docker Compose in the background.
* update:              Update the application or its running containers.
* upgrade:             Upgrade Overleaf to the latest version.

Traefik

homelab/pve/traefik/conf.d/overleaf.yaml
---
http:
 #region routers 
  routers:
    overleaf:
      entryPoints:
        - "websecure"
      rule: "Host(`overleaf.l.nicholaswilde.io`)"
      middlewares:
        - default-headers@file
        - https-redirectscheme@file
      tls: {}
      service: overleaf
#endregion
#region services
  services:
    overleaf:
      loadBalancer:
        servers:
          - url: "http://192.168.1.122:8080"
        passHostHeader: true
#endregion
  middlewares:
    https-redirectscheme:
      redirectScheme:
        scheme: https
        permanent: true
    default-headers:
      headers:
        frameDeny: true
        browserXssFilter: true
        contentTypeNosniff: true
        forceSTSHeader: true
        stsIncludeSubdomains: true
        stsPreload: true
        stsSeconds: 15552000
        customFrameOptionsValue: SAMEORIGIN
        customRequestHeaders:
          X-Forwarded-Proto: https

    default-whitelist:
      ipAllowList:
        sourceRange:
        - "10.0.0.0/8"
        - "192.168.0.0/16"
        - "172.16.0.0/12"

    secured:
      chain:
        middlewares:
        - default-whitelist
        - default-headers

🔗 References