Docker部署Overleaf包含中文字体与全套texlive镜像
如今
Overleaf
已推出国内域名访问,速度较之前有很大的提升。但考虑到有些同学为了私密与方便性,因此有了自己搭建开源Overleaf服务的打算。请注意开源项目Overleaf不支持开放注册(需管理员账号来申请注册issue#461)与跟踪评论功能。该项目支持Docker容器化部署,安装过程比较容易。本文记录了在实验室内网环境下利用官方提供的Overleaf Toolkit的docker-compose搭建Overleaf服务的过程,同时采用了基于官方开源搭建的镜像,包含了中文字体与全套texlive软件系统。该文章最后更新为2023年1月5日,请注意技术文章的时效性。
Overleaf 部署过程目录
- 准备工作
- 安装并配置 Overleaf
- Overleaf Toolkit 部署
- 拉取Overleaf Toolkit 工具包
- 初始化配置
- 修改启动镜像
- 启动服务
- 创建管理员帐户
- 反向代理域名服务
- 迁移与备份
- 更多
准备工作
Overleaf 依赖于以下程序:
- docker
- docker-compose
建议安装最新版本的 docker 和 docker-compose。
Docker环境的安装详见官方文档进行安装,然后继续安装compose安装文档安装docker-compose组件,这里不再赘述。1
安装并配置 Overleaf
Overleaf Toolkit 部署
拉取Overleaf Toolkit 工具包
首先,将这个工具包 git 存储库克隆到你的主机上(以下命令已重命名为overleaf-toolkit文件夹):
git clone https://github.com/overleaf/toolkit.git ./overleaf-toolkit
接下来,让我们进入此目录:
cd ./overleaf-toolkit
对于本文章的其余部分,我们将假定你将从此目录运行所有后续命令。2
初始化配置
通过运行以下命令创建本地配置:
bin/init
bin是该工具包提供的一组脚本,这些脚本封装起来,并为你处理大部分的细节。
查看配置目录下的内容config/
ls config
config目录下会生成以下三个文件:
overleaf.rc
variables.env
version
三个配置文件的作用:
- overleaf.rc:顶级配置文件
- variables.env:加载到 docker 容器中的环境变量
- version:使用的 docker 镜像版本
配置内容可根据后续需求修改
其中需要注意的是在overleaf.rc
文件中,可以修改其服务端口:
# Sharelatex container
SHARELATEX_DATA_PATH=data/sharelatex
SERVER_PRO=false
SHARELATEX_LISTEN_IP=127.0.0.1
SHARELATEX_PORT=9000 #将该行修改为你所需服务端口,默认为80端口
修改启动镜像
考虑到官方提供的镜像是不完全texlive程序及不支持中文字体,在这里我基于官方开源的 overleaf 镜像搭建了自己的镜像,wrm244/sharelatex:with-texlive-full,如果对 docker 比较熟悉的同学可以跳过该步骤自行拉取官方镜像然后再进行配置,当然官方镜像不包含中文字体支持,可参考文章配置。
进入overleaf-toolkit
文件夹下的 lib
目录
cd lib
修改docker-compose.base.yml
文件以下内容
vim docker-compose.base.yml
将源文件的
image: "${IMAGE}"
改为image: wrm244/sharelatex:with-texlive-full
改这一行即可,以下为修改后文件内容
---
version: '2.2'
services:sharelatex:restart: alwaysimage: wrm244/sharelatex:with-texlive-fullcontainer_name: sharelatexvolumes:- "${SHARELATEX_DATA_PATH}:/var/lib/sharelatex"ports:- "${SHARELATEX_LISTEN_IP:-127.0.0.1}:${SHARELATEX_PORT:-80}:80"environment:SHARELATEX_MONGO_URL: "${MONGO_URL}"SHARELATEX_REDIS_HOST: "${REDIS_HOST}"REDIS_HOST: "${REDIS_HOST}"env_file: ../config/variables.env
保存退出该文件,重新回到上一级overleaf-toolkit
目录
cd ..
也可以修改
config
目录下overleaf.rc
配置文件赋值为SHARELATEX_IMAGE=wrm244/sharelatex:with-texlive-full
启动服务
让我们启动 docker 服务:
bin/up
bin是该工具包提供的一组脚本,这些脚本封装起来,并为你处理大部分的细节。
现在会看到来自 docker 容器的一些日志输出,表示正在拉取镜像,后续会自动运行容器。如果在终端上按下Ctrl+c,服务将关闭。您可以通过命令bin/start
来重新启动它们(不附加到日志输出)。
创建管理员帐户
在浏览器中,打开 http://localhost:服务端口/launchpad 后会看到注册界面。 使用要用作管理员帐户的凭据填写,然后点击“注册”。
服务端口默认为80,即http://localhost/launchpad 缺省条件下即可访问。当然你也可以在
./config
目录下overleaf.rc
文件中修改所需端口。
然后单击链接以转到登录页面(http://localhost:服务端口/login)。 登录后,你将被带到欢迎页面。
单击页面底部的绿色按钮以开始使用 Overleaf。
注意:在Overleaf实现中文输出需采用
XeLaTex
编译,在页面右上角可进行设置
反向代理域名服务
有些同学有域名访问需求,在overleaf-toolkit
工具包中自然提供nginx
服务,默认是关闭的。可访问该指导文档进行配置。当然你也可以自行搭建代理服务,这里不再赘述。
迁移与备份
如果是采用overleaf-toolkit
工具包进行部署服务的话,在该overleaf-toolkit
目录下的data
文件夹会映射docker容器的文件,包括sharelatex
redis
mongo
文件夹,备份这几个文件夹即可,在迁移的时候,启动容器前先把文件复制到data
目录下即可恢复数据。
更多
文章采用的docker镜像:wrm244/sharelatex:with-texlive-full
包含了以下中文字体,具体在路径/usr/share/fonts/chinese
下
AGENCYB.TTF FRAMDCN.TTF PER_____.TTF
AGENCYR.TTF framdit.ttf phagspab.ttf
ALGER.TTF framd.ttf phagspa.ttf
ANTQUABI.TTF FrederickatheGreat-Regular.ttf PLAYBILL.TTF
ANTQUAB.TTF FredokaOne-Regular.ttf PoiretOne-Regular.ttf
ANTQUAI.TTF FREESCPT.TTF POORICH.TTF
arialbd.ttf FRSCRIPT.TTF PRISTINA.TTF
arialbi.ttf FTLTLT.TTF RAGE.TTF
ariali.ttf FZSTK.TTF Raleway-Bold.ttf
ARIALNBI.TTF FZXBSJW.TTF Raleway-Regular.ttf
ARIALNB.TTF FZYTK.TTF RAVIE.TTF
ARIALNI.TTF Gabriola.ttf REFSAN.TTF
ARIALN.TTF gadugib.ttf REFSPCL.TTF
arial.ttf gadugi.ttf Roboto-BoldItalic.ttf
ariblk.ttf GARABD.TTF Roboto-Bold.ttf
ARLRDBD.TTF GARAIT.TTF RobotoCondensed-BoldItalic.ttf
Arvo-BoldItalic.ttf GARA.TTF RobotoCondensed-Bold.ttf
Arvo-Bold.ttf georgiab.ttf RobotoCondensed-Italic.ttf
Arvo-Italic.ttf georgiai.ttf RobotoCondensed-Regular.ttf
Arvo-Regular.ttf georgia.ttf Roboto-Italic.ttf
bahnschrift.ttf georgiaz.ttf Roboto-Regular.ttf
BarlowCondensed-Regular.ttf GIGI.TTF RobotoSlab-Bold.ttf
Barrio-Regular.ttf GILBI___.TTF RobotoSlab-Regular.ttf
BASKVILL.TTF GILB____.TTF ROCCB___.TTF
BAUHS93.TTF GILC____.TTF ROCC____.TTF
BELLB.TTF GILI____.TTF ROCKBI.TTF
BELLI.TTF GILLUBCD.TTF ROCKB.TTF
BELL.TTF GILSANUB.TTF ROCKEB.TTF
BERNHC.TTF GIL_____.TTF ROCKI.TTF
BKANT.TTF GLECB.TTF ROCK.TTF
BOD_BI.TTF GlobalMonospace.CompositeFont sarasa-mono-k-bolditalic.ttf
BOD_BLAI.TTF GlobalSansSerif.CompositeFont sarasa-mono-k-bold.ttf
BOD_BLAR.TTF GlobalSerif.CompositeFont sarasa-mono-k-extralightitalic.ttf
BOD_B.TTF GlobalUserInterface.CompositeFont sarasa-mono-k-extralight.ttf
BOD_CBI.TTF GLSNECB.TTF sarasa-mono-k-italic.ttf
BOD_CB.TTF GOTHICBI.TTF sarasa-mono-k-lightitalic.ttf
BOD_CI.TTF GOTHICB.TTF sarasa-mono-k-light.ttf
BOD_CR.TTF GOTHICI.TTF sarasa-mono-k-regular.ttf
BOD_I.TTF GOTHIC.TTF sarasa-mono-k-semibolditalic.ttf
BOD_PSTC.TTF GOUDOSB.TTF sarasa-mono-k-semibold.ttf
BOD_R.TTF GOUDOSI.TTF SCHLBKBI.TTF
BOOKOSBI.TTF GOUDOS.TTF SCHLBKB.TTF
BOOKOSB.TTF GOUDYSTO.TTF SCHLBKI.TTF
BOOKOSI.TTF HARLOWSI.TTF SCRIPTBL.TTF
BOOKOS.TTF HARNGTON.TTF segmdl2.ttf
BRADHITC.TTF HATTEN.TTF segoeprb.ttf
BRITANIC.TTF himalaya.ttf segoepr.ttf
BRLNSB.TTF holomdl2.ttf segoescb.ttf
BRLNSDB.TTF HTOWERTI.TTF segoesc.ttf
BRLNSR.TTF HTOWERT.TTF segoeuib.ttf
BROADW.TTF impact.ttf segoeuii.ttf
BRUSHSCI.TTF IMPRISHA.TTF segoeuil.ttf
BSSYM7.TTF IndieFlower.ttf segoeuisl.ttf
BubblegumSans-Regular.ttf INFROMAN.TTF segoeui.ttf
CabinSketch-Bold.ttf Inkfree.ttf segoeuiz.ttf
CabinSketch-Regular.ttf ITCBLKAD.TTF seguibli.ttf
calibrib.ttf ITCEDSCR.TTF seguibl.ttf
calibrii.ttf ITCKRIST.TTF seguiemj.ttf
calibrili.ttf javatext.ttf seguihis.ttf
calibril.ttf JOKERMAN.TTF seguili.ttf
calibri.ttf JUICE___.TTF seguisbi.ttf
calibriz.ttf JuliusSansOne-Regular.ttf seguisb.ttf
CALIFB.TTF KUNSTLER.TTF seguisli.ttf
CALIFI.TTF l_10646.ttf seguisym.ttf
CALIFR.TTF LATINWD.TTF ShadowsIntoLight.ttf
CALISTBI.TTF LBRITEDI.TTF SHOWG.TTF
CALISTB.TTF LBRITED.TTF simfang.ttf
CALISTI.TTF LBRITEI.TTF simhei.ttf
CALIST.TTF LBRITE.TTF simkai.ttf
cambriab.ttf LCALLIG.TTF SIMLI.TTF
cambriai.ttf LeelaUIb.ttf simsunb.ttf
cambria.ttc LEELAWAD.TTF simsun.ttc
cambriaz.ttf LEELAWDB.TTF SIMYOU.TTF
Candarab.ttf LeelawUI.ttf SitkaB.ttc
Candarai.ttf LeelUIsl.ttf SitkaI.ttc
Candarali.ttf LFAXDI.TTF Sitka.ttc
Candaral.ttf LFAXD.TTF SitkaZ.ttc
Candara.ttf LFAXI.TTF SNAP____.TTF
Candaraz.ttf LFAX.TTF StaticCache.dat
CASTELAR.TTF LHANDW.TTF STCAIYUN.TTF
CENSCBK.TTF Lobster-Regular.ttf STENCIL.TTF
CENTAUR.TTF LSANSDI.TTF STFANGSO.TTF
CENTURY.TTF LSANSD.TTF STHUPO.TTF
CHILLER.TTF LSANSI.TTF STKAITI.TTF
COLONNA.TTF LSANS.TTF STLITI.TTF
Comfortaa-Bold.ttf LTYPEBO.TTF STSONG.TTF
Comfortaa-Regular.ttf LTYPEB.TTF STXIHEI.TTF
comicbd.ttf LTYPEO.TTF STXINGKA.TTF
comici.ttf LTYPE.TTF STXINWEI.TTF
comic.ttf lucon.ttf STZHONGS.TTF
comicz.ttf MAGNETOB.TTF Swkeys1.ttf
consolab.ttf MAIAN.TTF sylfaen.ttf
consolai.ttf malgunbd.ttf symbol.ttf
consola.ttf malgunsl.ttf tahomabd.ttf
consolaz.ttf malgun.ttf tahoma.ttf
constanb.ttf marlett.ttf taileb.ttf
constani.ttf MATURASC.TTF taile.ttf
constan.ttf Megrim.ttf TCBI____.TTF
constanz.ttf micross.ttf TCB_____.TTF
COOPBL.TTF mingliub.ttc TCCB____.TTF
COPRGTB.TTF MISTRAL.TTF TCCEB.TTF
COPRGTL.TTF mmrtextb.ttf TCCM____.TTF
corbelb.ttf mmrtext.ttf TCMI____.TTF
corbeli.ttf MOD20.TTF TCM_____.TTF
corbelli.ttf monbaiti.ttf TEMPSITC.TTF
corbell.ttf Monoton-Regular.ttf timesbd.ttf
corbel.ttf msgothic.ttc timesbi.ttf
corbelz.ttf msjhbd.ttc timesi.ttf
courbd.ttf msjhl.ttc times.ttf
courbi.ttf msjh.ttc trebucbd.ttf
couri.ttf MSUIGHUB.TTF trebucbi.ttf
cour.ttf MSUIGHUR.TTF trebucit.ttf
CURLZ___.TTF msyhbd.ttc trebuc.ttf
Delius-Regular.ttf msyhl.ttc VastShadow-Regular.ttf
Dengb.ttf msyh.ttc verdanab.ttf
Dengl.ttf msyi.ttf verdanai.ttf
Deng.ttf MTCORSVA.TTF verdana.ttf
desktop.ini MTEXTRA.TTF verdanaz.ttf
Dosis-Regular.ttf mvboli.ttf VINERITC.TTF
DroidSerif-BoldItalic.ttf NanumPenScript-Regular.ttf VIVALDII.TTF
DroidSerif-Bold.ttf NIAGENG.TTF VLADIMIR.TTF
DroidSerif-Italic.ttf NIAGSOL.TTF webdings.ttf
DroidSerif.ttf NirmalaB.ttf wingding.ttf
DShirgy4.ttc NirmalaS.ttf WINGDNG2.TTF
DUBAI-BOLD.TTF Nirmala.ttf WINGDNG3.TTF
DUBAI-LIGHT.TTF ntailub.ttf YuGothB.ttc
DUBAI-MEDIUM.TTF ntailu.ttf YuGothL.ttc
DUBAI-REGULAR.TTF OCRAEXT.TTF YuGothM.ttc
ebrimabd.ttf OLDENGL.TTF YuGothR.ttc
ebrima.ttf ONYX.TTF ZillaSlab-Bold.ttf
ELEPHNTI.TTF OpenSans-BoldItalic.ttf ZillaSlab-Regular.ttf
ELEPHNT.TTF OpenSans-Bold.ttf 书法家行楷体.TTF
ENGR.TTF OpenSans-Italic.ttf 仿宋_GB2312.ttf
ERASBD.TTF OpenSans-Regular.ttf 南构周洋字体.ttf
ERASDEMI.TTF OpenSans-Semibold.ttf 南构无边.ttf
ERASLGHT.TTF OUTLOOK.TTF 南构日系楷行.ttf
ERASMD.TTF palabi.ttf 南构玄道硬笔.ttf
FELIXTI.TTF palab.ttf 南构诗韵新隶.ttf
fms_metadata.xml palai.ttf 南构邱见行书.ttf
fonts.dir pala.ttf 南构钟声行书.ttf
fonts.scale PALSCRI.TTF 方正小标宋简体_0.ttf
FORTE.TTF Pangolin-Regular.ttf 日文毛笔行书.ttf
FRABKIT.TTF PAPYRUS.TTF 楷体_GB2312_0.ttf
FRABK.TTF PARCHM.TTF 楷体_GB2312.ttf
FRADMCN.TTF PERBI___.TTF 特太行書.ttc
FRADMIT.TTF PERB____.TTF 蒙纳简行书.otf
FRADM.TTF PERI____.TTF 蒙纳简行楷.otf
FRAHVIT.TTF PERTIBD.TTF
FRAHV.TTF PERTILI.TTF
Get Docker ↩︎
overleaf-toolkit-quick-start-guide ↩︎
Docker部署Overleaf包含中文字体与全套texlive镜像相关推荐
- docker java 中文乱码_java使用awt包在生产环境docker部署时出现中文乱码的处理
描述: 有一个业务是需要后台生成图片,后台使用了Graphics2D类.在docker部署时,图片上的中文变成方块. 解决方案: 百度了一下,发现是生产上的docker容器下没有中文字体,需要在容器里 ...
- 记录一次docker部署tomcat安装GBK字体,容器系统Debian GNU/Linux
记录一次docker部署tomcat安装GBK字体 docker版本号为:Docker version 20.10.6, build 370c289 下载的官方镜像: tomcat:8.5.32 to ...
- Docker容器不识别中文字体问题
概述: 1. 现象: 使用到宋体时:1.1 中文字体不显示 1.2 或者无宋体时docker容器使用默认系统字体,导致字体大小显示不一致 2. 解决: 2.1 获取字体:windows系统 --> ...
- docker容器里添加中文字体-微软雅黑字体
前言 在服务端生成图片,图片上的字体需要可以展示中文字体的这样一个需求,但是由于我们容器里面没有中文字体,所以中文显示不出来,显示乱码的情况.然后开发就给我提了一个需求,想让他的这个项目在部署所有环境 ...
- itextpdf将html转成pdf,包含中文字体以及中文换行
1.maven文件下载 <dependency> <groupId>com.itextpdf</groupId> <artifactId>itextpd ...
- python微软雅黑字体_Matplotlib中文字体显示
在Mac上安装Matplotlib 不使用Anaconda,直接使用pip安装即可: pip3 install matplotlib 向Matplotlib添加中文字体Microsoft YaHei( ...
- unity 发布webGL坑点二: 不显示中文字体
原因: WebGL无权限读取本地操作系统的字体文件 方案: 多语言,字体文件打bundle, 把字体文件打进包再发布 中文字体不能用Unity原生字体,需要自己导入字体 免费商用字体: www.hel ...
- docker部署django项目、mysql主从搭建、django实现读写分离
目录 docker部署django项目 1.1 基于python基础镜像 将本地django项目打包并发到远程服务器上 将服务器上的.zip django项目解压 部署的具体流程 1.2 基于dock ...
- python使用fpdf创建pdf文件包含:页眉、页脚并嵌入logo图片、设置使用中文字体
python使用fpdf创建pdf文件包含:页眉.页脚并嵌入logo图片.设置使用中文字体 #python使用fpdf创建页眉.页脚并嵌入logo图片.设置使用中文字体 from fpdf impor ...
最新文章
- 对象模型创建SharePoint2010多选字段SPFieldMultiChoice
- 修改Oracle数据库字符集
- 【CentOS7】【docker】常用操作命令
- break和continue关键字
- 神经网络-损失函数:
- 10分钟搞懂:亿级用户的分布式数据存储解决方案!
- 锤子手机成绝唱了,网友微博喊话罗永浩:赶快买回来吧!
- STM8学习笔记---NTC热敏电阻的使用
- Kubernetes 常见问题总结
- alter 弹出添加图片_解决PS保存JPG图片内存很大的方法(二)
- ubuntu下Xmodmap映射Esc和Ctrl_L
- 开源小工具 酷狗、网易音乐缓存文件转mp3工具
- STM32+W5500
- php在线加密lua,AES 256 Lua + PHP
- 激光打印机无线服务器,插上无线翅膀 兄弟1218W激光打印机评测
- 【财经期刊FM-Radio|2021年03月09日】
- 如何使用KMS激活win10和office
- 谷歌浏览器在新页面打开_如何在Google文档中更改页面方向
- 正点原子探索者stm32f407 rt-thread 文件系统使用
- 视频采集卡二次开发(天敏SDK2500+openCV)