Overleaf 本地Docker部署

从零到部署完成的完整流程。


0) 准备目录结构

建议在一台机器上新建一个部署目录,比如 overleaf-ce/

复制代码
mkdir -p overleaf-ce
cd overleaf-ce
mkdir -p data/mongo data/redis data/overleaf

最终目录会像这样:

复制代码
overleaf-ce/
├── docker-compose.yml
├── Dockerfile
├── mongo-init.js
└── data/
    ├── mongo/
    ├── redis/
    └── overleaf/

1) 写 Dockerfile(构建带完整 TeX Live 的 Overleaf 镜像)

overleaf-ce/Dockerfile 写入:

复制代码
FROM sharelatex/sharelatex:6.0.1

RUN tlmgr update --self \
 && tlmgr install scheme-full \
 && tlmgr path add \
 && tlmgr clean --all

说明:scheme-full 会很大,但最省心;tlmgr path add 是为了确保安装后的 TeX 二进制进入 PATH。


2) 写 Mongo 副本集初始化脚本(首次自动初始化)

overleaf-ce/mongo-init.js 写入:

复制代码
rs.initiate({
  _id: "rs0",
  members: [{ _id: 0, host: "mongo:27017" }]
});

3) 写 docker-compose.yml(使用你构建的镜像)

overleaf-ce/docker-compose.yml 写入(需要修改成自己主机的ip地址):

复制代码
version: "3.8"

services:
  mongo:
    image: mongo:8.0
    container_name: overleaf-mongo
    restart: unless-stopped
    command: ["mongod", "--replSet", "rs0", "--bind_ip_all", "--wiredTigerCacheSizeGB", "1"]
    volumes:
      - ./data/mongo:/data/db
      - ./mongo-init.js:/docker-entrypoint-initdb.d/mongo-init.js:ro

  redis:
    image: redis:7.4-alpine
    container_name: overleaf-redis
    restart: unless-stopped
    volumes:
      - ./data/redis:/data

  overleaf:
    image: sharelatex/sharelatex:6.0.1-with-texlive-full
    container_name: overleaf
    restart: unless-stopped
    depends_on:
      - mongo
      - redis
    ports:
      - "8080:80"
    volumes:
      - ./data/overleaf:/var/lib/overleaf
    environment:
      OVERLEAF_MONGO_URL: "mongodb://mongo:27017/sharelatex?replicaSet=rs0"
      MONGO_URL: "mongodb://mongo:27017/sharelatex?replicaSet=rs0"
      OVERLEAF_REDIS_HOST: "redis"
      REDIS_HOST: "redis"
      OVERLEAF_REDIS_PORT: "6379"
      REDIS_PORT: "6379"
      OVERLEAF_SITE_URL: "http://192.168.5.2:8080"
      OVERLEAF_APP_NAME: "Overleaf"
      EMAIL_CONFIRMATION_DISABLED: "true"
      ENABLE_CONVERSIONS: "true"
      # 邮件发件人(必填)
      OVERLEAF_EMAIL_FROM_ADDRESS: "Overleaf <123456@qq.com>"
      OVERLEAF_EMAIL_REPLY_TO: "123456@qq.com"

      # QQ SMTP
      OVERLEAF_EMAIL_SMTP_HOST: "smtp.qq.com"
      OVERLEAF_EMAIL_SMTP_PORT: "465"
      OVERLEAF_EMAIL_SMTP_SECURE: "true"

      # 用户名/密码
      OVERLEAF_EMAIL_SMTP_USER: "123456@qq.com"
      OVERLEAF_EMAIL_SMTP_PASS: "abcdefghijklmn"

      # 调试(可选,先开着,确认能发出再关)
      OVERLEAF_EMAIL_SMTP_LOGGER: "true"

4) 构建自定义镜像

overleaf-ce/ 目录执行:

复制代码
docker build -t sharelatex/sharelatex:6.0.1-with-texlive-full .

验证一下镜像存在:

复制代码
docker images | grep 6.0.1-with-texlive-full

5) 启动服务

复制代码
docker compose up -d

查看启动状态:

复制代码
docker compose ps

查看 overleaf 日志(确认没有缺包):

复制代码
docker compose logs -f overleaf

【关键一步】直接初始化 rs0(只要执行一次):

复制代码
docker compose exec mongo mongosh --eval \
'rs.initiate({_id:"rs0",members:[{_id:0,host:"mongo:27017"}]})'

6) 首次访问与创建管理员/用户

  • 管理员初始化(网页):

    打开 http://192.168.5.2:8080/launchpad

  • 创建普通用户(管理员后台):
    http://192.168.5.2:8080/admin/register

(如果没配置 SMTP,会显示"设置密码链接",你复制发给用户即可)


7) 以后如何升级/重建(不会丢数据)

你的数据都在 ./data/*,所以重建容器不怕:

  • 重新 build(比如你改了 Dockerfile 或想更新包):

    docker compose down
    docker build -t sharelatex/sharelatex:6.0.1-with-texlive-full .
    docker compose up -d


常见坑提醒(按这个流程就能避开)

  1. 不要用 latest:避免某天镜像升级导致 Mongo/Redis 版本或环境变量变化直接起不来。

  2. Mongo 一定要 --replSet rs0 并且 URL 带 ?replicaSet=rs0

  3. scheme-full 下载很大:如果在国内网络慢,可以把 Dockerfile 加上 CTAN 镜像源切换(清华/中科大),速度会好很多。


相关推荐
NJCloud3 分钟前
Docker 私有仓库部署:Registry、加密传输与认证鉴权
运维·网络·docker·云原生·容器
w200512246 分钟前
K8S控制器管理
linux·云原生·容器·kubernetes
玖石书28 分钟前
Ubuntu 更换 USTC 镜像源完整指南(AMD64 / AARCH64)
linux·运维·ubuntu
zbyyd30 分钟前
Linux 进程间通信(IPC):信号、消息队列、共享内存与信号量详解
linux·运维·c语言
智脑API1 小时前
CCSwitch Claude Code 如何配置 MCP?服务器启动、工具权限与安全测试
运维·服务器·claude·codex·ccswitch
深念Y1 小时前
Nuxt 项目 Docker 构建:从 pnpm+node 迁移到全 bun
java·前端·docker
闲云野鹤在人间2 小时前
KVM虚拟化实战|CentOS‑Stream8 两种安装方式+模板制作+基础使用
linux·运维·服务器·centos
小张同学a.2 小时前
Docker 容器实战 2—— docker 仓库
linux·运维·服务器·docker·容器
Android系统攻城狮2 小时前
Linux PipeWire深度解析之pw_core_get_registry调用流程与实战(九十一)
linux·运维·服务器·音频进阶·pipewire音频实战进阶
其实防守也摸鱼2 小时前
智能体推荐:精选 AI Agent 工具与实战指南
运维·开发语言·人工智能·学习·web安全·自动化