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


相关推荐
SkyWalking中文站14 小时前
认识 Horizon UI · 1/17:SkyWalking 新一代可观测性控制台
运维·前端·监控
雪梨酱QAQ17 小时前
Kubeneters HA Cluster部署
运维
lichenyang45321 小时前
Docker 学习笔记(五):Docker Compose,用一个 YAML 启动前端、后端和 MongoDB
docker
lichenyang45321 小时前
Docker 学习笔记(四):Dockerfile,把项目打成自己的镜像
docker·容器
lichenyang45321 小时前
Docker 学习笔记(三):Docker 网络、bridge、子网和容器互通
docker·容器
lichenyang45321 小时前
Docker 学习笔记(二):docker run 的参数到底在控制什么?
docker·容器
江华森1 天前
Spring Cloud 微服务全栈实战:从 Eureka 到 Docker Compose 一文贯通
运维
江华森1 天前
Matplotlib 数据绘图基础入门
运维
江华森1 天前
NumPy 数值计算基础入门
运维
乘云数字DATABUFF5 天前
5分钟部署开源APM Databuff:OpenTelemetry全链路追踪入门实战
运维·后端