Featured image of post 自建在线LaTeX编译预览服务:Overleaf开源社区版

自建在线LaTeX编译预览服务:Overleaf开源社区版

使用Overleaf开源社区版搭建自己的在线LaTeX编译预览服务

缘起

之前在和别人合作写作业或者论文时,一直使用Overleaf来协作编写LaTeX文档。虽然不如在本地编辑器(如VS Code)上可定制性强,但跟别人协作起来还是挺方便的。在写博士论文时,为了使用Git同步功能,我购买了一年的学生订阅。由于毕业后使用频率降低,我就没有续费了。最近我需要重新编译一下之前的博士论文,才发现Overleaf免费用户的编译时间是有限制的,由于博士论文比较大,编译时间超过了限制,导致我无法编译成功。

我之前也尝试过使用Overleaf的开源社区版搭建在线LaTeX服务,但搭好后还是使用Overleaf的官方服务较多,就没有维护自己搭建的服务。这次由于需要重新编译博士论文,我就试着在自己搭建的Overleaf上编译,但发现缺少了很多宏包,导致无法编译。于是我决定重新搭建一个Overleaf开源社区版服务,并安装完整版的TeX Live,以便能够编译所有的LaTeX文档。

Overleaf简介

Overleaf是一个在线的LaTeX编辑器,支持多人协作编辑,提供了丰富的模板和宏包,可以在线编译LaTeX文档。Overleaf有免费版和付费版,免费版有一些限制,如编译时间限制、项目数限制等。Overleaf的付费版提供了更多的功能,如无限编译时间、无限项目数、Git同步等。

Overleaf的开源社区版是Overleaf的开源版本,可以在自己的服务器上搭建一个类似Overleaf的在线LaTeX编辑器。Overleaf开源社区版提供了与Overleaf官方服务相似的功能,如在线编译LaTeX文档、多人协作编辑、模板和宏包支持等。但是遗憾的是,Overleaf社区版也不支持集成Git同步功能。如果想要使用Git同步以及一些其他功能,需要购买Overleaf Server Pro版。这里我只需要Overleaf社区版就够了。

前提

  • Docker和Docker Compose
  • 域名(二级域名即可)

Overleaf社区版安装

我们可以使用Docker来方便快捷地搭建Overleaf社区版服务。这里有两种安装方式:一种是直接使用Overleaf社区版仓库里提供的docker-compose.yml文件,另一种是使用Overleaf官方提供的工具箱。Overleaf官方推荐使用第二种方式,但这里两种方式都介绍一下。

方法一:使用docker-compose.yml文件安装

可以在Overleaf社区版仓库中找到docker-compose.yml文件,下载到本地,然后使用Docker Compose启动服务。

这里可能需要根据自己的实际情况修改docker-compose.yml文件,如修改端口、数据卷路径等。修改完成后,使用以下命令启动服务:

1
docker-compose up -d

参考:Overleaf社区版快速开始指南

方法二:使用Overleaf工具箱安装

Overleaf官方提供了一个工具箱,包装了一些常用的docker命令,可以初始化、启动、停止、诊断、升级Overleaf服务。虽然我觉得相比直接使用docker-compose.yml,这个工具箱使部署docker的流程更复杂了,但这个工具箱的确提供了更多更灵活的定制选项。

使用这个工具箱部署Overleaf社区版服务,可以参考Overleaf社区版工具箱文档。简单来讲,有以下几步:

  1. 下载工具箱:

    1
    
    git clone https://github.com/overleaf/toolkit.git
    
  2. 进入工具箱目录:

    1
    
    cd toolkit
    
  3. 初始化安装配置:

    1
    
    bin/init
    

    运行此命令,将在当前目录下生成一个config文件夹,里面包含了三个配置文件:

    • overleaf.rc:Overleaf配置文件。用户可以在这个文件中配置Overleaf的一些参数,如端口、数据卷路径等。
    • variables.env:环境变量配置文件
    • version:选择Overleaf版本。注意在5.0.0版本之后,Overleaf将原来的ShareLaTeX商标替换为Overleaf商标,所以如果环境变量配置文件中如果使用OVERLEAF前缀的变量,需要选择5.0.0之后的版本。
  4. 在修改完配置文件后,运行以下命令启动服务(可能需要sudo提升权限):

    1
    
    bin/up
    

    这个命令会以命令行debug模式启动服务,在运行后可以看到服务的输出日志。如果想要停止服务,可以按Ctrl+C

    如果想要以后台模式启动服务,可以使用以下命令(可能需要sudo提升权限):

    1
    
    bin/up -d
    
  5. 如果想要停止服务,可以使用以下命令(可能需要sudo提升权限):

    1
    
    bin/stop
    

