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 镜像源切换(清华/中科大),速度会好很多。


相关推荐
Leinwin3 小时前
OpenClaw 多 Agent 协作框架的并发限制与企业化规避方案痛点直击
java·运维·数据库
2401_865382503 小时前
信息化项目运维与运营的区别
运维·运营·信息化项目·政务信息化
漠北的哈士奇3 小时前
VMware Workstation导入ova文件时出现闪退但是没有报错信息
运维·vmware·虚拟机·闪退·ova
如意.7593 小时前
【Linux开发工具实战】Git、GDB与CGDB从入门到精通
linux·运维·git
运维小欣4 小时前
智能体选型实战指南
运维·人工智能
yy55274 小时前
Nginx 性能优化与监控
运维·nginx·性能优化
爱吃土豆的马铃薯ㅤㅤㅤㅤㅤㅤㅤㅤㅤ4 小时前
Linux 查询某进程文件所在路径 命令
linux·运维·服务器
05大叔6 小时前
网络基础知识 域名,JSON格式,AI基础
运维·服务器·网络
安当加密6 小时前
无需改 PAM!轻量级 RADIUS + ASP身份认证系统 实现 Linux 登录双因子认证
linux·运维·服务器
dashizhi20156 小时前
服务器共享禁止保存到本地磁盘、共享文件禁止另存为本地磁盘、移动硬盘等
运维·网络·stm32·安全·电脑