跳转至

在虚拟机上搭建 overleaf

概述

因为学校的 overleaf 无法通过 latex 代码定位到 pdf 位置。因此想在本地搭建一个 latex 环境,而如果在 windows 里安装 texlive+ 配置 VS code 比较麻烦,且以后重装系统又无法保留,因此考虑在 ubuntu 虚拟机里安装。

这里考虑同样搭建一个 overleaf,毕竟在主机里打开浏览器直接就能用就很方便,且界面也更美观。

overleaf 采用了 docker 进行部署,因此需要先安装 docker。


更新

在 virtualbox 虚拟机搭建后发现存在性能问题。以编译计组指导书为例,每次修改编译需要 1 分钟,并且经常出现编译 2-3 分钟然后失败的情况。

在查阅 wsl 性能比较后,发现 wsl2 的性能已经比较好了,有些场合接近原生 linux 的性能。参考Windows 10 May 2020 Performance For WSL vs. WSL2

于是补充了在 wsl2 上搭建的内容。

docker 安装

  1. 安装 docker

    使用 sh 脚本一键安装,参考DaoCloud

    非 root 用户还需要添加到 docker 组

    ```bash
    

    sudo usermod -aG docker your-user ```

  2. 安装 docker compose

    使用 sh 脚本一键安装,参考DaoCloud

  3. docker 镜像加速

    sudo mkdir -p /etc/docker
    sudo tee /etc/docker/daemon.json <<-'EOF'
    {
      "registry-mirrors": ["https://<your-key>.mirror.aliyuncs.com"]
    }
    EOF
    sudo systemctl daemon-reload
    sudo systemctl restart docker
    

    参考阿里云容器镜像服务

overleaf 安装

参考overleaf:toolkit,主要是使用了 docker compose 自动安装管理多个容器。

overleaf 安装 package

刚安装好的 overleaf 缺少了 ctex 等很多包,直接编译计组指导书会提示缺少**.sty 文件,所以需要手动安装包。

overleaf 底层的 tex 编译器采用的是 texlive 发行版,采用 tlmgr 管理包。

  1. 查看 docker 容器

      ~ sudo docker ps 
    CONTAINER ID        IMAGE                         COMMAND                  CREATED             STATUS                    PORTS                NAMES
    046949b8197a        sharelatex/sharelatex:2.4.1   "/sbin/my_init"          21 hours ago        Up 12 minutes             0.0.0.0:80->80/tcp   sharelatex
    0076877c7906        mongo:3.6                     "docker-entrypoint.s…"   21 hours ago        Up 12 minutes (healthy)   27017/tcp            mongo
    755cc370c29b        redis:5.0                     "docker-entrypoint.s…"   21 hours ago        Up 12 minutes             6379/tcp             redis
    

    其中 sharelatex 为 overleaf 应用,另外两个为数据库。

  2. 进入 sharelatex 容器

      ~ sudo docker exec -it 0469 /bin/bash
    root@046949b8197a:/# 
    
  3. 使用 tlmgr 软件

    可以通过tlmgr install <package>来安装各种包,但是效率太低(需要安装几十个包),因此采用一个特殊的包texliveonfly来自动安装需要的包。参考[1]

    #更换 CTAN 源为清华源,帮助:https://mirrors.tuna.tsinghua.edu.cn/help/CTAN/
    tlmgr option repository https://mirrors.tuna.tsinghua.edu.cn/CTAN/systems/texlive/tlnet
    
    tlmgr update --self
    tlmgr install texliveonfly
    
  4. 使用 texliveonfly 自动安装包

    #找到 overleaf 中需要编译的 tex 文件
    root@046949b8197a:/# find /var -name elegantbook-cn.tex
    /var/lib/sharelatex/data/compiles/5f805cb6723b610077ad52ad-5f805b95723b610077ad52a4/elegantbook-cn.tex
    /var/lib/sharelatex/data/compiles/5f817d1ba9660e0077353294-5f805b95723b610077ad52a4/elegantbook-cn.tex
    
    # 切换到该目录后
    texliveonfly elegantbook-cn.tex #默认使用 pdflatex
    ... #省略输出
    texliveonfly elegantbook-cn.tex -c xelatex #指定使用 xelatex 编译器
    

使用 wsl2 搭建

安装 wsl2

参考[2]

安装 Docker Desktop

参考[3]

配置源

setting->docker engine,同样是编辑 daemon.json,在 registry-mirrors 中添加镜像源

安装 overleaf

过程同上,只是在 wsl 中操作

参考

  1. Auto Package download for TeXLive
  2. microsoft doc: wsl install
  3. docker doc: windows install docker