Overleaf 官方的 sharelatex 镜像的 TeX Live 版本可能较旧,无法安装最新的宏包,并且往往只包含了少量的基础宏包。为了方便使用,我们可以自己构建一个使用最新 TeX Live 的镜像,并一次安装全部宏包。下面是自制镜像的过程。

️: 自制镜像需要 40 分钟左右

构建镜像

我们可以使用官方的配置构建新的镜像,或者在官方已经构建好的镜像的基础上重新构建自己的镜像。

如果你和我一样,使用 ARM 架构的芯片,那么你最好使用官方配置构建一个新的镜像。因为官方的 ShareLaTeX 镜像只有 amd64 版本。

使用官方配置构建镜像(推荐)

Overleaf 官方提供了一个仓库 overleaf,该仓库包含了构建 ShareLaTeX 镜像的全部配置文件。不过,该配置只会安装基础宏包套件 scheme-basic。我们需要修改配置文件以安装全部宏包套件 scheme-full

  1. 克隆 overleaf 仓库:

    # 克隆仓库
    git clone https://github.com/overleaf/overleaf.git
    # 进入 overleaf/server-ce 目录
    cd overleaf/server-ce
  2. 修改安装方案为 scheme-full

    # 修改配置文件以使用 scheme-full 套件
    sed -i 's/scheme-basic/scheme-full/g' Dockerfile-base
    # TeX Live 换源(可选)
    sed -i 's@TEXLIVE_MIRROR=.*@TEXLIVE_MIRROR=https://mirrors.ustc.edu.cn/CTAN/systems/texlive/tlnet@g' Dockerfile-base
  3. 安装依赖:

    (可选)在 server-ce 目录下新建一个目录 fonts,并将你需要用到的字体拷贝进来,然后在 Dockerfile 合适的位置添加如下命令:

    ADD server-ce/fonts/ /usr/local/share/fonts/

    在上一条命令的下面添加如下命令,以安装宏包依赖:

    RUN ln -s /usr/local/texlive/2024/texmf-var/fonts/conf/texlive-fontconfig.conf /etc/fonts/conf.d/09-texlive.conf && \
    fc-cache -fv && \
    apt-get update && \
    apt-get install -y inkscape python3-pygments && \
    echo "shell_escape = t" >> /usr/local/texlive/2024/texmf.cnf
    • 记得将路径中的 2024 改为你当前最新版使用的年份

    • 你也可以在 APT 安装命令中添加 Windows 字体包 ttf-mscorefonts-installer

    • 提示:在使用 APT 安装软件包时你可能想要换源

  4. 构建镜像

    make

    构建之后你会获得一个自己版本的 sharelatex/sharelatex:latest 镜像。为了方便后面使用我们最好重新给它设置一个名字:

    docker tag sharelatex/sharelatex:latest xxx/sharelatex:5.0.3

    xxx 替换为你喜欢的名字。版本号可以随意设置,不过要和之后运行 Overleaf 时 toolkit/config/version 中的版本号一致。

在官方镜像的基础上构建

新建一个 Dockerfile:

FROM sharelatex/sharelatex:5.0.3

# 拷贝字体文件。把你需要用到的字体放到 fonts 文件夹
ADD fonts/ /usr/local/share/fonts/ # 更新 TeX Live
RUN cd /tmp \
&& tlmgr path remove \
&& mv /usr/local/texlive/2023 /usr/local/texlive/2024 \
&& wget https://mirror.ctan.org/systems/texlive/tlnet/update-tlmgr-latest.sh \
&& export PATH="/usr/local/texlive/2024/bin/x86_64-linux:$PATH" \
&& sh update-tlmgr-latest.sh -- --upgrade \
&& tlmgr update --self --all \
&& tlmgr install scheme-full \
&& luaotfload-tool -fu \
&& tlmgr path add \
&& ln -s /usr/local/texlive/2024/texmf-var/fonts/conf/texlive-fontconfig.conf /etc/fonts/conf.d/09-texlive.conf \
&& fc-cache -fv # 安装依赖
RUN apt-get update && \
apt-get install -y inkscape python3-pygments && \
echo "shell_escape = t" >> /usr/local/texlive/2024/texmf.cnf EXPOSE 80 ENTRYPOINT ["/sbin/my_init"]
  • 记得将所有路径中的 2024 改为你当前最新版使用的年份

  • 提示:在使用 APT 安装软件包时你可能想要换源

