当前位置: 首页 > news >正文

️ 深度解析我的 Overleaf 私有化部署:一份稳定、高兼容性的 `docker-compose.yaml`

大家好,我是 XuHe。在上一篇博客告别 LaTeX 配置地狱:我的 Overleaf (ShareLaTeX-CE) 完整版私有化部署方案,我想详细解析一下我为 Overleaf Community Edition (ShareLaTeX CE) 项目所配置的 docker-compose.yaml 文件。

一个稳定、可维护的 Overleaf 私有部署,其灵魂就在于如何配置好三个核心服务:ShareLaTeX 应用MongoDB 数据库Redis 缓存

我这份配置不仅解决了AVX 兼容性问题,还通过一系列环境变量优化了使用体验编译稳定性

services:sharelatex:restart: always# image: sharelatex/sharelatex:4.2.3image: xuhe-sharelatex-ce:latest # custom image(include new texlive)container_name: leaf-sharelatexdepends_on:mongo:condition: service_healthyredis:condition: service_startedports:- 8008:80links:- mongo- redisstop_grace_period: 60svolumes:- ./sharelatex:/var/lib/sharelatexenvironment:SHARELATEX_APP_NAME: XuHe's OverleafSHARELATEX_MONGO_URL: mongodb://mongo/sharelatex# Same property, unfortunately with different names in# different locationsSHARELATEX_REDIS_HOST: redisREDIS_HOST: redisENABLED_LINKED_FILE_TYPES: "project_file,project_output_file"# Enables Thumbnail generation using ImageMagickENABLE_CONVERSIONS: "true"# Disables email confirmation requirementEMAIL_CONFIRMATION_DISABLED: "true"# temporary fix for LuaLaTex compiles# see https://github.com/overleaf/overleaf/issues/695TEXMFVAR: /var/lib/sharelatex/tmp/texmf-varmongo:restart: alwaysimage: mongo:4.4container_name: leaf-mongocommand: "--replSet overleaf"expose:- 27017volumes:- ./mongo:/data/dbhealthcheck:test: echo 'db.stats().ok' | mongo localhost:27017/test --quietinterval: 10stimeout: 10sretries: 5redis:restart: alwaysimage: redis:6.2container_name: leaf-redisexpose:- 6379volumes:- ./redis:/data

一、核心服务总览

我的部署方案中包含以下三个服务:

服务名称 角色 关键版本(兼容性考量)
sharelatex 主应用服务 自定义镜像 (xuhe-sharelatex-ce:latest)
mongo 数据存储服务 mongo:4.4 (为兼容无 AVX 指令集 CPU)
redis 缓存与实时数据服务 redis:6.2

二、ShareLaTeX 应用配置详解 (sharelatex Service)

sharelatex 服务是整个部署的核心。这里我们不仅指定了自定义镜像,还通过环境变量进行了大量功能定制。

1. 启动与依赖

配置项 核心作用
image xuhe-sharelatex-ce:latest 使用我们自定义的完整 TeX Live 镜像
restart always 保证服务崩溃或重启后自动恢复运行。
depends_on mongo (healthy), redis (started) 确保 ShareLaTeX 只有在数据库和缓存服务准备就绪后才启动。

2. 核心环境变量 (environment)

以下环境变量是定制 Overleaf 行为的关键,我重点介绍了几个提高用户体验和稳定性的配置:

环境变量 目的与说明
SHARELATEX_APP_NAME XuHe's Overleaf 应用名称。自定义浏览器 Tab 和登录页面的名称,增强私有化标识。
SHARELATEX_MONGO_URL mongodb://mongo/sharelatex MongoDB 连接。使用 Docker Compose 内部服务名 mongo 进行连接。
EMAIL_CONFIRMATION_DISABLED "true" 跳过邮件验证。默认情况下,新用户注册需要邮件验证。将其设置为 true 可直接登录使用,非常适合内部或私有部署。
ENABLE_CONVERSIONS "true" 启用图片/缩略图转换。允许 Overleaf 使用 ImageMagick 进行图片处理和生成 PDF 缩略图。
TEXMFVAR /var/lib/sharelatex/tmp/texmf-var LuaLaTeX 兼容性修复。这是一个针对特定版本 LuaLaTeX 编译问题的临时修复,提升编译稳定性。
ENABLED_LINKED_FILE_TYPES "project_file,..." 启用外部文件类型链接(高级)。用于控制哪些文件类型可以被链接或引用。

