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


相关推荐
zz_nj1 天前
工作的环境
linux·运维·服务器
C_心欲无痕1 天前
nginx - 实现域名跳转的几种方式
运维·前端·nginx
suijishengchengde1 天前
****LINUX时间同步配置*****
linux·运维
幻云20101 天前
AI自动化编排:从入门到精通(基于Dify构建AI智能系统)
运维·人工智能·自动化
qiuqyue1 天前
基于虹软Linux Pro SDK的多路RTSP流并发接入、解码与帧级处理实践
linux·运维·网络
C_心欲无痕1 天前
Docker 本地部署 CSR 前端项目完整指南
前端·docker·容器
爱跑马的程序员1 天前
Linux 如何查看文件夹的大小(du、df、ls、find)
linux·运维·ubuntu
飞翔沫沫情1 天前
MinIO 新版本 Docker 部署指南:告别 Web 控制台,拥抱 CLI 管理
docker·容器·docker-compose·对象存储·minio
代码AI弗森1 天前
n8n 专题:从“自动化脚本”到“可视化工作流引擎”(自建、节点、Webhook、生产部署)
运维·自动化
令狐少侠20111 天前
docker基本操作 部署启动nginx
nginx·docker·容器