从零到部署完成的完整流程。
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
常见坑提醒(按这个流程就能避开)
-
不要用
latest:避免某天镜像升级导致 Mongo/Redis 版本或环境变量变化直接起不来。 -
Mongo 一定要
--replSet rs0并且 URL 带?replicaSet=rs0。 -
scheme-full下载很大:如果在国内网络慢,可以把 Dockerfile 加上 CTAN 镜像源切换(清华/中科大),速度会好很多。