3. 数据持久化与网络

  • 端口映射 (ports): 我将容器内部的 80 端口映射到宿主机的 8008 端口 (8008:80),方便通过浏览器访问。您可以根据需要修改 8008
  • 数据卷 (volumes): ./sharelatex:/var/lib/sharelatex。这是至关重要的配置,它将容器内的项目数据目录持久化映射到宿主机上的 ./sharelatex 文件夹,确保项目文件不会丢失。

三、数据库和缓存服务配置

1. MongoDB (mongo Service)

  • 版本 (image): 选择了 mongo:4.4。这是为了规避最新版 MongoDB 对 AVX 指令集的强制依赖,以确保在旧硬件上顺利运行。
  • 副本集 (command): "--replSet overleaf"。这是 Overleaf 运行所必需的配置,用于启用 MongoDB 的副本集功能。启动后,还需要执行一次 docker exec 命令进行初始化(详见我的 README)。
  • 健康检查 (healthcheck): 保证 ShareLaTeX 服务只在 MongoDB 确认可以连接并工作正常时才启动,提升启动可靠性。
  • 数据卷 (volumes): ./mongo:/data/db,确保数据库数据持久化。

2. Redis (redis Service)

  • 版本 (image): redis:6.2,一个稳定且功能完整的 Redis 版本。
  • 作用: Redis 主要用于 Overleaf 的实时数据、会话管理和缓存,是实现协同编辑功能的基础。
  • 数据卷 (volumes): ./redis:/data,用于持久化 Redis 的持久化数据。

四、结语

这份 docker-compose.yaml 文件是我在保证最大硬件兼容性的前提下,对 Overleaf 部署进行定制和优化的成果。通过精准的环境变量配置,我们不仅解决了常见的部署难题,还让 Overleaf 的使用体验更加贴合私有化需求。

欢迎访问我的 GitHub 仓库 xuhe2/sharelatex-ce 获取完整的配置文件和部署指南。


🙏 特别致谢

本文的结构梳理与内容精炼得到了 Gemini 智能助手的协助。

http://www.jsqmd.com/news/27898/

相关文章:

  • 支配点对小记
  • 2025赣南脐橙最新推荐品牌榜,源头赣南脐橙果园品牌综合评测!
  • Manacher 代码贴贴
  • Python测试(上)_ 不存在不写bug的程序员
  • P9119 [春季测试 2023] 圣诞树
  • Java性能调优的艺术:从字节码到云端的全链路优化
  • 2025.10.31总结 - A
  • 用隐式马尔科夫模型检测XSS攻击Payload
  • revit api创建文字注释
  • mysql 查询今天、昨天、本周、上周、本月、上月、本季度、上季度、本年、上一年、的数据
  • P10674 [MX-S1-T3] 电动力学 题解
  • 【UE引擎解构】- GamePlay篇 : 移动
  • 读后感一:《代码大全 2》—— 从 “写代码” 到 “做工程” 的思维跃迁 - A
  • Ai元人文:对“局限性”的反驳
  • 读后感二:《代码大全 2》—— 穿越技术迭代的 “软件开发说明书” - A
  • JDBC练习
  • 2-SAT学习笔记
  • 打造自己的 Claude Code:LangGraph + MCP 搭建一个极简的 AI 编码助手
  • CSP-S 2023-2024 分析
  • 专栏目录
  • 代码大全2 第四五章
  • 程序员修炼之道:从小工到专家读后感1
  • 代码大全2阅读1
  • 代码大全2阅读2
  • 软件工程学习日志2025.10.30
  • BOE(京东方)“百堂故宫传统文化公益课”暨2025照亮成长路收官 推动“科技+教育+文化”可持续发展
  • Java的深层逻辑与未来生态延伸
  • 软件工程学习日志2025.10.31
  • Java:从跨平台梦想到生态帝国的编程语言
  • [KaibaMath]1016 关于数列与其子数列下标不等关系的证明