Files
overleaf-cep/tools/reference_stack_compose/overleaf/compose.yaml
T

217 lines
8.8 KiB
YAML

services:
overleaf:
image: docker.io/sharelatex/sharelatex:${OVERLEAF_VERSION}
container_name: overleaf
hostname: overleaf
restart: always
volumes:
- ./data:/var/lib/overleaf
- ./log:/var/log/overleaf
- /var/run/docker.sock:/var/run/docker.sock
environment:
GIT_BRIDGE_ENABLED: true
GIT_BRIDGE_HOST: git-bridge
GIT_BRIDGE_PORT: 8000
## LanguageTool grammar check (services/web/modules/languagetool)
## Requires the `languagetool` container reachable on the attached
## `languagetools` network (see tools/languagetools_server_compose).
## Picky level is the default on the client side.
LANGUAGE_TOOL_ENABLED: true
LANGUAGE_TOOL_HOST: languagetool
LANGUAGE_TOOL_PORT: "8010"
## WakaTime/Wakapi activity tracking (PR 249 + bundled Wakapi server)
## — see tools/wakapi_server_compose in the overleaf-cep repo).
## Shared identity (trusted header, muety/wakapi#808): NO per-user
## registration, NO API keys — logged-in users appear in Wakapi
## automatically. The 'wakapi' DNS alias + this env must both be in
## place; re-run tools/wakapi_server_compose/1_attach_overleaf_network.sh
## after every overleaf container recreation.
WAKATIME_SHARED_IDENTITY: true
WAKATIME_SHARED_IDENTITY_API_URL: http://wakapi:3000/api/compat/wakatime/v1
WAKATIME_SHARED_IDENTITY_HEADER: Remote-User
REDIS_HOST: redis
REDIS_PORT: 6379
OVERLEAF_REDIS_HOST: redis
V1_HISTORY_URL: http://overleaf:3100/api
OVERLEAF_MONGO_URL: mongodb://mongo/sharelatex
OVERLEAF_APP_NAME: ${OVERLEAF_APP_NAME}
ENABLED_LINKED_FILE_TYPES: project_file,project_output_file,url,zotero
ENABLE_CONVERSIONS: true
EMAIL_CONFIRMATION_DISABLED: true
OVERLEAF_BEHIND_PROXY: true
OVERLEAF_SECURE_COOKIE: true
OVERLEAF_SITE_URL: ${OVERLEAF_SITE_URL}
OVERLEAF_NAV_TITLE: ${OVERLEAF_NAV_TITLE}
NAV_HIDE_POWERED_BY: true
OVERLEAF_ADMIN_EMAIL: ${OVERLEAF_ADMIN_EMAIL}
OVERLEAF_LOGIN_SUPPORT_TEXT: ${OVERLEAF_LOGIN_SUPPORT_TEXT}
SHOW_UNSUPPORT_WARNING: false
ENABLE_LOCAL_LOGIN_MASK: false
########################
## eMail ##
########################
OVERLEAF_EMAIL_FROM_ADDRESS: ${OVERLEAF_EMAIL_FROM_ADDRESS}
OVERLEAF_EMAIL_SMTP_HOST: ${OVERLEAF_EMAIL_SMTP_HOST}
OVERLEAF_EMAIL_SMTP_PORT: ${OVERLEAF_EMAIL_SMTP_PORT}
OVERLEAF_EMAIL_SMTP_SECURE: ${OVERLEAF_EMAIL_SMTP_SECURE}
OVERLEAF_EMAIL_SMTP_USER: ${OVERLEAF_EMAIL_SMTP_USER}
OVERLEAF_EMAIL_SMTP_PASS: ${OVERLEAF_EMAIL_PASSWORD}
OVERLEAF_EMAIL_SMTP_IGNORE_TLS: ${OVERLEAF_EMAIL_SMTP_IGNORE_TLS}
OVERLEAF_EMAIL_SMTP_LOGGER: true
OVERLEAF_CUSTOM_EMAIL_FOOTER: ${OVERLEAF_CUSTOM_EMAIL_FOOTER}
#########################################
## Overleaf Filestore S3 Configuration ##
#########################################
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: ${AWS_ACCESS_KEY_ID}
OVERLEAF_FILESTORE_S3_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
OVERLEAF_FILESTORE_S3_ENDPOINT: http://s3:8333
OVERLEAF_FILESTORE_S3_PATH_STYLE: "true"
OVERLEAF_FILESTORE_S3_REGION: "us-east-1"
#########################################
## Overleaf History S3 Configuration ##
#########################################
OVERLEAF_HISTORY_BACKEND: s3
OVERLEAF_HISTORY_PROJECT_BLOBS_BUCKET: overleaf-project-blobs
OVERLEAF_HISTORY_CHUNKS_BUCKET: overleaf-chunks
OVERLEAF_HISTORY_S3_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
OVERLEAF_HISTORY_S3_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
OVERLEAF_HISTORY_S3_ENDPOINT: http://s3:8333
OVERLEAF_HISTORY_S3_PATH_STYLE: "true"
OVERLEAF_HISTORY_S3_REGION: "us-east-1"
########################
## OIDC ##
########################
EXTERNAL_AUTH: oidc
OVERLEAF_OIDC_PROVIDER_ID: oidc
OVERLEAF_OIDC_ISSUER: ${OVERLEAF_OIDC_ISSUER}
OVERLEAF_OIDC_AUTHORIZATION_URL: ${OVERLEAF_OIDC_ISSUER}/protocol/openid-connect/auth
OVERLEAF_OIDC_TOKEN_URL: ${OVERLEAF_OIDC_ISSUER}/protocol/openid-connect/token
OVERLEAF_OIDC_USER_INFO_URL: ${OVERLEAF_OIDC_ISSUER}/protocol/openid-connect/userinfo
OVERLEAF_OIDC_LOGOUT_URL: ${OVERLEAF_OIDC_ISSUER}/protocol/openid-connect/logout
OVERLEAF_OIDC_IDENTITY_SERVICE_NAME: ${OVERLEAF_OIDC_IDENTITY_SERVICE_NAME}
OVERLEAF_OIDC_CLIENT_ID: ${OVERLEAF_OIDC_CLIENT_ID}
OVERLEAF_OIDC_CLIENT_SECRET: ${OVERLEAF_OIDC_CLIENT_SECRET}
OVERLEAF_OIDC_UPDATE_USER_DETAILS_ON_LOGIN: true
OVERLEAF_OIDC_IS_ADMIN_FIELD: email
OVERLEAF_OIDC_IS_ADMIN_FIELD_VALUE: ${OVERLEAF_OIDC_IS_ADMIN_FIELD_VALUE}
OVERLEAF_LEFT_FOOTER: ${OVERLEAF_LEFT_FOOTER}
OVERLEAF_RIGHT_FOOTER: '[{"text":"Powered by Overleaf CEP", "url":"https://github.com/yu-i-i/overleaf-cep"}]'
########################
## Sandboxed Compiles ##
########################
SERVER_PRO: true
DOCKER_RUNNER: true
SIBLING_CONTAINERS_ENABLED: true
DOCKER_SOCKET_PATH: /var/run/docker.sock
SANDBOXED_COMPILES: true
SANDBOXED_COMPILES_SIBLING_CONTAINERS: true
# WARNING: CHANGE DIR!!!!
SANDBOXED_COMPILES_HOST_DIR: ${COMPILES_HOST_DIR}
COMPILES_HOST_DIR: ${COMPILES_HOST_DIR}
# png2pdf: CLSI's per-project cache dir must be host-visible so the
# png2pdf sibling container can bind-mount it (CLSI_CACHE_PATH inside
# the container == SANDBOXED_COMPILES_HOST_DIR_CACHE on the host,
# via the ./data -> /var/lib/overleaf mount)
CLSI_CACHE_PATH: /var/lib/overleaf/data/cache
SANDBOXED_COMPILES_HOST_DIR_CACHE: ${COMPILES_HOST_DIR_CACHE}
PNG2PDF_MIN_FILE_SIZE_BYTES: 50000
# filestore PDF→image conversion backend (template gallery preview/thumb).
# Choices:
# imagemagick local `convert` (image must ship ImageMagick)
# pdftocairo local `pdftocairo` (image must ship poppler)
# pdftocairo-sandbox sibling container (no network, CapDrop ALL, mem cap) —
# works on images WITHOUT any converter binaries
CONVERTER: pdftocairo-sandbox
CONVERSION_SANDBOX_IMAGE: sharelatex/pdftocairo:24.02
# Scratch dir bound into the sandbox container — the same directory seen from
# two sides (the overleaf container mounts ./data):
CONVERSION_SANDBOX_DIR: /var/lib/overleaf/tmp/conversions
CONVERSION_SANDBOX_HOST_DIR: ${CONVERSION_SANDBOX_HOST_DIR}
ALL_TEX_LIVE_DOCKER_IMAGES: ${TEX_LIVE_REPO}/texlive-full:2026.1, ${TEX_LIVE_REPO}/texlive-full:2025.1, ${TEX_LIVE_REPO}/texlive-full:2024.1, ${TEX_LIVE_REPO}/texlive-full:2023.1
ALL_TEX_LIVE_DOCKER_IMAGE_NAMES: TeXLive 2026, TeXLive 2025, TeXLive 2024, TeXLive 2023
TEX_LIVE_DOCKER_IMAGE: ${TEX_LIVE_REPO}/texlive-full:2026.1
TEX_COMPILER_EXTRA_FLAGS: -shell-escape
TEXLIVE_IMAGE_USER: www-data
COMPILE_TIMEOUT: 599
#################
# TEMPLATES #
#################
OVERLEAF_TEMPLATE_GALLERY: true
OVERLEAF_NON_ADMIN_CAN_PUBLISH_TEMPLATES: false
OVERLEAF_TEMPLATE_CATEGORIES: presentation thesis
TEMPLATE_PRESENTATION_NAME: Presentations
TEMPLATE_PRESENTATION_DESCRIPTION: Templates for Beamer and other presentation formats, tailored for academic talks and lectures.
TEMPLATE_THESIS_NAME: Theses
TEMPLATE_THESIS_DESCRIPTION: Templates for writing theses and dissertations, following institutional formatting and citation guidelines.
TEMPLATE_ALL_NAME: All templates
TEMPLATE_ALL_DESCRIPTION: Browse a collection of all available LaTeX templates, categorized by document type, style, and purpose.
####################
# Special settings #
####################
COMPILE_BODY_SIZE_LIMIT_MB: 50
COMPILE_SIZE_LIMIT: 50mb
ENABLE_PANDOC_CONVERSIONS: true
PANDOC_IMAGE: sharelatex/sharelatex-pandoc:${OVERLEAF_VERSION}
ENABLE_PNG2PDF_CONVERSIONS: true
PNG2PDF_IMAGE: sharelatex/png2pdf:2026-06-24
ZOTERO_CLIENT_KEY: ${ZOTERO_CLIENT_KEY}
ZOTERO_CLIENT_SECRET: ${ZOTERO_CLIENT_SECRET}
GITHUB_SYNC_ENABLED: true
GITHUB_SYNC_CLIENT_ID: ${GITHUB_SYNC_CLIENT_ID}
GITHUB_SYNC_CLIENT_SECRET: ${GITHUB_SYNC_CLIENT_SECRET}
OVERLEAF_INVITE_TOKEN_SECRET: ${OVERLEAF_INVITE_TOKEN_SECRET}
networks:
- overleaf-network
healthcheck:
test: bash -c "curl -fsI --connect-timeout 10 http://localhost || exit 1"
interval: 30s
timeout: 10s
retries: 5
start_period: 600s
networks:
overleaf-network:
external: true