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


相关推荐
雪可问春风18 小时前
docker环境部署
运维·docker·容器
lwx91485218 小时前
Linux-Shell算术运算
linux·运维·服务器
翻斗包菜18 小时前
PostgreSQL 日常维护完全指南:从基础操作到高级运维
运维·数据库·postgresql
somi718 小时前
ARM-驱动-02-Linux 内核开发环境搭建与编译
linux·运维·arm开发
双份浓缩馥芮白18 小时前
【Docker】Linux 迁移 docker 目录(软链接)
linux·docker
海的透彻19 小时前
nginx启动进程对文件的权限掌控
运维·chrome·nginx
路溪非溪19 小时前
Linux驱动开发中的常用接口总结(一)
linux·运维·驱动开发
航Hang*19 小时前
第3章:Linux系统安全管理——第2节:部署代理服务
linux·运维·服务器·开发语言·笔记·系统安全
北方的流星19 小时前
华三网络设备的路由重定向配置
运维·网络·华三
河南博为智能科技有限公司19 小时前
蓄电池在线监测系统-守护数据中心安全防线
运维·边缘计算