如果需要设置 TeX Live 镜像源,可以在上面配置中添加:

&& tlmgr option repository https://mirrors.ustc.edu.cn/CTAN/systems/texlive/tlnet \

即:

RUN cd /tmp \
...
&& tlmgr option repository https://mirrors.ustc.edu.cn/CTAN/systems/texlive/tlnet && \
# 添加到 tlmgr update 之上
&& tlmgr update --self --all \
...

编译

docker build . --tag xxx/sharelatex:5.0.3

xxx 替换为你喜欢的名字。版本号可以随意设置,不过要和之后运行 Overleaf 时 toolkit/config/version 中的版本号一致。

启动 ShareLaTeX

  1. 克隆 toolkit 仓库并初始化:

    git clone https://github.com/overleaf/toolkit.git
    cd toolkit
    bin/init # 初始化
  2. 检查 ShareLaTeX 版本,打开 config/version,检查其中的版本号和你之前构建的镜像的版本号是否一致。

  3. ShareLaTeX 的启动脚本检测环境变量 OVERLEAF_IMAGE_NAME 来确定要使用的 ShareLaTeX 镜像。因此启动 ShareLaTeX 时需要将 OVERLEAF_IMAGE_NAME 变量设为你编译的镜像,然后再运行 start 脚本:

    OVERLEAF_IMAGE_NAME=xxx/sharelatex bin/start

    或者你嫌麻烦,可以直接在启动脚本中加入环境变量 OVERLEAF_IMAGE_NAME。编辑 bin/docker-compose

    #! /usr/bin/env bash
    # shellcheck source-path=.. # 加入下面这行
    OVERLEAF_IMAGE_NAME=xxx/sharelatex set -euo pipefail

    然后重新运行 bin/up,之后再用 bin/start 启动。

参考:实践自部署 Overleaf

相关阅读:本地部署 Overleaf 服务

