Overleaf 6.3.1 Docker Compose 部署指南
面向需要在 Ubuntu 22.04 服务器上以 Docker Compose 自托管 Overleaf Community Edition 6.3.1 的运维人员,提供从官方 Toolkit 获取、配置、启动、管理员初始化、TeX Live 增补到编译验证的完整部署流程,覆盖数据持久化、环境变量与配置参数、等价 docker run 命令及部署过程中全部实测排障记录。
Overleaf 6.3.1 Docker Compose 部署指南
目标:面向需要在 Ubuntu 22.04 服务器上以 Docker Compose 自托管 Overleaf Community Edition 6.3.1 的运维人员,提供从官方 Toolkit 获取、配置、启动、管理员初始化、TeX Live 增补到编译验证的完整部署流程,覆盖数据持久化、环境变量与配置参数、等价 docker run 命令及部署过程中全部实测排障记录。
一、环境信息
本文全部命令与输出均在以下环境实测(实测日期 2026-10-22),读者在同等环境操作可直接复现:
| 项目 | 值 |
|---|---|
| 操作系统 | Ubuntu 22.04 LTS(x86_64) |
| Docker Engine | 29.8.1 |
| Docker Compose | v5.5.1(docker compose 插件) |
| Overleaf 版本 | Community Edition 6.3.1(镜像 sharelatex/sharelatex:6.3.1,Docker Hub 2026-10-16 更新) |
| MongoDB | 8.0.34(镜像 mongo:8.0) |
| Redis | 7.4(镜像 redis:7.4) |
| 部署目录 | /opt/overleaf-toolkit(官方 Overleaf Toolkit) |
| 示例站点地址 | http://192.168.1.80(替换为你的服务器 IP 或域名) |
| 示例管理员邮箱 | admin@quzuo.net |
认知与选型背景(产品定位、架构、同类对比)见本专栏 《Overleaf 介绍与选型指南》;配置参数逐项详解见 《Overleaf 6.3.1 配置参数详解》;Toolkit 全部 bin 命令逐条用法见 《Overleaf 6.3.1 常用 CLI 命令与工具详解》。
二、镜像选型说明
Overleaf 官方部署方案是 Overleaf Toolkit(github.com/overleaf/toolkit),它用 docker compose 编排三个容器,无需手写 compose 文件:
| 容器 | 镜像 | 作用 | 实测占用 |
|---|---|---|---|
| sharelatex | sharelatex/sharelatex:6.3.1 | 主应用容器,内含 web、编译(clsi)、文档存储(docstore/filestore)、历史、实时协作、拼写等全部 Node.js 微服务与 nginx 入口 | 4.74GB(镜像磁盘占用,bin/images 实测) |
| mongo | mongo:8.0 | 元数据库:用户、项目、文档内容、权限等全部持久化数据 | 镜像 1.28GB;实测数据目录 205M |
| redis | redis:7.4 | 实时编辑状态、编译队列、会话缓存 | 镜像 170MB |
版本选型要点(均实测验证):
- 主镜像版本由
config/version文件决定,不由 compose 文件写死:bin/init初始化时自动写入当时最新稳定版6.3.1。想固定版本,检查该文件内容即可:cat /opt/overleaf-toolkit/config/version→6.3.1。 - MongoDB 版本由
config/overleaf.rc的MONGO_VERSION决定(toolkit 当前默认8.0)。Overleaf 6.x 要求 MongoDB 以副本集模式运行(toolkit 自动加--replSet overleaf参数并自动完成初始化,实测rs.conf()返回单成员mongo:27017),不要自行降到官方文档不再支持的 4.x/5.x。 - Redis 版本由
REDIS_IMAGE决定(toolkit 当前默认redis:7.4,AOF 持久化默认开启)。 - Community Edition 镜像免费(AGPLv3);Server Pro 镜像为
quay.io/sharelatex/sharelatex-pro,需商业授权,由overleaf.rc的SERVER_PRO=true切换。本文只覆盖 CE。
三、前置条件
- 硬件:内存 ≥ 4GB(实测三容器常驻 + 一次编译在 4GB 机器可运行,多人协作建议 8GB);磁盘 ≥ 10GB 空闲(主镜像实测 4.74GB,再加 MongoDB 数据与编译缓存)。
- 软件:
- Docker Engine 24+(本文实测 29.8.1)与 Docker Compose v2+ 插件(实测 v5.5.1)。安装方法见 Docker 官方文档,或使用 Ubuntu 仓库
docker.io+docker-compose-plugin。 git(拉取 Toolkit)、curl(健康检查)。
- Docker Engine 24+(本文实测 29.8.1)与 Docker Compose v2+ 插件(实测 v5.5.1)。安装方法见 Docker 官方文档,或使用 Ubuntu 仓库
- 网络:能访问 Docker Hub 拉取镜像。内网拉取缓慢时可配置镜像加速或 HTTP 代理(systemd drop-in 方式为 docker 服务添加
HTTP_PROXY/HTTPS_PROXY环境变量后daemon-reload+restart docker,实测可用)。 - 端口:默认监听
80(OVERLEAF_PORT可改)。若 80 被占用,先改配置再启动(见第十一章 FAQ)。 - 目录:本文统一使用
/opt/overleaf-toolkit,数据落在其下data/子目录(见第五章),不散落其他路径。
部署前可先跑 Toolkit 自带体检命令确认环境(bin/doctor 逐项检查依赖与配置,完整输出解读见本专栏命令篇),关键段实测回显:
====== Overleaf Doctor ======
- Host Information
- Linux
- Dependencies
- docker
- status: present
- version info: Docker version 29.8.1, build 4a63305
- docker compose
- status: present
- version info: Docker Compose version v5.5.1
- Docker Daemon
- status: up
- server version: 29.8.1
====== Configuration ======
- config/version
- status: present
- version: 6.3.1
四、部署步骤
4.1 获取 Overleaf Toolkit 并初始化
git clone https://github.com/overleaf/toolkit.git /opt/overleaf-toolkit
cd /opt/overleaf-toolkit
bin/init
bin/init 实测输出:
Copying config files to 'config/'
初始化后在 /opt/overleaf-toolkit/config/ 生成 4 个文件(ls -la config/ 实测):
| 文件 | 作用 |
|---|---|
overleaf.rc | 基础编排配置:监听地址/端口、数据目录、mongo/redis 版本、TLS 代理开关等(逐参数见第七章) |
variables.env | 应用环境变量:站点 URL、站名、邮件、上传转换开关等(逐参数见第六章) |
version | 主镜像版本号,内容 6.3.1(bin/init 自动写入当前最新稳定版) |
.gitkeep | 占位文件 |
其中 variables.env 已自动生成一个随机密钥(实测内容形如):
# Secret generated at bin/init time
OVERLEAF_INVITE_TOKEN_SECRET=M/ubG0tRcZsHQ1P2b6e7JoewCKmjgIbwt+p8KLcw7jg=
该密钥用于邀请令牌签名,保留自动生成的值即可,不要泄露。
4.2 修改基础配置
默认配置只监听本机回环地址,需要改两处(编辑 /opt/overleaf-toolkit/config/overleaf.rc):
# overleaf.rc:默认 OVERLEAF_LISTEN_IP=127.0.0.1,改为 0.0.0.0 允许外部访问
sed -i 's/^OVERLEAF_LISTEN_IP=127.0.0.1/OVERLEAF_LISTEN_IP=0.0.0.0/' config/overleaf.rc
再编辑 config/variables.env,设置站点地址与应用名(原文件中 OVERLEAF_SITE_URL 行默认被注释):
OVERLEAF_APP_NAME="Quzuo Overleaf"
OVERLEAF_SITE_URL=http://192.168.1.80
⚠️
OVERLEAF_SITE_URL是必改项:登录 Cookie、邮件中的链接都基于它生成。填http://<服务器IP>或https://<域名>,末尾不带/。
4.3 启动服务
bin/up -d
实测输出(首次会自动拉取三个镜像,约 5GB 下载量):
Image sharelatex/sharelatex:6.3.1 Pulled
Container mongo Running
Container redis Creating
Container redis Created
Container sharelatex Creating
Container sharelatex Created
Container redis Starting
Container redis Started
Container mongo Waiting
Container mongo Healthy
Container sharelatex Starting
Container sharelatex Started
注意启动顺序:mongo 健康检查通过(Healthy)后 sharelatex 才启动(compose depends_on: condition: service_healthy),首次启动主容器内部还要做初始化(建库、建索引),约 1~2 分钟后 Web 才可访问。
4.4 处理社区版 Sibling Containers 警告(实测排障)
首次 bin/up -d 时,日志中会出现这样一条警告(实测原文):
Sibling containers are not available in Community Edition, ... Falling back
using insecure in-container compiles. Set SIBLING_CONTAINERS_ENABLED=false
in config/overleaf.rc to silence this warning.
原因:「Sibling Containers」(每个编译任务单独起一个沙箱容器)是 Server Pro 特性,CE 不支持。若 overleaf.rc 中 SIBLING_CONTAINERS_ENABLED=true(新克隆的 toolkit 默认值),CE 会退回容器内直接编译并向你提示这一点。
修复:把 config/overleaf.rc 中该行改为 false,然后重建容器:
bin/docker-compose down
bin/up -d
重建后警告消失。SIBLING_CONTAINERS_ENABLED=false 表示编译在主容器内进行,用户对主容器文件系统有完全访问权限,仅适合全员可信的内部环境;这也是 CE 的唯一工作模式。
4.5 健康检查验证
容器 Up 之后,先确认服务真正就绪(实测):
curl http://localhost/status
返回 web is alive (web)(HTTP 200)即就绪。
⚠️ 实测排障记录:旧版文档/博客常见
curl http://localhost/health_check,在 6.3.1 实测返回 404 Not found —— 该端点在 6.x 已不存在。正确健康端点是/status。做负载均衡或监控探针时务必用/status。
再验证入口页(实测 HTTP 200):
curl -s -o /dev/null -w "%{http_code}\n" http://localhost/launchpad
4.6 创建管理员账号
首次访问 http://<服务器IP>/launchpad 会进入管理员注册页(仅数据库中还没有管理员时开放),填写:
- Email:
admin@quzuo.net - Password:设置强密码并妥善保管
提交后自动以该账号登录,进入项目列表页。launchpad 注册窗口只在首个管理员创建前有效,之后访问会跳转登录页;后续新建用户由管理员在「Account Settings → 管理用户」中邀请,或由用户自助注册(需开启注册,见配置篇)。
4.7 登录并创建项目
浏览器打开 http://<服务器IP>,用上一步管理员账号登录。点击 New Project → Blank Project,命名 hello-latex,进入在线编辑器。左侧源码编辑区默认已有 main.tex,可直接点击 Recompile 编译,右侧应出现 PDF 预览。
4.8 编译验证与 PDF 下载
默认模板自带一段示例文字与 \maketitle,Recompile 成功即代表整条链路(web → clsi 编译 → filestore 存储 → PDF 回传)正常。点击 PDF 预览上方的下载图标可保存 output.pdf(实测下载文件为合法 PDF,头部 %PDF-1.7)。
服务器侧也可复核编译产物(实测,编译产物在数据目录下按项目 ID 组织):
find /opt/overleaf-toolkit/data/overleaf/output -name "*.pdf" | head
4.9 TeX Live 发行版增补(可选)
CE 镜像内置 TeX Live 2026 的 minimal 方案(实测 tlmgr --version 回显 TeX Live (https://tug.org/texlive) version 2026),够跑大多数论文模板,但缺大量常用宏包(如 biblatex、tikzlings 等)。缺包时编译报 ! LaTeX Error: File 'xxx.sty' not found.,按下面步骤增补。
第一步:自更新 tlmgr(必做,实测跳过必失败)
直接 tlmgr install <包名> 实测失败:tlmgr 提示本地 TeX Live 基础组件落后于远端 CTAN 仓库(实测仓库 https://mirror.ox.ac.uk/sites/ctan.org/systems/texlive/tlnet,状态 verified),最后以 Terminating; please see warning above! 终止安装,并提示可通过 update-tlmgr-latest.sh 自更新。
原因:镜像内置的 texlive.infra 基础组件落后于 CTAN 远端仓库,必须先自更新:
tlmgr update --self
实测输出:
[1/1] update: texlive.infra [461k] (79982 -> 80683) ... done
第二步:安装缺失宏包(以 tikzlings 为例,会连带安装 pgf/xcolor 等 5 个依赖):
tlmgr install tikzlings
验证(实测):
kpsewhich tikzlings.sty
# /usr/local/texlive/2026/texmf-dist/tex/latex/tikzlings/tikzlings.sty
第三步(可选):把 tlmgr 安装的命令行工具挂到 PATH:
tlmgr path add
which pdflatex xelatex latexmk
# /usr/local/bin/pdflatex
# /usr/local/bin/xelatex
# /usr/local/bin/latexmk
一步到位方案:安装 scheme-full(完整发行版,实测共 5077 个包、耗时 8 分 47 秒):
tlmgr install scheme-full
⚠️ 实测排障记录:scheme-full 装到
5077/5077全部包完成后,收尾的格式文件生成步骤可能报错(实测原文):fmtutil [ERROR]: multiple commands found: byengine byfmt byhyphen tlmgr: An error has occurred. See above messages. Exiting.这是 tlmgr 一次性传给 fmtutil 的选择器参数过多所致,宏包文件本身已全部装完,主流引擎不受影响(实测 pdfLaTeX/XeLaTeX/LuaLaTeX 编译正常,
kpsewhich能命中 biblatex/fontspec 等新装宏包)。如需补齐个别引擎格式,分引擎单独执行即可:fmtutil-sys --byengine xetex(单选择器调用实测正常,
--byengine pdftex/--byengine xetex/--byengine luatex按需执行。)
重要:增补结果不会随容器重建保留。tlmgr 装的内容写进主容器文件系统,bin/docker-compose down && bin/up -d 重建容器后会全部丢失(data/ 目录只持久化项目数据,见第五章)。官方给定的固化方案是把装好的容器提交为新镜像并让 toolkit 使用它:
docker commit sharelatex sharelatex/sharelatex:6.3.1-with-texlive-full
echo "sharelatex/sharelatex:6.3.1-with-texlive-full" > /opt/overleaf-toolkit/config/version
bin/docker-compose down && bin/up -d
4.10 数据备份验证
MongoDB 是全部项目数据的最终存储,部署完成后应立即验证一次备份链路(实测命令与回显):
bin/docker-compose exec -T mongo mongodump --archive --gzip --db sharelatex > /tmp/overleaf-mongo-backup.gz
ls -l /tmp/overleaf-mongo-backup.gz
# -rw-r--r-- 1 root root 8246 Oct 21 19:01 /tmp/overleaf-mongo-backup.gz
exit=0 且日志出现 done dumping sharelatex.users 等集合输出即备份成功。定期备份策略与恢复演练见本专栏运维文档。
五、数据持久化说明
Toolkit 通过 bind mount 把三个数据目录从宿主机挂进容器,重建容器数据不丢。实测目录结构(du -sh 于部署并建 1 个项目后):
| overleaf.rc 变量 | 宿主机路径(相对 toolkit 根目录) | 容器内挂载点 | 存放内容 | 实测占用 |
|---|---|---|---|---|
OVERLEAF_DATA_PATH | data/overleaf | /var/lib/overleaf | 用户上传文件、编译输出与缓存 | 264K |
MONGO_DATA_PATH | data/mongo | /data/db | MongoDB 全部持久化数据(用户/项目/文档) | 205M |
REDIS_DATA_PATH | data/redis | /data | Redis AOF 持久化文件(队列/会话状态) | 36K |
要点(均为实测或官方文档结论):
- 备份这三层才算完整:
data/mongo(元数据)、data/overleaf(文件实体)、data/redis(状态缓存,重要性最低)。生产环境推荐用 4.10 的mongodump逻辑备份 + 文件目录快照。 - 日志默认不落地:
OVERLEAF_LOG_PATH默认未设置,应用日志只写进容器内部(docker logs/bin/logs可读),重建容器即丢。要保留日志,在overleaf.rc设置OVERLEAF_LOG_PATH=data/logs(或绝对路径),重启后日志挂载到宿主机。 - 数据目录属主是 root:容器以 root 运行,宿主机上
data/子目录由 root 创建(drwxr-xr-x root root),外部改动需 root 权限。 - 迁移服务器:停服后整体打包
/opt/overleaf-toolkit(含config/与data/)到新机同路径,bin/up -d即可恢复,版本保持config/version一致。 - git-bridge 目录:
data/git-bridge在 CE 下不会被使用(GIT_BRIDGE_ENABLED=false),仅为目录占位。
六、环境变量表
以下变量写在 config/variables.env,通过 compose env_file 注入主容器。下表为 6.3.1 官方 variables.env 模板中实际存在、且在本次部署中核对过的变量(标注「默认」为模板原始状态):
| 变量 | 默认(模板) | 说明 | 实测值/建议 |
|---|---|---|---|
OVERLEAF_APP_NAME | Overleaf Community Edition | 站点名称,显示在浏览器标题与页面头部 | Quzuo Overleaf |
OVERLEAF_SITE_URL | 注释状态(必改) | 站点对外访问地址,Cookie 与邮件链接的基准 | http://192.168.1.80 |
OVERLEAF_INVITE_TOKEN_SECRET | 自动生成 | 邀请令牌签名密钥,保留勿动勿泄露 | bin/init 生成 |
EMAIL_CONFIRMATION_DISABLED | true | 关闭邮箱确认要求(无 SMTP 时的自托管默认) | 保持 true,配置 SMTP 后可删 |
ENABLED_LINKED_FILE_TYPES | project_file,project_output_file | 允许「链接文件」的类型 | 默认即可 |
ENABLE_CONVERSIONS | true | 编译结果转图片(缩略图)功能,依赖 pdftocairo | 默认即可 |
OVERLEAF_NAV_TITLE | 注释 | 导航栏标题 | 可选 |
OVERLEAF_HEADER_IMAGE_URL | 注释 | 自定义 Logo(另有 _LIGHT/_DARK 两个明暗变体) | 可选 |
OVERLEAF_ADMIN_EMAIL | 注释 | 页脚展示的管理员联系邮箱 | 建议设置 |
OVERLEAF_LEFT_FOOTER / OVERLEAF_RIGHT_FOOTER | 注释 | 自定义页脚 JSON 数组 | 可选 |
OVERLEAF_EMAIL_FROM_ADDRESS | 注释 | 发件人地址 | 配 SMTP 后必设 |
OVERLEAF_EMAIL_SMTP_HOST/PORT/SECURE/USER/PASS | 注释 | SMTP 服务器参数(PORT 例 587,SECURE=false 为 STARTTLS) | 内网无邮件可暂不配 |
OVERLEAF_EMAIL_SMTP_TLS_REJECT_UNAUTH | true | 拒绝自签名证书 | 自签证书环境改 false |
OVERLEAF_CUSTOM_EMAIL_FOOTER | 注释 | 邮件页脚文字 | 可选 |
OVERLEAF_BEHIND_PROXY | 注释 | 前置反向代理/TLS 时设 true | 用 TLS 代理时必设 |
OVERLEAF_SECURE_COOKIE | 注释 | 仅 HTTPS 下发 Cookie | HTTPS 环境必设 true |
EXTERNAL_AUTH | none | 外部认证(ldap/saml,Server Pro 功能) | CE 保持 none |
TEX_LIVE_DOCKER_IMAGE / ALL_TEX_LIVE_DOCKER_IMAGES | 注释 | Sibling Containers 模式使用的 TeX Live 镜像(Server Pro) | CE 不生效 |
OVERLEAF_FILESTORE_BACKEND / OVERLEAF_HISTORY_BACKEND | fs(bin/doctor 实测) | 文件/历史存储后端,fs 或 s3 | 默认 fs,S3 参数组见模板 |
修改 variables.env 后需重建容器生效:bin/docker-compose down && bin/up -d(官方 overleaf-rc.md 明确说明 rc 与 env 的修改都要重建)。
七、配置参数说明
以下参数写在 config/overleaf.rc,决定 compose 编排本身(监听、目录、镜像、组件开关)。改 rc 后必须 bin/docker-compose down && bin/up -d 重建容器。表内默认值为 6.3.1 Toolkit 实测(bin/init 生成文件 + bin/doctor 回显):
| 参数 | 默认值 | 说明 |
|---|---|---|
PROJECT_NAME | overleaf | compose 项目名,同机多实例时每实例不同 |
SERVER_PRO | false | true 切换 Server Pro 镜像(需授权) |
OVERLEAF_IMAGE_NAME | 注释(CE 为 sharelatex/sharelatex) | 自定义主镜像名,tag 仍取 config/version |
OVERLEAF_DATA_PATH | data/overleaf | 主容器数据目录,可为相对(toolkit 根)或绝对路径 |
OVERLEAF_LOG_PATH | 未设置 | 宿主机日志目录;未设置则日志留存容器内 |
OVERLEAF_LISTEN_IP | 127.0.0.1 | 主容器监听地址;对外服务改 0.0.0.0 或具体网卡 IP |
OVERLEAF_PORT | 80 | 主容器宿主端口 |
SIBLING_CONTAINERS_ENABLED | false | 沙箱编译开关(Server Pro 特性);CE 实测必须 false,见 4.4 |
DOCKER_SOCKET_PATH | /var/run/docker.sock | 沙箱编译挂载的 docker socket |
MONGO_ENABLED | true | false 时改用外部 MongoDB(MONGO_URL 指定) |
MONGO_URL | 未设置(内部固定 mongodb://mongo/sharelatex) | 外部数据库连接串 |
MONGO_DATA_PATH | data/mongo | MongoDB 数据目录 |
MONGO_IMAGE / MONGO_VERSION | mongo / 8.0 | MongoDB 镜像与版本(版本只填大.小版本) |
REDIS_ENABLED | true | false 时改用外部 Redis(REDIS_HOST/REDIS_PORT) |
REDIS_DATA_PATH | data/redis | Redis 数据目录 |
REDIS_IMAGE | redis:7.4 | Redis 镜像 |
REDIS_AOF_PERSISTENCE | true | AOF 持久化,官方推荐保持开启 |
GIT_BRIDGE_ENABLED | false | Git 桥接(Server Pro only),CE 开了也不生效 |
GIT_BRIDGE_DATA_PATH / GIT_BRIDGE_LOG_LEVEL | data/git-bridge / INFO | Git 桥接数据目录与日志级别 |
NGINX_ENABLED | false | 启用官方 TLS 代理容器(https 反代) |
NGINX_CONFIG_PATH | config/nginx/nginx.conf | TLS 代理配置文件 |
TLS_PRIVATE_KEY_PATH / TLS_CERTIFICATE_PATH | config/nginx/certs/*.pem | 证书与私钥路径 |
NGINX_HTTP_LISTEN_IP / NGINX_HTTP_PORT | 127.0.1.1 / 80 | http→https 跳转监听(不要设 0.0.0.0,与 OVERLEAF_LISTEN_IP 冲突) |
NGINX_TLS_LISTEN_IP / TLS_PORT | 127.0.1.1 / 443 | https 监听地址与端口 |
PULL_BEFORE_UPGRADE | 未设置(默认拉取) | 气隙环境设 false 跳过升级前拉取 |
两处易踩坑(官方文档明示,实测核对):
OVERLEAF_LISTEN_IP=0.0.0.0与NGINX_HTTP_LISTEN_IP=0.0.0.0组合会端口冲突;启用 TLS 代理时主容器建议保留127.0.0.1监听。MONGO_VERSION必须是「主版本.次版本」格式(如8.0),不能直接写完整镜像 tag。
八、配置文件挂载
Toolkit 的配置注入方式与手写 compose 不同,理解后才能正确改配置:
config/variables.env→ 注入为主容器环境变量。compose 定义中env_file: ../config/variables.env,容器内进程读环境变量得到全部应用配置。config/overleaf.rc→ 在生成 compose 文件时消费,不挂载进容器。bin/up每次都会根据 rc 重新合成 compose 定义(基础定义在lib/docker-compose.*.yml),所以改 rc 后必须 down+up 才会体现。config/version→ 决定主镜像 tag,同样在合成时消费。- 数据目录挂载(渲染后
bin/docker-compose config实测值):
sharelatex:
volumes:
- source: /opt/overleaf-toolkit/data/overleaf
target: /var/lib/overleaf
mongo:
volumes:
- source: /opt/overleaf-toolkit/data/mongo
target: /data/db
redis:
volumes:
- source: /opt/overleaf-toolkit/data/redis
target: /data
- 追加自定义挂载/配置用 override 文件:创建
config/docker-compose.override.yml,compose 会自动叠加。官方 persistent-data.md 给出的典型用法是把 MongoDB 数据改存到 named volume(Windows/macOS 上 bind mount 会导致 WiredTiger 报Operation not permitted;Linux bind mount 无此问题)。想核对最终生效的完整定义:
bin/docker-compose config
九、等价 docker run 命令
Toolkit 本质是 docker compose 封装。以下给出与实测渲染结果等价的 docker run 命令(用于理解编排关系或在无 toolkit 的极简场景手工复刻;生产仍建议用 toolkit,否则失去升级/体检/日志等封装能力)。
先建网络(对应 compose 项目网络 overleaf_default):
docker network create overleaf_default
MongoDB(副本集模式 + 数据目录):
docker run -d --name mongo --restart always --network overleaf_default \
-v /opt/overleaf-toolkit/data/mongo:/data/db \
mongo:8.0 --replSet overleaf
Redis(AOF 持久化):
docker run -d --name redis --restart always --network overleaf_default \
-v /opt/overleaf-toolkit/data/redis:/data \
redis:7.4 redis-server --appendonly yes
Overleaf 主容器(env-file 注入 variables.env,另补两条容器互联变量):
docker run -d --name sharelatex --restart always --network overleaf_default \
-p 0.0.0.0:80:80 \
-v /opt/overleaf-toolkit/data/overleaf:/var/lib/overleaf \
--env-file /opt/overleaf-toolkit/config/variables.env \
-e OVERLEAF_MONGO_URL=mongodb://mongo/sharelatex \
-e OVERLEAF_REDIS_HOST=redis \
sharelatex/sharelatex:6.3.1
与 toolkit 行为的三点差异(实测/渲染结果对照):
- toolkit 版
mongo带 healthcheck(db.stats().ok),主容器等 mongo Healthy 才启动;手工 run 需自行控制启动顺序(先 mongo 后 sharelatex)。 - 副本集初始化:toolkit 部署实测已自动完成(
rs.conf()返回_id: "overleaf"单成员);手工部署若 web 连不上 mongo,进入 mongo 容器执行一次mongosh --eval 'rs.initiate()'再重启 sharelatex。 - 主容器
stop_grace_period: 60s(渲染值1m0s),手工 run 对应为--stop-timeout 60。
十、常用运维命令
以下全部在 /opt/overleaf-toolkit 目录下执行,逐条实测(更完整的逐参数说明与更多回显见本专栏 《Overleaf 6.3.1 常用 CLI 命令与工具详解》):
| 命令 | 作用 | 实测要点 |
|---|---|---|
bin/up -d | 启动/应用配置变更 | mongo Healthy 后 sharelatex 才启动 |
bin/stop | 停止全部容器 | 回显 Container sharelatex Stopped 等三行 |
bin/start | 启动已存在容器 | 回显 Container mongo Healthy 后 sharelatex Started |
bin/docker-compose ps | 查看容器状态 | 停止后列表为空 |
bin/logs -f | 跟踪全部日志 | -n 50 看最近 50 行,bin/logs web 只看 web 服务 |
bin/error-logs | 只看错误级日志 | 无错误时输出为空 |
bin/images | 列出本机相关镜像 | 分 CE/Pro/TeXLive/GitBridge 四区展示 |
bin/doctor | 环境体检 | 检查依赖、配置、给出警告 |
bin/upgrade | 升级 toolkit 与镜像 | 已是最新时实测回显见下 |
bin/shell | 进主容器 shell | 等价 bin/docker-compose exec sharelatex bash |
bin/mongo | 进 mongo shell | 自动连 sharelatex 库 |
bin/backup-config | 备份配置文件 | -m zip|tar|copy,目标目录可选 |
bin/docker-compose exec -T mongo mongodump --archive --gzip --db sharelatex > backup.gz | 数据库逻辑备份 | 实测 exit=0,见 4.10 |
bin/upgrade 在无新版本时的实测输出:
Checking for code update...
No code update available for download
No change to docker image version
Done
十一、常见问题(FAQ)
Q1:启动日志报 "Sibling containers are not available in Community Edition"
见 4.4:CE 不支持沙箱编译,把 SIBLING_CONTAINERS_ENABLED=false 后 bin/docker-compose down && bin/up -d。
Q2:curl http://localhost/health_check 返回 404
6.x 已移除该端点,改用 /status(返回 web is alive (web) 为正常)。
Q3:容器 Up 但浏览器打不开页面
首次启动初始化需 1~2 分钟;先 bin/logs web -n 50 看 web 是否就绪,再确认 OVERLEAF_LISTEN_IP 与防火墙(ufw status)。云服务器还需放行安全组。
Q4:tlmgr install 报 "Terminating; please see warning above!"
先 tlmgr update --self 自更新基础组件,再安装目标包,见 4.9。
Q5:改了 overleaf.rc / variables.env 不生效
两个文件的修改都必须重建容器:bin/docker-compose down && bin/up -d(官方 overleaf-rc.md 明确要求)。仅 bin/stop + bin/start 只是启停既有容器,不会把新配置合成进去。
Q6:80 端口被占用
overleaf.rc 改 OVERLEAF_PORT=8080 重建,访问地址相应变为 http://<IP>:8080;或前置 nginx 反代(此时主容器监听回环地址,设 OVERLEAF_BEHIND_PROXY=true)。
Q7:日志里大量 punycode DeprecationWarning
Node.js 运行时提示(The punycode module is deprecated),6.3.1 上游已知现象,不影响功能,升级版本后消失。
Q8:mongo 启动日志有 "Access control is not enabled" / "Soft rlimits too low" 警告 官方 mongo 镜像的通用提示:前者因单机内网部署未启用认证(容器端口仅内部网络可达,不对外暴露 27017);后者建议调高文件描述符限制与调低 swappiness,单机自托管场景可接受,要求严格时可自行调优。
Q9:tlmgr 安装的宏包重启/升级后消失 宏包装在容器文件系统内,重建容器即丢。固化方案见 4.9 的 docker commit 三步。
Q10:升级 Overleaf 版本
改 config/version 为目标版本 → bin/upgrade → 官方要求按小版本顺序逐版升级并观察 mongo 版本要求;bin/upgrade 会同时拉取 toolkit 代码更新与镜像。实测当前 6.3.1 为最新,无需升级动作。
十二、参考链接
- 本专栏系列:《Overleaf 介绍与选型指南》 | 《Overleaf 6.3.1 配置参数详解》 | 《Overleaf 6.3.1 常用 CLI 命令与工具详解》
- Overleaf Toolkit 官方仓库与文档:https://github.com/overleaf/toolkit(`doc/quick-start-guide.md`、`doc/overleaf-rc.md`、`doc/persistent-data.md`、`doc/ce-upgrading-texlive.md`)
- Overleaf CE 开源主仓库:https://github.com/overleaf/overleaf
- 官方镜像:https://hub.docker.com/r/sharelatex/sharelatex
- 官方数据备份指南:https://github.com/overleaf/overleaf/wiki/Data-and-Backups
- TeX Live 与 tlmgr:https://tug.org/texlive/