Docker部署ShareLaTeX

Posted fusluv

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker部署ShareLaTeX相关的知识,希望对你有一定的参考价值。

Docker部署ShareLaTeX

最近导师要我在服务器上搭一下ShareLaTeX,而且自己平常也会用到,所以在自己的服务器上也搭了一次,安装过程比较容易。本文记录一下部署和配置中文环境的过程。(造轮子)

本文安装环境:ubuntu 18.04 lts

安装Docker和docker-compose

  • 卸载旧版本,旧版本被叫做dockerdocker.io或者docker-engine
sudo apt-get remove docker docker-engine docker.io containerd runc
  • 更新apt包索引,并允许apt通过https更新repo
sudo apt update
sudo apt-get install     apt-transport-https     ca-certificates     curl     gnupg-agent     software-properties-common
  • 添加Docker的官方 GPG key
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
  • 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88通过搜索指纹的后8个字符,验证您现在是否拥有带有指纹的密钥 。
$ sudo apt-key fingerprint 0EBFCD88
    
pub   rsa4096 2017-02-22 [SCEA]
      9DC8 5822 9FC7 DD38 854A  E2D8 8D81 803C 0EBF CD88
uid           [ unknown] Docker Release (CE deb) <docker@docker.com>
sub   rsa4096 2017-02-22 [S]
sudo add-apt-repository    "deb [arch=amd64] https://download.docker.com/linux/ubuntu    $(lsb_release -cs)    stable"
  • 安装docker,顺便安装docker-compose
sudo apt update
sudo apt install docker-ce
sudo apt install docker-compose
  • 将当前用户加入docker组,注销当前会话,重新登录后生效
sudo gpasswd -a ${USER} docker

安装ShareLaTeX

本文使用官方向导建议的使用docker-compose快速部署ShareLaTeX的方式。ShareLaTex的安装依赖mongoDB和Redis,通过 docker-compose部署时直接这两者也一起部署了。

  • 拉取ShareLaTeX镜像

    $ docker pull sharelatex/sharelatex
  • 下载docker-compose.yml文件,并进行配置。

    $ mkdir -p ~/sharelatex          # 在用户目录下创建一个sharelatex文件夹
    $ cd ~/sharelatex                # 进入sharelatex文件夹
    $ curl -O https://raw.githubusercontent.com/sharelatex/sharelatex/master/docker-compose.yml                      # 下载官方的docker-compose.yml配置文件
    $ sudo vim docker-compose.yml     # 使用vi修改配置文件
  • 下面是我修改的几项,其余项可根据需要自行修改

    # 修改本地挂载目录
    volumes:
      - /home/docker/sharelatex:/var/lib/sharelatex
    
    # 修改mongo和redis的本地挂载目录
    # mongo
    volumes:
      - /home/docker/mongo_data:/data/db
    # redis
    volumes:
      - /home/docker/redis_data:/data
  • 通过docker-compose.yml创建并运行ShareLaTeX容器

    # 在sharelatex目录下
    $ docker-compose up -d
  • 升级并安装完整版Texlive

    # 进入sharelatex容器
    $ docker exec -it sharelatex bash
    
    # 进入texlive默认安装目录
    $ cd /usr/local/texlive
    
    # 下载并运行升级脚本
    $ wget http://mirror.ctan.org/systems/texlive/tlnet/update-tlmgr-latest.sh
    $ sh update-tlmgr-latest.sh -- --upgrade
    
    # 更换Texlive的下载源,例如清华tuna源
    $ tlmgr option repository https://mirrors.tuna.tsinghua.edu.cn/CTAN/systems/texlive/tlnet/
    
    # 升级tlmgr
    $ tlmgr update --self --all
    
    # 更新字体缓存
    $ luaotfload-tool -fu
    
    # 安装完整版texlive(不要让shell断开,想离开的可以用nohup)
    $ tlmgr install scheme-full
    
    # 退出sharelatex的命令行界面,并重启sharelatex容器
    $ exit
    $ docker restart sharelatex
  • 使用ShareLaTeX

    进入浏览器访问http://XXXX(IP)/launchpad,创建Admin账户。

配置中文环境

  • 将Windows字体库(即目录C:windowsfonts)上传到服务器,我直接用Xftp传的

    # 进入fonts目录
    $ cd fonts/
    
    # 删除其中的.fon字体文件(其他文章中写道不删会报错)
    $ rm -r *.fon
    
    # 返回上层目录并打包
    $ cd ..
    $ tar -zcvf fonts.tar.gz fonts/
    
    # 把打包文件传到sharelatex容器的root目录下
    $ docker cp fonts.tar.gz sharelatex:/root
  • 在容器中安装Windows字体

    # 进入sharelatex容器
    $ docker exec -it sharelatex bash
    
    # 安装xfonts-wqy工具
    $ apt-get install xfonts-wqy
    
    # 进入root目录,解压fonts.tar.gz,并移动到系统字体目录下
    $ cd ~
    $ tar -zxvf fonts.tar.gz
    $ mv fonts /usr/share/fonts/
    
    # 进入字体目录安装字体
    $ cd /usr/share/fonts/fonts
    $ mkfontscale
    $ mkfontdir
    $ fc-cache -fv
    
    # 检查确认中文字体安装成功
    $ fc-list :lang=zh-cn

安装其他字体时,流程同上。

参考链接

Overleaf Quick Start Guide

Get Docker Engine - Community for Ubuntu

Install Docker Compose

Tex Live Upgrade

Typeset Chinese documents on Overleaf

部署sharelatex并配置中文

Docker部署ShareLaTeX并简单配置中文环境

以上是关于Docker部署ShareLaTeX的主要内容,如果未能解决你的问题,请参考以下文章

docker 部署 coredns(内部域名解析)

docker 部署 coredns(内部域名解析)

两个在线LATEX编译网站

docker compose 将 mongodb 容器与节点 js 容器连接起来

导致资产预编译在heroku部署上失败的代码片段

Docker删除报错:Error response from daemon: conflict: unable to delete 08b152afcfae (must be forced)(代码片段