事情的起因
最近因为某些原因要重新搭建一个 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.rc
,config/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 创建的容器,一般来说会创建三个容器分别是: sharelatex
,mongo
以及 redis
,其中 mongo
和 redis
都是给 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 基本上已经搭建完毕,赶紧开启你的科研之路吧!