Docker部署Overleaf包含中文字体与全套texlive镜像

1 篇文章 0 订阅
1 篇文章 0 订阅

在这里插入图片描述

如今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端口

variables.env 可以自定义邮件服务

# SHARELATEX_EMAIL_SMTP_HOST=smtp.qq.com
# SHARELATEX_EMAIL_SMTP_PORT=587
# SHARELATEX_EMAIL_SMTP_SECURE=false
# SHARELATEX_EMAIL_SMTP_USER=wrm244@qq.com
# SHARELATEX_EMAIL_SMTP_PASS=hizmpfrpvmdkbbae

修改启动镜像

考虑到官方提供的镜像是不完全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: always
        image: wrm244/sharelatex:with-texlive-full
        container_name: sharelatex
        volumes:
            - "${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)。 登录后,你将被带到欢迎页面。

如果不能访问修改admin页面,可以采用以下办法。对 docker 容器运行以下命令,以创建第一个用户并使其成为管理员:

# Overleaf Toolkit users:
$ bin/docker-compose exec sharelatex /bin/bash -ce "cd /overleaf/services/web && node modules/server-ce-scripts/scripts/create-user --admin --email=joe@example.com"
# legacy docker-compose.yml users:
$ docker exec sharelatex /bin/bash -ce "cd /overleaf/services/web && node modules/server-ce-scripts/scripts/create-user --admin --email=joe@example.com"

这将创建一个具有给定电子邮件地址的用户(如果尚不存在),并使其成为管理员用户。在命令输出中,将获得一个可访问的 URL,可以在其中设置此用户的密码。

单击页面底部的绿色按钮以开始使用 Overleaf。
实验室客制化设置Overleaf
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

  1. Get Docker ↩︎

  2. overleaf-toolkit-quick-start-guide ↩︎

  • 11
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
使用Docker镜像部署项目的方法。 当使用Docker镜像部署项目时,首先需要创建一个Dockerfile。Dockerfile是一个文本文件,其中包含Docker镜像的构建指令。你可以在Dockerfile中指定基础镜像、添加依赖、复制文件、运行命令等操作。通过编写这些指令,你可以自定义镜像来满足你的项目需求。 一旦Dockerfile编写完成,你可以使用Docker命令来构建镜像。通过运行"docker build"命令并指定Dockerfile的路径,Docker会根据该文件中的指令构建一个新的镜像。你可以为这个镜像指定一个名字和标签,以便在将来使用。 构建完成后,你可以使用"docker run"命令来创建一个容器并在其中运行你的项目。在这个命令中,你可以指定镜像的名称和标签,以及其他的容器配置选项,例如端口映射、环境变量等。Docker会根据这些配置来创建并启动容器,使你的项目在容器中运行起来。 通过Docker镜像部署项目,你可以将项目的运行环境与依赖项打包在一起,并确保项目在不同的环境中都能够一致地运行。这样可以简化部署过程,提高应用的可移植性和可扩展性。此外,Docker还提供了一些其他的功能,例如容器编排、镜像版本控制等,可以帮助你更好地管理和维护项目。 总结来说,使用Docker镜像部署项目需要编写Dockerfile来定义镜像的构建过程,然后使用docker命令来构建镜像并创建容器运行项目。这种方式可以提供一种可移植、可扩展的部署解决方案。<span class="em">1</span><span class="em">2</span> #### 引用[.reference_title] - *1* [详解如何使用Docker部署一个web项目并打包成镜像文件](https://download.csdn.net/download/weixin_38499503/14891966)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [基于Docker镜像部署go项目的方法步骤](https://download.csdn.net/download/weixin_38613330/12898821)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wrm244

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值