维护与开发手册
约 5047 字大约 17 分钟
2025-03-13
本文是面向Overleaf LaTeX协作平台的维护与开发手册,本人在无数次日日夜夜的尝试和知识积累中编出,参考了大量网络资料,管理员和有志于自行运营Overleaf的开发者可以参考本文。
硬件要求
https://github.com/overleaf/overleaf/wiki/Hardware-Requirements
当为运行 Overleaf 配置硬件时,需要考虑的主要因素是同时进行编译的用户数量。
最小安装
基本操作需要至少2个核心和3GB内存,适用于大约 5 个并发用户。对于并发使用较少或在高负载使用时可以接受较长的编译时间的大型组,这个最低要求也足够了。
规模化
通常情况下,为了提供高且一致的服务水平,每增加 5-10 个并发用户,应向最小安装添加 1 个 CPU 核心和 1GB 内存。这仅应作为参考,因为诸如典型文档的大小(较大的文档会消耗更多编译资源)、用户编译的频率以及在高负载期间对较长的编译时间的容忍度等因素都会影响所需配置的水平。
中国科学院大学 32核心64GB 低频服务器已足够1万人同时在线。又例如:如果正在运行一个针对 300 个总用户的 Overleaf Server Pro 安装,并且通常预计有 30-60 个用户同时编译文档,8GB 内存和 7 个核心(5 核心+5GB+基础 2 核心和 3GB)应足以保证用户获得持续的高水平服务。
考虑到我校实际,重医Overleaf CE 4核 8GB 铂金8358虚拟机,可以满足100人同时在线,后续有需要可升级。
例如:为了说明大规模部署的硬件要求,一个针对 1000 个总用户的 Server Pro 安装已成功部署,使用的是一台配备两个 4 核心处理器和 32GB 系统内存的服务器。在过去一年的使用中,这已经满足了团队的需求。
对象存储的考虑
当文件系统无法跟上负载时,应用程序会因为过多的阻塞 I/O 操作而停滞。这些停滞可能导致基于 Redis 的锁溢出,进而可能导致项目数据损坏。建议使用兼容 S3 的对象存储(项导OSS/腾讯云COS)。
反过来,S3 的缓慢性能只会影响文件的上传/下载,这只会导致与 S3 提供商的开放连接数量增加,而不会影响应用程序的其他行为。
CPU
LaTeX 是一个单线程程序,这意味着它一次只能利用一个 CPU 核心。CPU 也是编译文档时的主要限制因素。
因此,CPU 单核性能越快,编译文档的速度就越快。只有当您尝试编译的文档数量超过您拥有的空闲 CPU 核心数量时,更多的核心才会有所帮助。
安装Docker CE
参考计算机必学工具 安装Docker CE
主容器为Ubuntu24.04 LTS noble(输入lsb_release -a
查看),首先配置Ubuntu的软件镜像源(需要sudo权限)。而从 Ubuntu 24.04 开始,Ubuntu 的软件源配置文件变更为 DEB822 格式,路径为 /etc/apt/sources.list.d/ubuntu.sources
echo 'Types: deb
URIs: https://mirrors.cernet.edu.cn/ubuntu
Suites: noble noble-updates noble-backports
Components: main restricted universe multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
# Types: deb-src
# URIs: https://mirrors.cernet.edu.cn/ubuntu
# Suites: noble noble-updates noble-backports
# Components: main restricted universe multiverse
# Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
# 以下安全更新软件源包含了官方源与镜像站配置,如有需要可自行修改注释切换
# Types: deb
# URIs: https://mirrors.cernet.edu.cn/ubuntu
# Suites: noble-security
# Components: main restricted universe multiverse
# Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
# # Types: deb-src
# # URIs: https://mirrors.cernet.edu.cn/ubuntu
# # Suites: noble-security
# # Components: main restricted universe multiverse
# # Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
Types: deb
URIs: http://security.ubuntu.com/ubuntu/
Suites: noble-security
Components: main restricted universe multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
# Types: deb-src
# URIs: http://security.ubuntu.com/ubuntu/
# Suites: noble-security
# Components: main restricted universe multiverse
# Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
# 预发布软件源,不建议启用
# Types: deb
# URIs: https://mirrors.cernet.edu.cn/ubuntu
# Suites: noble-proposed
# Components: main restricted universe multiverse
# Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
# # Types: deb-src
# # URIs: https://mirrors.cernet.edu.cn/ubuntu
# # Suites: noble-proposed
# # Components: main restricted universe multiverse
# # Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
' | tee /etc/apt/sources.list.d/ubuntu.sources
echo '# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.cernet.edu.cn/ubuntu/ noble main restricted universe multiverse
# deb-src https://mirrors.cernet.edu.cn/ubuntu/ noble main restricted universe multiverse
deb https://mirrors.cernet.edu.cn/ubuntu/ noble-updates main restricted universe multiverse
# deb-src https://mirrors.cernet.edu.cn/ubuntu/ noble-updates main restricted universe multiverse
deb https://mirrors.cernet.edu.cn/ubuntu/ noble-backports main restricted universe multiverse
# deb-src https://mirrors.cernet.edu.cn/ubuntu/ noble-backports main restricted universe multiverse
# 以下安全更新软件源包含了官方源与镜像站配置,如有需要可自行修改注释切换
# deb https://mirrors.cernet.edu.cn/ubuntu/ noble-security main restricted universe multiverse
# # deb-src https://mirrors.cernet.edu.cn/ubuntu/ noble-security main restricted universe multiverse
deb http://security.ubuntu.com/ubuntu/ noble-security main restricted universe multiverse
# deb-src http://security.ubuntu.com/ubuntu/ noble-security main restricted universe multiverse
# 预发布软件源,不建议启用
# deb https://mirrors.cernet.edu.cn/ubuntu/ noble-proposed main restricted universe multiverse
# # deb-src https://mirrors.cernet.edu.cn/ubuntu/ noble-proposed main restricted universe multiverse
' | tee /etc/apt/sources.list
其他软件源配置参考:MirrorZ help Ubuntu
导入Overleaf Tookit
git克隆仓库
git clone https://github.com/overleaf/toolkit.git ./overleaf-toolkit
cd overleaf-toolkit
初始化项目
bin/init
初次启动容器,包含mongodb、redis、sharelatex
bin/up
等待拉取完成所有镜像
启动完成后显示下图即为成功
停止容器
按ctrl + C
查看占用
docker stats
整个业务系统占用不超过2GB
名称 | CPU使用率 | 内存使用 | 内存限制 | 内存使用率 | 网络接收 | 网络发送 | 块IO读 | 块IO写 | PIDS |
---|---|---|---|---|---|---|---|---|---|
sharelatex | 4.98% | 612.1MiB | 1.795GiB | 33.31% | 36.7MB | 20.9MB | 2.86GB | 3.69MB | 158 |
redis | 0.14% | 2.883MiB | 1.795GiB | 0.16% | 1.25MB | 1.5MB | 214MB | 1.88MB | 6 |
mongo | 41.33% | 80.73MiB | 1.795GiB | 4.39% | 8.9MB | 35.2MB | 4.06GB | 112MB | 118 |
配置Overleaf
重要
在更改 overleaf.rc 或 variables.env 中的任何内容后,通过运行 bin/stop
,然后执行 bin/up
来重新创建 Docker 容器。
cd config
进入配置文件夹
overleaf.rc
#### Overleaf RC ####
PROJECT_NAME=
# Sharelatex container
# Uncomment the OVERLEAF_IMAGE_NAME variable to use a user-defined image.
# OVERLEAF_IMAGE_NAME=
OVERLEAF_DATA_PATH=
SERVER_PRO=
OVERLEAF_LISTEN_IP=
OVERLEAF_PORT=
# Sibling Containers
SIBLING_CONTAINERS_ENABLED=
DOCKER_SOCKET_PATH=
# Mongo configuration
MONGO_ENABLED=
MONGO_DATA_PATH=
MONGO_IMAGE=
MONGO_VERSION=
# Redis configuration
REDIS_ENABLED=
REDIS_DATA_PATH=
REDIS_IMAGE=
REDIS_AOF_PERSISTENCE=
# Git-bridge configuration (Server Pro only)
GIT_BRIDGE_ENABLED=
GIT_BRIDGE_DATA_PATH=
# TLS proxy configuration (optional)
# See documentation in doc/tls-proxy.md
NGINX_ENABLED=
NGINX_CONFIG_PATH=
NGINX_HTTP_PORT=
# Replace these IP addresses with the external IP address of your host
NGINX_HTTP_LISTEN_IP=
NGINX_TLS_LISTEN_IP=
TLS_PRIVATE_KEY_PATH=
TLS_CERTIFICATE_PATH=
TLS_PORT=
# In Air-gapped setups, skip pulling images
# PULL_BEFORE_UPGRADE=
# SIBLING_CONTAINERS_PULL=
varibles.env
OVERLEAF_APP_NAME=
ENABLED_LINKED_FILE_TYPES=
# Enables Thumbnail generation using ImageMagick
ENABLE_CONVERSIONS=
# Disables email confirmation requirement
EMAIL_CONFIRMATION_DISABLED=
## Nginx
# NGINX_WORKER_PROCESSES=
# NGINX_WORKER_CONNECTIONS=
# Set for TLS via nginx-proxy
# OVERLEAF_BEHIND_PROXY=
# OVERLEAF_SECURE_COOKIE=
OVERLEAF_SITE_URL=
OVERLEAF_NAV_TITLE=
OVERLEAF_HEADER_IMAGE_URL=
OVERLEAF_ADMIN_EMAIL=
OVERLEAF_LEFT_FOOTER=
OVERLEAF_RIGHT_FOOTER=
OVERLEAF_EMAIL_FROM_ADDRESS=
# OVERLEAF_EMAIL_AWS_SES_ACCESS_KEY_ID=
# OVERLEAF_EMAIL_AWS_SES_SECRET_KEY=
OVERLEAF_EMAIL_SMTP_HOST=
OVERLEAF_EMAIL_SMTP_PORT=
OVERLEAF_EMAIL_SMTP_SECURE=
OVERLEAF_EMAIL_SMTP_USER=
OVERLEAF_EMAIL_SMTP_PASS=
# OVERLEAF_EMAIL_SMTP_NAME=
# OVERLEAF_EMAIL_SMTP_LOGGER=
# OVERLEAF_EMAIL_SMTP_TLS_REJECT_UNAUTH=
# OVERLEAF_EMAIL_SMTP_IGNORE_TLS=
# OVERLEAF_CUSTOM_EMAIL_FOOTER=
################
## Server Pro ##
################
EXTERNAL_AUTH=none
# OVERLEAF_LDAP_URL=
# OVERLEAF_LDAP_SEARCH_BASE=
# OVERLEAF_LDAP_SEARCH_FILTER=
# OVERLEAF_LDAP_BIND_DN=
# OVERLEAF_LDAP_BIND_CREDENTIALS=
# OVERLEAF_LDAP_EMAIL_ATT=
# OVERLEAF_LDAP_NAME_ATT=
# OVERLEAF_LDAP_LAST_NAME_ATT=
# OVERLEAF_LDAP_UPDATE_USER_DETAILS_ON_LOGIN=
# OVERLEAF_TEMPLATES_USER_ID=
# OVERLEAF_NEW_PROJECT_TEMPLATE_LINKS=
# TEX_LIVE_DOCKER_IMAGE=
# ALL_TEX_LIVE_DOCKER_IMAGES=
# OVERLEAF_PROXY_LEARN=
# S3
# Docs: https://github.com/overleaf/overleaf/wiki/S3
# ## Enable the s3 backend for filestore
# OVERLEAF_FILESTORE_BACKEND=s3
# ## Enable S3 backend for history
# OVERLEAF_HISTORY_BACKEND=s3
# #
# # Pick one of the tw
项目解读
微服务架构
- Overleaf 容器:将 Overleaf 主软件以一组微服务的形式运行,由 runit 管理。
- MongoDB 和 Redis 容器:Overleaf 使用的外部数据库,默认设置会为这两个数据库配置容器。
- Overleaf 容器内部的关键目录:
- /etc/service/:保存微服务的初始化文件。
- /etc/overleaf/settings.js:微服务的统一设置文件。
- /var/log/overleaf/:每个微服务的日志。
- /var/www/overleaf/:保存各种微服务的代码。
- /var/lib/overleaf/:持久化数据的挂载点。
升级TeX Live
为了节省带宽,Overleaf 镜像仅包含 TeX Live 的最小安装。您可以在 Overleaf 容器中使用 tlmgr 命令安装更多包或升级到完整的 TeX Live 安装。
进入 Overleaf 容器
要在 Overleaf 容器中启动 shell,请运行
bin/shell
您将看到一个类似以下提示:
root@309b192d4030:/#
确定当前 TeX Live 版本
TeX Live 每年大约在 4 月份发布。使用 tlmgr 的步骤取决于您是否使用当前版本或较旧版本。您可以使用 tlmgr --version
检查正在运行的 TeX Live 版本。例如,此安装运行 TeX Live 2025:
配置CTAN镜像
CTAN, The Comprehensive TeX Archive Network
综合 TEX 档案网络(CTAN)是围绕 TEX 的各种材料的中心场所。大多数包都是免费的,可以立即下载和使用。
在全球网络CTAN内,可以配置CTAN镜像以加速下载,国内(含香港自治区)共有17个镜像站点。
关于CTAN https://ctan.org/
CTAN镜像站点https://ctan.org/mirrors
高校CERNET镜像站联盟配置(校内推荐)
重医镜像站已同步
tlmgr option repository https://mirrors.cernet.edu.cn/CTAN/systems/texlive/tlnet
阿里云镜像(校外推荐)
tlmgr option repository https://mirrors.aliyun.com/CTAN/systems/texlive/tlnet
此步骤需要的时间较长,并且容易造成 IO 飙升,容易使得 shell 的连接中断,最好使用 screen
防止更新中断或出现问题,参考Linux 下Screen使用
安装完整TeX Live
使用以下命令拉取完整功能TeX Live
tlmgr install scheme-full
容器刻录镜像
将容器刻录成镜像,防止docker重启重建时需要再次重新安装 TexLive 完整版
刚刚所做的更改已更改了 sharelatex 容器,但这些更改是临时的——如果 Compose 重新创建容器,例如在更新配置时,它们将会丢失。
运行 exit(或 ctrl + A + D) 退出容器的 shell,并运行下面的命令检查版本
cat config/version
输出的值作为下面的 [version]
使用 docker commit
持久化
docker commit sharelatex sharelatex/sharelatex:[version]
echo [version] > config/version
例如上面的version是5.4.0,加一个最小版本号到5.4.1即可,当然怎么命名都可以,按照a.b.c这种格式即可,可以参考 版本命名规范
docker commit sharelatex sharelatex/sharelatex:5.4.1
echo 5.4.1 > config/version
重要
这一步要刻录大概6GB的镜像,请耐心等待。
检查是否生效
cat config/version
至此完整版 TexLive 即安装完成,提交更改后,相应地更新 config/version 。然后运行 bin/up ,以重新创建容器。
升级时运行 bin/upgrade
需要重复这个步骤
添加字体及中文支持
我们一般安装的 Overleaf 容器中是没有中文字体的,从而造成了 Overleaf 也无法编译中文字体到 pdf 中,所以我们首先需要向我们的容器添加中文字体。我们可以通过导入我们自己电脑中的中文字体做到这一步。
手动上传自定义字体
首先我们需要将我们电脑的文字文件上传到服务器当中,这一步我们可以通过 SFTP 办到,这里假设我们上传的文字文件压缩包为 winfonts.tar.gz,我们可以打开 shell 到上传路径并运行:
docker cp winfonts.tar.gz sharelatex:/overleaf
apt安装中文字体
进入容器(先cd到overleaf toolkit目录)
bin/shell
安装字体
apt update
apt install -y latex-cjk-all texlive-lang-chinese texlive-lang-english
apt install -y xfonts-wqy
这一步同样有可能出现 IO 飙升的状况,请随时注意!之后我们对 winfonts.tar.gz 进行解压并且移动到系统目录中:
tar -zxvf winfonts.tar.gz
mv winfonts /usr/share/fonts/
最后我们到 usr/share/fonts/winfonts 目录中开始安装我们的字体:
cd /usr/share/fonts/winfonts
mkfontscale
mkfontdir
fc-cache -fv
安装完成后我们可以通过指令:
fc-list :lang=zh-cn
查看已经安装的中文字体。至此中文字体安装已经完结,可参考上一个部分刻录一个新的 docker 镜像。
docker commit sharelatex sharelatex/sharelatex:[version]
echo [version] > config/version
XeLaTeX 修复
由于官方提供的 XeLaTeX 镜像是破损的(或者说是不能用的),这个在官方的 Github Issue 中也有提到,所以我们需要进入容器对其进行修复:
bin/shell
apt update
apt install -y texlive-xetex texlive-latex-extra texlive-science
上述指令为通过 Github Issue 中的用户提供,安装完成后可参考安装完整 TexLive 的部分刻录一个新的 docker 镜像。
docker commit sharelatex sharelatex/sharelatex:[version]
echo [version] > config/version
docker commit sharelatex sharelatex/sharelatex:5.4.2
echo 5.4.2 > config/version
安装Times New Romans
Ubuntu 提供了一个包含常见 Windows 字体的包,称为 msttcorefonts,其中就包含 "Times New Roman"。
进入主容器
bin/shell
安装 msttcorefonts 包:
sudo apt-get install msttcorefonts
安装过程中,你可能会看到一个弹窗,提示你接受 End User License Agreement(最终用户许可协议)。按 enter 键输入 "yes" 即可。 刷新字体缓存:安装完成后,刷新字体缓存,以确保系统能够识别新安装的字体:
fc-cache -fv
验证安装
你可以使用以下命令来验证 "Times New Roman" 是否已成功安装:
fc-list | grep "Times New Roman"
出现下面图片中的内容即为成功
提交新容器镜像
docker commit sharelatex sharelatex/sharelatex:[version]
echo [version] > config/version
docker commit sharelatex sharelatex/sharelatex:5.4.3
echo V5.4.3 > config/version
删除旧版本镜像
镜像(image)占用空间较大,如果你不需要之前的镜像了,使用下面的命令删除: 查看 IMAGE ID
docker images
复制 IMAGE ID
docker rmi [IMAGE ID]
维护策略
为了制作一致的备份,在备份过程运行期间停止用户产生新数据是强制性的。
管理员前往后台 https://overleaf.example.com/admin
提供关闭编辑器和断开用户连接的按钮。关闭编辑器将阻止用户打开新的编辑会话,但会保持现有会话打开。断开用户连接将在页面刷新前有 10 秒的宽限期。
需要先关闭编辑器,然后断开所有用户连接。
数据持久化
Overleaf Toolkit 需要存储持久化数据,例如编译 LaTeX 项目所需的文件以及 MongoDB 数据库的内容。这是通过将主机机器上的几个目录挂载到 docker 容器中,并将数据写入这些目录来实现的。
Overleaf 容器需要一个目录来存储与 LaTeX 编译相关的数据。该目录在 config/overleaf.rc 中的 OVERLEAF_DATA_PATH
变量中设置。
#### Overleaf RC ####
PROJECT_NAME=
# Sharelatex container
# Uncomment the OVERLEAF_IMAGE_NAME variable to use a user-defined image.
# OVERLEAF_IMAGE_NAME=
OVERLEAF_DATA_PATH=
SERVER_PRO=
OVERLEAF_LISTEN_IP=
OVERLEAF_PORT=
# Sibling Containers
SIBLING_CONTAINERS_ENABLED=
DOCKER_SOCKET_PATH=
# Mongo configuration
MONGO_ENABLED=
MONGO_DATA_PATH=
MONGO_IMAGE=
MONGO_VERSION=
# Redis configuration
REDIS_ENABLED=
REDIS_DATA_PATH=
REDIS_IMAGE=
REDIS_AOF_PERSISTENCE=
# Git-bridge configuration (Server Pro only)
GIT_BRIDGE_ENABLED=
GIT_BRIDGE_DATA_PATH=
# TLS proxy configuration (optional)
# See documentation in doc/tls-proxy.md
NGINX_ENABLED=
NGINX_CONFIG_PATH=
NGINX_HTTP_PORT=
# Replace these IP addresses with the external IP address of your host
NGINX_HTTP_LISTEN_IP=
NGINX_TLS_LISTEN_IP=
TLS_PRIVATE_KEY_PATH=
TLS_CERTIFICATE_PATH=
TLS_PORT=
# In Air-gapped setups, skip pulling images
# PULL_BEFORE_UPGRADE=
# SIBLING_CONTAINERS_PULL=
备份技巧
https://github.com/overleaf/overleaf/wiki/Data-and-Backups
Mongo 数据库:用户和项目数据存储在此。
Redis:用作数据的高性能缓存,主要存储项目版和协作数据。
文件系统:存储项目文件(如图片),存储完整的项目历史数据,同时在项目编译期间也用作临时磁盘缓存。
备份需要位于与 Overleaf 运行的服务器不同的服务器上,理想情况下在完全不同的位置。运行多个 mongodb 实例也不算是备份,因为它不能防止数据损坏。
备份MongoDB:
mongodb 附带一个名为 mongodump
的工具,该工具将以安全备份格式导出数据集。
进入mongo容器:
bin/mongo
考虑到每天产生的文件资源可能较多,建议凌晨低负载时备份 config/
和 data/
,CentOS/RHEL示例脚本如下:
sudo vim /usr/local/bin/backup-overleaf.sh
#!/bin/bash
# 备份存储目录
BACKUP_DIR="/opt/backups/overleaf" # 替换为你的备份目录
SOURCE_DIRS="/opt/overleaf-toolkit/config/ /opt/overleaf-toolkit/data/" # 要备份的目录(用空格分隔)
# 创建备份文件名(格式:backup-YYYY-MM-DD.tar.gz)
BACKUP_FILE="$BACKUP_DIR/backup-$(date +'%Y-%m-%d').tar.gz"
# 创建备份目录(如果不存在)
mkdir -p "$BACKUP_DIR"
# 执行备份(使用 tar + gzip 压缩)
tar -czf "$BACKUP_FILE" $SOURCE_DIRS
# 可选:删除 30 天前的旧备份
find "$BACKUP_DIR" -name "backup-*.tar.gz" -mtime +30 -delete
# 记录日志
echo "[$(date)] Backup completed: $BACKUP_FILE" >> /var/log/backup-overleaf.log
设置定时任务
sudo crontab -e
在文件末尾添加:
0 1 * * * /bin/bash /usr/local/bin/backup-overleaf.sh
说明
0 1 * * *:每天凌晨 1 点执行。
/bin/bash /usr/local/bin/backup-overleaf.sh:运行备份脚本。
测试备份脚本
/usr/local/bin/backup-overleaf.sh
检查是否生成 backup-YYYY-MM-DD.tar.gz:
ls -lh /opt/backups/overleaf/
查看备份日志
cat /var/log/backup-overleaf.log
查看cron日志
sudo tail -f /var/log/cron
设置日志轮转(可选)
避免 /var/log/backup-overleaf.log 过大:
sudo nano /etc/logrotate.d/backup-overleaf
写入
/var/log/backup-overleaf.log {
daily
rotate 7
missingok
notifempty
compress
delaycompress
}
手动测试
sudo logrotate -vf /etc/logrotate.d/backup-overleaf
配置备份邮件通知(可选)
sudo yum install mailx
在脚本末尾添加:
echo "Backup completed: $BACKUP_FILE" | mail -s "Backup Status" admin@example.com
远程备份(可选)
使用 rsync 备份到远程服务器
重医镜像站rsync增量备份
rsync -avz /var/backups/overleaf/ user@remote-server:/backups/
恢复数据备份
tar -xzf /var/backups/overleaf/backup-yyyy-mm-dd.tar.gz -C /path/to/restore
配置备份
使用 bin/backup-config
脚本备份配置文件,推荐配置文件每月备份一次。例如:
bin/backup-config -m zip ~/overleaf-config-backup-202504.zip
容器微服务日志
Overleaf 由多个不同的进程组成,这些进程都将日志文件写入
/var/log/overleaf/
如果任何进程发生错误,它将被写入相应的日志文件,例如 /var/log/overleaf/web.log
查看多个微服务的日志:
bin/logs -f filestore docstore web clsi
可以使用以下命令查看谁何时加载了项目
grep "join project request" /var/log/overleaf/real-time.log
检查配置项
bin/doctor
安全设置
用户组权限
https://github.com/overleaf/overleaf/wiki/Creating-and-managing-users
shell终端创建用户/管理员,如果该电子邮件地址的用户不存在,则会创建该用户并使其成为管理员用户。在命令输出中,将获得一个访问 URL,可以在该 URL 上设置此用户的密码并首次登录。
可以使用相同的脚本创建更多(管理员)用户。
bin/docker-compose exec sharelatex /bin/bash -ce "cd /overleaf/services/web && node modules/server-ce-scripts/scripts/create-user --admin --email=joe@example.com"
删除类似
bin/docker-compose exec sharelatex /bin/bash -ce "cd /overleaf/services/web && node modules/server-ce-scripts/scripts/delete-user.mjs --email=joe@example.com"
密码强度设置
https://github.com/overleaf/overleaf/wiki/Password-restrictions
# 密码所需的最小长度
OVERLEAF_PASSWORD_VALIDATION_MIN_LENGTH
# 密码所需的最大长度
OVERLEAF_PASSWORD_VALIDATION_MAX_LENGTH
# 密码规则集
OVERLEAF_PASSWORD_VALIDATION_PATTERN
# abc123 – 密码需要 3 个字母和 3 个数字,且至少 6 位长
# aA – 密码需要包含大小写字母,且长度为 2 位
# ab$3 – 必须包含字母、数字和符号,且长度为 4 位
容器网络隔离
docker进程最好设置单独的容器网络,避免不必要的网段、端口冲突
docker network create \
--driver=bridge \
--subnet=192.168.100.0/24 \
--gateway=192.168.100.1 \
my_custom_network
更多信息请查看 Docker容器网络
界面美化设置
https://github.com/overleaf/overleaf/wiki/Configuring-Headers,-Footers-&-Logo
网站标题
OVERLEAF_NAV_TITLE=My Overleaf Instance
标题导航链接
[
{
"text": "Some link",
"url": "http://example.com/somelink",
"class": "subdued",
"only_when_logged_out": true
},
{
"text": "Help",
"class": "subdued"
"dropdown": [
{
"text": "Documentation",
"url": "/learn"
},
{
"text": "Contact Admin",
"url": "http://example.com/contact"
}
]
}
]
OVERLEAF_HEADER_EXTRAS=[{"text":"Somelink","url":"http://example.com/somelink","class":"subdued","only_when_logged_out":true},{"text":"Help","class":"subdued","dropdown":[{"text":"Documentation","url":"/learn"},{"text":"ContactAdmin","url":"http://example.com/contact"}]}]
页脚
[
{
"text": "Powered by <a href=\"https://www.overleaf.com\">Overleaf</a> © 2024"
},{
"text": "Another page I want to link to can be found <a href=\"here\">here</a>"
}
]
OVERLEAF_LEFT_FOOTER=[{"text":"Powered by <a href=\"https://www.overleaf.com\">Overleaf</a> © 2024"},{"text":"Another page I want to link to can be found <a href=\"here\">here</a>"}]
Logo
OVERLEAF_HEADER_IMAGE_URL=https://mysite.somewhere.com/img/logo.png
标题导航链接
[
{
"text": "Some link",
"url": "http://example.com/somelink",
"class": "subdued",
"only_when_logged_out": true
},
{
"text": "Help",
"class": "subdued"
"dropdown": [
{
"text": "Documentation",
"url": "/learn"
},
{
"text": "Contact Admin",
"url": "http://example.com/contact"
}
]
}
]
# toolkit/variables.env
OVERLEAF_HEADER_EXTRAS=[{"text":"Somelink","url":"http://example.com/somelink","class":"subdued","only_when_logged_out":true},{"text":"Help","class":"subdued","dropdown":[{"text":"Documentation","url":"/learn"},{"text":"ContactAdmin","url":"http://example.com/contact"}]}]
多语言支持
OVERLEAF_LANG_DOMAIN_MAPPING = '
{
"www": {
"lngCode": "en",
"url": "http:\/\/www.mysite.com"
},
"fr": {
"lngCode": "fr",
"url": "http:\/\/fr.mysite.com"
},
"de": {
"lngCode": "de",
"url": "http:\/\/de.mysite.com"
},
"sv": {
"lngCode": "sv",
"url": "http:\/\/sv.mysite.com"
},
"zh": {
"lngCode": "zh-CN",
"url": "http:\/\/zh.mysite.com"
},
"es": {
"lngCode": "es",
"url": "http:\/\/es.mysite.com"
}
}'
故障排除
官方指南
贡献者
更新日志
febfb
-docs(begin.md): update interaction instructions for comments section于