配置Nginx反向代理

Overleaf社区版的docker-compose.yml文件中有一个nginx容器,如果使用Overleaf工具箱,在overleaf.rc配置文件中也可以配置Nginx。如果需要TSL/SSL加密,可以使用在初始化时使用bin/init --tls命令。这样会在config目录中生成一个nginx文件夹,里面包含了Nginx的配置文件和作为示例的SSL证书。

但是由于我之前在服务器上已经部署了单独的Nginx服务来管理所有的网站,所以我选择使用单独的Nginx服务来反向代理Overleaf服务。具体过程可参见个人网站的建立过程(二):使用Hugo框架搭建个人网站

升级TeX Live

Overleaf的docker镜像中自带了一个基础版本的TeX Live,但是这个版本可能不包含所有的宏包。如果需要编译一些特殊的LaTeX文档,可能需要安装完整版的TeX Live。可参考Overleaf工具箱文档中升级Tex Live的文档。主要步骤如下:

安装完整版TeX Live

  1. 使用如下命令进入Overleaf容器:

    1
    
    docker exec -it sharelatex bash
    
  2. 查看当前TeX Live版本:

    1
    
    tlmgr --version
    
  3. 更新TeX Live:

    1
    
    tlmgr install scheme-full
    

    我在执行这个命令时遇到了如下问题:

    1
    2
    3
    4
    
    tlmgr: Local TeX Live (2023) is older than remote repository (2024).
    Cross release updates are only supported with
    update-tlmgr-latest(.sh/.exe) --update
    See https://tug.org/texlive/upgrade.html for details.
    

    这是因为TeX Live的版本不同,可以使用如下命令为Tex Live指定合适的版本:

    1
    
    tlmgr option repository https://ftp.math.utah.edu/pub/tex/historic/systems/texlive/2023/tlnet-final
    

    关于TeX Live的历史版本仓库,可以参考这里

    在指定了合适的版本后,再次执行更新命令:

    1
    
    tlmgr install scheme-full
    

    不出意外的话,这个命令会下载并安装完整版的TeX Live。这将会安装超过4000个宏包,可能需要一段时间。

  4. 添加路径:

    在安装完成后,需要使用如下命令添加路径:

    1
    
    tlmgr path add
    

    如果不执行这个命令,在Overleaf中编译LaTeX文档时,可能会出现无法编译EPS图片等问题。

保存更改到镜像

做完上述更改后,升级的TeX Live只会保存在当前的容器中,如果容器被删除,这些更改也会丢失。如果想要将这些更改保存到镜像中并在之后创建容器时使用,可以执行下面的操作:

  1. 使用如下命令(可能需要sudo提升权限)更新镜像:

    1
    
    docker commit sharelatex sharelatex/sharelatex:with-texlive-full
    
  2. 然后可以在config目录中添加一个docker-compose.override.yml文件,在之后创建容器时指定使用新的镜像:

    1
    2
    3
    4
    5
    
    ---
    version: '2.2'
    services:
        sharelatex:
            image: sharelatex/sharelatex:with-texlive-full
    
  3. 停止并删除之前的容器,然后重新创建容器(可能需要sudo提升权限):

    1
    2
    3
    
    bin/stop
    bin/docker-compose rm -f sharelatex
    bin/up -d
    
comments powered by Disqus