自制 ShareLaTeX 镜像
Overleaf 官方的 sharelatex 镜像的 TeX Live 版本可能较旧,无法安装最新的宏包,并且往往只包含了少量的基础宏包。为了方便使用,我们可以自己构建一个使用最新 TeX Live 的镜像,并一次安装全部宏包。下面是自制镜像的过程。
️: 自制镜像需要 40 分钟左右
构建镜像
我们可以使用官方的配置构建新的镜像,或者在官方已经构建好的镜像的基础上重新构建自己的镜像。
如果你和我一样,使用 ARM 架构的芯片,那么你最好使用官方配置构建一个新的镜像。因为官方的 ShareLaTeX 镜像只有 amd64 版本。
使用官方配置构建镜像(推荐)
Overleaf 官方提供了一个仓库 overleaf,该仓库包含了构建 ShareLaTeX 镜像的全部配置文件。不过,该配置只会安装基础宏包套件 scheme-basic。我们需要修改配置文件以安装全部宏包套件 scheme-full。
克隆
overleaf仓库:# 克隆仓库
git clone https://github.com/overleaf/overleaf.git
# 进入 overleaf/server-ce 目录
cd overleaf/server-ce
修改安装方案为
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
安装依赖:
(可选)在
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 安装软件包时你可能想要换源
构建镜像
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
克隆
toolkit仓库并初始化:git clone https://github.com/overleaf/toolkit.git
cd toolkit
bin/init # 初始化
检查 ShareLaTeX 版本,打开
config/version,检查其中的版本号和你之前构建的镜像的版本号是否一致。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 镜像的更多相关文章
- Docker自制CentOS镜像
系统环境:CentOS 7.3 将yum源切换到阿里源 可以直接写成一个脚本 #!/bin/sh mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos ...
- docker 自制alpine-lnp镜像
简单粗暴点吧 jenkins 镜像下载:docker pull jenkins:alpine dockfile 原地址:https://gist.github.com/phith0n/373cc078 ...
- 自制tomcat镜像
1.编写dockerfile FROM centos MAINTAINER raygift@qq.com # 安装vim RUN yum -y install vim net-tools ENV BA ...
- CentOS下febootstrap自制Docker的CentOS6.6和7.1 Docker镜像
docker image centos febootstrap CentOS 6.6和7.1 Docker自制CentOS镜像 安装: ? 1 yum -y install febootstrap 添 ...
- docker核心概念(镜像、容器、仓库)及基本操作
概要 docker是一种linux容器技术.容器有效的将由单个操作系统挂管理的资源划分到孤立的组中,以便更好的在组之间平衡有冲突的资源使用需求.可简单理解为一种沙盒 .每个容器内运行一个应用,不同的容 ...
- Docker实战(一)之使用Docker镜像
镜像是Docker三大核心概念中最为重要的,自Docker诞生之日起“镜像”就是相关社区最为热门的关键字. Docker运行容器前需要本地存在对应的镜像,如果镜像没有保存至本地,Docker会尝试先从 ...
- ARM架构下的Docker环境,OpenJDK官方没有8版本镜像,如何完美解决?
为什么需要ARM架构下的OpenJDK8的Docker镜像? 对现有的Java应用,之前一直运行在x86处理器环境下,编译和运行都是JDK8,如今在树莓派的Docker环境运行(或者其他ARM架构电脑 ...
- docker images
docker images 介绍 镜像是动态的容器的静态表示,包括容器所要运行的应用代码以及运行时的配置.Docker镜像包括一个或者多个只读层(read-only layers),因此,镜像一旦被创 ...
- Docker 的另外两个话题: DockerHub 和 容器网络
关注公众号,大家可以在公众号后台回复“博客园”,免费获得作者 Java 知识体系/面试必看资料. Hello,大家好,我是子悠,作为本周的小编昨天已经跟大家介绍过自己了,今天就让我们继续学习江南一点雨 ...
- 【论文阅读】Where Is My Mirror?
Where Is My Mirror?(ICCV2019收录) 作者: 论文链接: https://arxiv.org/pdf/1908.09101.pdf 1. 研究背景 目前存在的计算机视觉任务 ...
随机推荐
- k8s网络原理之flannel
首先当你创建一个k8s集群后一般会存在三种IP分别是,Pod IP,Node IP,Cluster IP 其中一个Cluster IP之下包含多个Node IP,而一个Node IP之下又包含多个Po ...
- 千万别忽视基础!十张图带你一步步理解Java内存结构!
作为一个Java程序员,在日常的开发中,不必像C/C++程序员那样,为每一个内存的分配而操心,JVM会替我们进行自动的内存分配和回收,方便我们开发.但是一旦发生内存泄漏或者内存溢出,如果对Java内存 ...
- SpringBoot打包maven仓库里面没有的包
SpringBoot打包maven仓库里面没有的包 在遇到一些自定义的jar包,maven仓库里面没有这些包,但是发布线上时我们还是只想发布一个jar包,也就是我们想要把第三方包打在最后生成的大jar ...
- 我跟你说@RefreshScope跟Spring事件监听一起用有坑!
本文记录一下我在 Spring 自带的事件监听类添加 @RefreshScope 注解时遇到的坑,原本这两个东西单独使用是各自安好,但当大家将它们组合在一起时,会发现我们的事件监听代码被重复执行.希望 ...
- Golang 切片作为函数参数传递的陷阱与解答
作者:林冠宏 / 指尖下的幽灵.转载者,请: 务必标明出处. GitHub : https://github.com/af913337456/ 出版的书籍: <1.0-区块链DApp开发实战&g ...
- 洛谷P1747
这个题被坑麻了,题目居然不给棋盘的范围,评论区居然有人说棋盘是无限大的,我想说的是如果真是这样那么第9个点答案应该是2而不是3,这个棋盘绝对是有大小的. #include<iostream> ...
- 简单的字符串处理函数_C语言
字符串数组 // Code file created by C Code Develop #include "stdio.h" #include "stdlib.h&qu ...
- 机器学习:详解多任务学习(Multi-task learning)
详解多任务学习 在迁移学习中,步骤是串行的,从任务\(A\)里学习只是然后迁移到任务\(B\).在多任务学习中,是同时开始学习的,试图让单个神经网络同时做几件事情,然后希望这里每个任务都能帮到其他所有 ...
- Java编程指南:高级技巧解析 - Excel单元格样式的编程设置
最新技术资源(建议收藏) https://www.grapecity.com.cn/resources/ 前言 在Java开发中,处理Excel文件是一项常见的任务.在处理Excel文件时,经常需要对 ...
- innodb存储引擎了解
mysql常用的存储引擎分为innodb和myisam 其中innodb具有支持事务,执行行级锁,支持MVCC,外键,自动增长列,崩溃恢复等特性.并且mysql在5.5.5之后是数据的默认存储引擎 文 ...