overleaf提供了开源的社区版本供用户本地部署,可以不受官方在线版本的编译时长限制,overleaf提供了一组toolkit来简化本地部署的流程,下面我们从先决条件出发,介绍在Linux服务器和Windows系统部署的流程。
常见问题和解决方案附在文章末尾
Windows部署的先决条件
- Docker Desktop(依赖于WSL2环境,安装后可以集成到所有WSL2发行版中)
- WSL2 Ubuntu(提供bash工具以运行toolkit脚本、运行docker命令)
确保安装好Docker Desktop和WSL2 Ubuntu发行版后,在Docker Desktop的设置->Resources->WSL integration中打开Ubuntu发行版的集成开关,这样可以在WSL2中使用Windows系统中的docker。如下图所示:

部署过程
打开WSL2 Ubuntu终端(Windows环境)/使用SSH连接到Linux服务器(服务器环境),在用户的home目录下(任意自定义位置也可)执行如下命令拉取overleaf-toolkit代码:
$ git clone https://github.com/overleaf/toolkit.git ./overleaf-toolkit
进入 .\overleaf-toolkit文件夹:
$ cd ./overleaf-toolkit
执行 $ ls -l 来检查文件夹的目录结构,正常情况下,文件夹内容如下所示:
bin
CHANGELOG.md
config
data
doc
lib
LICENSE
README.md
运行如下命令来初始化配置文件,会在 config 文件夹中创建默认的配置文件:
$ bin/init
打开config文件夹中的overleaf.rc文件,按照需要修改如下行:
# 如果只在本机器上使用而不与局域网中的其他用户共享,保持 127.0.0.1即可
# 如果局域网中的其它用户需要访问该机器上的overleaf,则将其修改为机器在局域网中的ip,如192.168.1.3
OVERLEAF_LISTEN_IP=127.0.0.1
# 默认端口为 80,即http协议的默认端口,如该端口已经被其它进程占用,可以修改成其它端口,在访问时通过ip:端口的格式访问,如 192.168.1.3:23456
OVERLEAF_PORT=80
打开config文件夹中的variables.env文件,按照需要修改如下行(该文件不做任何修改也可以使用):
# 删除开头的#和空格以启用该行的配置
# 该部分为显示在overleaf首页的信息
# OVERLEAF_SITE_URL=http://overleaf.example.com
# OVERLEAF_NAV_TITLE=Our Overleaf Instance
# OVERLEAF_HEADER_IMAGE_URL=http://somewhere.com/mylogo.png
# OVERLEAF_ADMIN_EMAIL=support@example.com
# OVERLEAF_LEFT_FOOTER='[{"text": "Contact your support team", "url": "mailto:support@example.com"}]'
# OVERLEAF_RIGHT_FOOTER='[{"text": "Hello, I am on the Right"}]'
# OVERLEAF_EMAIL_FROM_ADDRESS=team@example.com
# OVERLEAF_EMAIL_AWS_SES_ACCESS_KEY_ID=
# OVERLEAF_EMAIL_AWS_SES_SECRET_KEY=
# 按需求配置邮箱服务,可以在注册新用户时自动发送邮件到用户邮箱
# OVERLEAF_EMAIL_SMTP_HOST=smtp.example.com
# OVERLEAF_EMAIL_SMTP_PORT=587
# OVERLEAF_EMAIL_SMTP_SECURE=false
# OVERLEAF_EMAIL_SMTP_USER=
# OVERLEAF_EMAIL_SMTP_PASS=
# OVERLEAF_EMAIL_SMTP_NAME=
# OVERLEAF_EMAIL_SMTP_LOGGER=false
# OVERLEAF_EMAIL_SMTP_TLS_REJECT_UNAUTH=true
# OVERLEAF_EMAIL_SMTP_IGNORE_TLS=false
# OVERLEAF_CUSTOM_EMAIL_FOOTER=This system is run by department x
执行如下命令初始化并启动docker服务
$ bin/up
此时会启动docker容器组,终端中会不断输出日志,当只有mongo的日志不断输出时,在浏览器中输入 ip:端口 来访问overleaf(如果端口为80,则只输入ip即可),此时能看到overleaf的登录页面就算基本搭建成功啦!
在浏览器中输入http://[ip]/launchpad(如:192.268.1.3/launchpad)后可以进入管理员账户的注册页面,输入邮箱和密码后即可登录并管理站点和用户,恭喜搭建完成!
在终端中按下 Ctrl+C 来结束当前的docker服务,然后重新执行 bin/start 在后台运行overleaf的docker容器
$ bin/start
安装完整的texlive镜像
由于overleaf-toolkit默认拉取的sharelatex镜像中只包含了部分latex宏包,为了有更好的使用体验,我们需要手动安装完整的镜像。命令如下:
# 修改为清华源(可选,也可以使用代理在官方源下载)
tlmgr option repository https://mirrors.tuna.tsinghua.edu.cn/CTAN/systems/texlive/tlnet
# 拉取完整latex
docker exec sharelatex tlmgr install scheme-full
常见问题与解决方案
docker无法正常拉取镜像
绝大多数情况都是由于网络原因,可以通过两种方式来解决,第一更换docker源为国内镜像,第二是为docker配置代理(推荐)。在Windows中,Docker Desktop默认使用系统代理;在Linux中,docker作为守护进程运行,无法直接使用用户的代理变量,需要通过下面的方式进行:
创建并编辑代理配置,创建一个名为 http-proxy.conf 的配置文件,用于定义代理环境变量。
创建配置文件
sudo nano /etc/systemd/system/docker.service.d/http-proxy.conf
将以下内容粘贴到文件中,并替换为您实际的代理IP和端口:
# HTTP 代理
Environment="HTTP_PROXY=http://192.168.1.5:8888"
# HTTPS 代理(如果代理支持 HTTPS,请配置)
Environment="HTTPS PROXY=http://192.168.1.5:8888"
# 无需走代理的地址(通常是 Docker 内部网络、本地地址、局域网段)
Environment="No_PRoxY=localhost,127.0.0.1 ::1,192.168.0.0/16,10.0.0.0/8"
# 注意: NO PROXY 配置非常重要,它确保 Docker 容器之间的通信以及对本地 Docker 注册表的访问不会通过代理。
添加完配置文件后执行如下命令重启docker服务:
sudo systemctl daemon-reload
sudo systemctl restart docker
sharelatex容器中无法正常下载texlive的包
仍然是网络问题,要么换源要么在容器内部配置代理
Mongo无法正常连接/Mongo容器状态为Unhealthy/Sharelatex容器无法正常启动
极有可能与”./overleaf-toolkit/lib/docker-compose.mongo.yml”中的healthycheck的test脚本有关,将该文件的内容修改如下:
---
services:
mongo:
restart: always
image: "${MONGO_DOCKER_IMAGE}"
command: "${MONGO_ARGS}"
container_name: mongo
volumes:
- "${MONGO_DATA_PATH}:/data/db"
expose:
- 27017
healthcheck:
test: ["CMD", "mongosh", "--eval", "db.adminCommand('ping').ok"]
interval: 10s
timeout: 10s
retries: 5
sharelatex:
depends_on:
mongo:
condition: service_healthy
links:
- mongo