自制 ShareLaTeX 镜像的更多相关文章

  1. Docker自制CentOS镜像

    系统环境:CentOS 7.3 将yum源切换到阿里源 可以直接写成一个脚本 #!/bin/sh mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos ...

  2. docker 自制alpine-lnp镜像

    简单粗暴点吧 jenkins 镜像下载:docker pull jenkins:alpine dockfile 原地址:https://gist.github.com/phith0n/373cc078 ...

  3. 自制tomcat镜像

    1.编写dockerfile FROM centos MAINTAINER raygift@qq.com # 安装vim RUN yum -y install vim net-tools ENV BA ...

  4. CentOS下febootstrap自制Docker的CentOS6.6和7.1 Docker镜像

    docker image centos febootstrap CentOS 6.6和7.1 Docker自制CentOS镜像 安装: ? 1 yum -y install febootstrap 添 ...

  5. docker核心概念(镜像、容器、仓库)及基本操作

    概要 docker是一种linux容器技术.容器有效的将由单个操作系统挂管理的资源划分到孤立的组中,以便更好的在组之间平衡有冲突的资源使用需求.可简单理解为一种沙盒 .每个容器内运行一个应用,不同的容 ...

  6. Docker实战(一)之使用Docker镜像

    镜像是Docker三大核心概念中最为重要的,自Docker诞生之日起“镜像”就是相关社区最为热门的关键字. Docker运行容器前需要本地存在对应的镜像,如果镜像没有保存至本地,Docker会尝试先从 ...

  7. ARM架构下的Docker环境,OpenJDK官方没有8版本镜像,如何完美解决?

    为什么需要ARM架构下的OpenJDK8的Docker镜像? 对现有的Java应用,之前一直运行在x86处理器环境下,编译和运行都是JDK8,如今在树莓派的Docker环境运行(或者其他ARM架构电脑 ...

  8. docker images

    docker images 介绍 镜像是动态的容器的静态表示,包括容器所要运行的应用代码以及运行时的配置.Docker镜像包括一个或者多个只读层(read-only layers),因此,镜像一旦被创 ...

  9. Docker 的另外两个话题: DockerHub 和 容器网络

    关注公众号,大家可以在公众号后台回复“博客园”,免费获得作者 Java 知识体系/面试必看资料. Hello,大家好,我是子悠,作为本周的小编昨天已经跟大家介绍过自己了,今天就让我们继续学习江南一点雨 ...

  10. 【论文阅读】Where Is My Mirror?

    Where Is My Mirror?(ICCV2019收录) 作者: 论文链接: https://arxiv.org/pdf/1908.09101.pdf 1.  研究背景 目前存在的计算机视觉任务 ...

随机推荐

  1. 深度解读昇腾CANN多流并行技术,提高硬件资源利用率

    本文分享自华为云社区<深度解读昇腾CANN多流并行技术,提高硬件资源利用率>,作者:昇腾CANN. 随着人工智能应用日益成熟,文本.图片.音频.视频等非结构化数据的处理需求呈指数级增长,数 ...

  2. java实现微信登录

    前言 上一篇做了php的微信登录,所以也总结一下Java的微信授权登录并获取用户信息这个功能的开发流程. 配置 配置什么的就不多说了,详细的配置可以直接前往我上一篇查看. https://www.cn ...

  3. Qt实现汽车仪表盘

    在UI界面显示中,仪表盘的应用相对比较广泛,经常用于显示速度值,电压电流值等等,最终实现效果如下动态图片(文末提供给源工程下载): 主要包含以下绘制步骤: 绘制画布 /* * 绘制画布 */ void ...

  4. nodejs-mime类型

    mime是一个互联网标准,通过设定它就可以设定文件在浏览器的打开方式. mime使用方法: 使用mime模块查询文件的MIME类型: mime.getType('/path/to/file.txt') ...

  5. C# 日期帮助类

    using System; using System.Data; namespace Erp.Ship.Tool { [Serializable] public enum DateInterval { ...

  6. 可视化—AntV G6实现节点连线及展开收缩分组

    AntV 是蚂蚁金服全新一代数据可视化解决方案,主要包含数据驱动的高交互可视化图形语法G2,专注解决流程与关系分析的图表库 G6.适于对性能.体积.扩展性要求严苛的场景. demo使用数字模拟真实的节 ...

  7. 微信小程序热门选题

    一.大体实现思路 微信小程序,现在是非常热门的,基于微信生态开发的.现在很多计算机毕业的同学,都会选择微信小程序作为毕业设计 小程序端通常都是展示数据给用户去看的,大多数情况下,这些数据不是写死的,而 ...

  8. oeasy教您玩转vim - 67 - # 批量替换

    ​ 批量替换 回忆上次 我们可以用vimdiff快速的比较文件 这很实用!!! 实用的一些跳转方式 遍历所有的修改change ]c 下一条修改 [c 上一条修改 遍历所有的函数method ]m 下 ...

  9. JavaScript小面试~数组相关的方法和运用(学习笔记)

    1,稀疏数组 稀疏数组是指数组中的某个下标未给出值或某个下标的值被删除.例如: let arrayOne=['xiaozi',,12,,true,23] let arrayTwo=[1,2,3,3,4 ...

  10. C# 开发技巧 轻松监控方法执行耗时

    前言 MethodTimer.Fody 是一个功能强大的库,可以用于测量 .NET 应用程序中的方法的执行时间.允许你在不修改代码的情况下,自动地测量和记录方法的执行时间. 这个工具是基于.NET的 ...