事情的起因

最近因为某些原因要重新搭建一个 Overleaf 的应用,所以按照去年的《Linux系统搭建Overleaf / ShareLatex并使用Nginx代理教程》 进行了搭建,发现文章中有若干处遗漏,并且使用该教程以及无法成功搭建 Overleaf 5.0版本,所以在此更新一版 Linux 快速搭建 Overleaf 5.0 并且附中文字体及完整 TexLive 的安装教程。

机器配置

这里我们选用阿里云的一台 2-2 的云服务器进行搭建,需要购买的可以走本人链接选购云服务器经济型e实例/2核2G/3M/40g,新人专享渠道特惠价只要99元一年!通过链接购买更享新人红包双重优惠!

系统我们选用的是 Ubuntu 22.04(熟悉我的都知道我最爱用这系统了),然后我们先来安装一下一些基础的东西。

安装环境并初始化

我们首先先来安装一下 docker 以及 docker-compose

apt update
apt install -y docker-composer

之后我们可以来下载 Overleaf 官方提供的 Toolkit:

git clone https://github.com/overleaf/toolkit.git ./overleaf-toolkit
cd ./overleaf-toolkit

我们可以使用 bin/init 指令来进行初始化的配置文件生成,运行完该指令之后应该会创建出三个配置文件,分别是:config/overleaf.rcconfig/variables.env 以及 config/version,分别对应 Overleaf 容器的配置, docker 的环境配置以及选用的 Overleaf 的 docker 镜像。

修改配置文件

之后我们需要来修改我们的配置文件,首先是 overleaf.rc 中我们需要注意的几个配置:

  • OVERLEAF_PORT 指的是运行 Overleaf 的容器要选择曝露的端口,默认是 80 端口但如果有要使用 Nginx 反向代理的需求的话则需要自选一个端口(不常用的就行);
  • SIBLING_CONTAINERS_ENABLED 这个配置真的巨坑,默认的话是 true 但如果没有购买官方的 Server Pro 的话请直接修改成 false,因为这个功能很大程度上依赖于官方提供给 Server Pro 用户的镜像,如果不调到 false 的话极有可能出现编译失败的情况;

其他的则可以按需进行修改,详细可参考官方 Github 的这个页面。之后我们再来配置我们的 variables.env,这里主要都是一些 Overleaf 程序上的配置,如 OVERLEAF_NAV_TITLE 等就是网页上导航栏的标题,不修改也不会出大问题。

version 文件一般初次部署默认不用修改;

开始部署

Overleaf 官方提供了一个 docker-compose 的整合工具给用户直接进行使用,所以我们直接在 overleaf-toolkit 目录下运行:

bin/up

即可调用 docker-compose 帮我们创建所需要的容器,并且可以看到输出了很多的日志信息,这个时候我们可以直接通过日志信息或者到浏览器访问 http://服务器IP:Overleaf端口 查看是否运行成功。如果运行成功的话应该能够正常访问,我们就可以按下 Ctrl+C 终止运行,并且使用命令:

bin/start

让程序进入后台长期运行,之后我们可以通过指令:

docker stats

来看我们的 toolkit 创建的容器,一般来说会创建三个容器分别是: sharelatexmongo 以及 redis ,其中 mongoredis 都是给 sharelatex 提供服务的不能删掉。

安装完整版 TexLive(TexLive-full)

在进行这一步之前,如果你的 Overleaf 已经存有数据,请务必备份!这一步不知道为何在安装的时候系统的 IO 会飙升到近乎满载的状态,极容易造成系统卡死等情况,若发现系统卡住无法运行请首先尝试重启后继续运行上一条指令,或尝试重装并寻求官方协助!

我们首先先运行:

docker exec -it sharelatex bash

直接进入容器环境,之后我们可以首先将容器的源更新为阿里云的镜像源,详细可以参考 阿里云 Ubuntu 镜像,同时设置我们的 TexLive Manager 的源也改成阿里云的源:

tlmgr option repository https://mirrors.aliyun.com/CTAN/systems/texlive/tlnet

详细可参考 阿里云 CTAN 镜像。之后我们直接运行:

tlmgr install scheme-full

进行安装。此步骤需要的时间较长,并且容易造成 IO 飙升,容易使得 shell 的连接中断,最好使用 screen 防止更新中断或出现问题(本人踩坑5+次的经验),详细使用 screen 指令的教程可参考:《Linux下Screen的使用教程》。

待得安装完成后,可运行 exit 退出容器的 shell,并运行:

sharelatex sharelatex/sharelatex:[version]-with-texlive-full
echo [version]-with-texlive-full > config/version

将容器刻录成镜像,防止重启重建时需要再次重新安装 TexLive 完整版,上述指令中的 [version] 可先运行:

cat config/version

进行查看。至此完整版 TexLive 即安装完成,如有任何疑问或安装途中遇到任何问题,可参考 官方升级 TexLive 文档

新增中文字体

我们一般安装的 Overleaf 容器中是没有中文字体的,从而造成了 Overleaf 也无法编译中文字体到 pdf 中,所以我们首先需要向我们的容器添加中文字体。我们可以通过导入我们自己电脑中的中文字体做到这一步。

首先我们需要将我们电脑的文字文件上传到服务器当中,这一步我们可以通过 SFTP 办到,这里假设我们上传的文字文件压缩包为 winfonts.tar.gz,我们可以打开 shell 到上传路径并运行:

docker cp winfonts.tar.gz sharelatex:/overleaf

winfonts.tar.gz 复制到我们 sharelatex 容器中的 /overleaf 目录中,之后我们进入容器并且安装必须要的包:

docker exec -it share
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 镜像。

XeLaTex 修复

由于官方提供的 XeLaTex 镜像是破损的(或者说是不能用的),这个在官方的 Github Issue 中也有提到,所以我们需要进入容器对其进行修复:

docker exec -it sharelatex bash
apt update
apt install -y texlive-xetex texlive-latex-extra texlive-science

上述指令为通过 Github Issue 中的用户提供,安装完成后可参考安装完整 TexLive 的部分刻录一个新的 docker 镜像。

Nginx 反向代理 Overleaf

这一个部分没有什么不同的,可以直接参考去年的《Linux系统搭建Overleaf / ShareLatex并使用Nginx代理教程》进行操作,官方也有提供 Nginx HTTPS 反向代理配置文档 供用户参考。

至此 Overleaf 基本上已经搭建完毕,赶紧开启你的科研之路吧!