107 lines
3.0 KiB
YAML
107 lines
3.0 KiB
YAML
# Overleaf Docker Compose
|
|
# Overleaf is a web-based collaborative LaTeX editor
|
|
# Provides standalone deployment with MongoDB for development/testing
|
|
|
|
x-defaults: &defaults
|
|
restart: unless-stopped
|
|
logging:
|
|
driver: json-file
|
|
options:
|
|
max-size: 100m
|
|
max-file: '3'
|
|
|
|
services:
|
|
# MongoDB for Overleaf data storage
|
|
mongo:
|
|
<<: *defaults
|
|
image: ${GLOBAL_REGISTRY:-}mongo:${MONGO_VERSION:-6.0}
|
|
hostname: overleaf-mongo
|
|
volumes:
|
|
- mongo_data:/data/db
|
|
environment:
|
|
- TZ=${TZ:-UTC}
|
|
healthcheck:
|
|
test: [CMD, mongosh, --eval, "db.adminCommand('ping')"]
|
|
interval: 10s
|
|
timeout: 5s
|
|
retries: 5
|
|
start_period: 10s
|
|
deploy:
|
|
resources:
|
|
limits:
|
|
cpus: ${MONGO_CPU_LIMIT:-1.0}
|
|
memory: ${MONGO_MEMORY_LIMIT:-1G}
|
|
reservations:
|
|
cpus: ${MONGO_CPU_RESERVATION:-0.1}
|
|
memory: ${MONGO_MEMORY_RESERVATION:-512M}
|
|
|
|
# Redis for session and cache storage
|
|
redis:
|
|
<<: *defaults
|
|
image: ${GLOBAL_REGISTRY:-}redis:${REDIS_VERSION:-7-alpine}
|
|
hostname: overleaf-redis
|
|
command: redis-server --appendonly yes
|
|
volumes:
|
|
- redis_data:/data
|
|
environment:
|
|
- TZ=${TZ:-UTC}
|
|
healthcheck:
|
|
test: [CMD, redis-cli, ping]
|
|
interval: 10s
|
|
timeout: 5s
|
|
retries: 5
|
|
start_period: 10s
|
|
deploy:
|
|
resources:
|
|
limits:
|
|
cpus: ${REDIS_CPU_LIMIT:-0.5}
|
|
memory: ${REDIS_MEMORY_LIMIT:-512M}
|
|
reservations:
|
|
cpus: ${REDIS_CPU_RESERVATION:-0.1}
|
|
memory: ${REDIS_MEMORY_RESERVATION:-256M}
|
|
|
|
# Overleaf main application
|
|
overleaf:
|
|
<<: *defaults
|
|
image: ${GLOBAL_REGISTRY:-}sharelatex/sharelatex:${OVERLEAF_VERSION:-5.2.1}
|
|
hostname: overleaf
|
|
ports:
|
|
- '${OVERLEAF_PORT_OVERRIDE:-8080}:80'
|
|
volumes:
|
|
- overleaf_data:/var/lib/overleaf
|
|
environment:
|
|
- TZ=${TZ:-UTC}
|
|
- MONGO_URL=mongodb://mongo:27017/overleaf
|
|
- REDIS_URL=redis://redis:6379
|
|
- ENABLE_SUBSCRIPTIONS=${ENABLE_SUBSCRIPTIONS:-false}
|
|
- SHARELATEX_APP_NAME=${SHARELATEX_APP_NAME:-Overleaf}
|
|
- SHARELATEX_SECURE_COOKIE=${SHARELATEX_SECURE_COOKIE:-false}
|
|
- SHARELATEX_ADMIN_EMAILS=${SHARELATEX_ADMIN_EMAILS:-admin@example.com}
|
|
- SHARELATEX_BEHIND_PROXY=${SHARELATEX_BEHIND_PROXY:-true}
|
|
- SHARELATEX_NAV_TITLE=${SHARELATEX_NAV_TITLE:-Community Edition}
|
|
- LATEX_AVAILABLE_LATEXMK=${LATEX_AVAILABLE_LATEXMK:-true}
|
|
depends_on:
|
|
mongo:
|
|
condition: service_healthy
|
|
redis:
|
|
condition: service_healthy
|
|
healthcheck:
|
|
test: [CMD-SHELL, 'curl -sf http://localhost/health || exit 1']
|
|
interval: 30s
|
|
timeout: 10s
|
|
retries: 5
|
|
start_period: 60s
|
|
deploy:
|
|
resources:
|
|
limits:
|
|
cpus: ${OVERLEAF_CPU_LIMIT:-2.0}
|
|
memory: ${OVERLEAF_MEMORY_LIMIT:-2G}
|
|
reservations:
|
|
cpus: ${OVERLEAF_CPU_RESERVATION:-0.1}
|
|
memory: ${OVERLEAF_MEMORY_RESERVATION:-1G}
|
|
|
|
volumes:
|
|
mongo_data:
|
|
redis_data:
|
|
overleaf_data:
|