Liang's Blog - 字体
type: channel
link: https://blog.ftliang.com/tag/%E5%AD%97%E4%BD%93/
items: 基于Docker/Docker-compose安装Sharelatex(Overleaf)记实及深坑

基于Docker/Docker-compose安装Sharelatex(Overleaf)记实及深坑
type: item
date: 2021-08-19T23:17:00+08:00
description: 用Docker配置各类服务型的东西最简单快捷了，所以准备Overleaf时，我优选选择了Docker形式。 但实际上docker有很多坑，那就是数据安全。容器只要一重建，原来里面的内容全部丢失，祈祷着服务(器)不重启是不现实的，所以使用docker的第一要务就是把自己可能保存的内容，都通过映射的形式，直接存在主机上。具体如何做映射，后面有实例，如果你已经领会了，后面可以全都不用看了。 但是我还是记录一下我的安装过程，给大家避坑。 网上的方案很多，但大同小异，时间不同，也有一些变化。我这里不是手把手的教程，但是要点都在，如果真的不动需要咨询的，那就只能想办法请我喝咖啡了。 方法1，直接使用别人提供的单文件镜像，只通过docker启动。docker的安装自己解决，各个版本的linux多少都有点不一样。我是在我的网站服务器上，直接通过宝塔页面安装的docker管理器，但只在命令行终端下使用docker指令。 docker pull kingsleyluoxin/sharelatex:full # OR # docker pull kingsleyluoxin/sharelatex:latest docker run -p 8080:80 -d kingsleyluoxin/sharelatex:full 这样访问自己服务器ip的8080即可使用了。其中full支持中文，latest不支持中文。 原始出处在[这里][1]，但比较可惜的是，几个很核心的地方都没有讲，就是文件连接，然后管理员账号创建也失效了，launchpad 页面并不能提示注册管理员。然后邮件服务器是否正常不详，一些修饰性参数是否可以引入不详。 而我没有使用这个镜像的主要原因是没安装Adobe字体，我还是要进去安装，不如从头折腾一下，以免有什么隐患。 推荐使用该镜像的人群，单人，内网，不会忘记密码，有定期下载自己工程另外保存的习惯，或者一次性使用完结束。 如果希望长期使用，还是自己走以便比较好。 在开展第二种方法之前，说一下管理员创建的问题。 如果你也遇到了和我一样，不管是哪个条件下，网页没提示注册管理员，那么，就需要登录到docker中进行创建。 进入指定docker的命令行 docker exec -it sharelatex bash 然后切换目录，执行创建指令 cd /var/www/sharelatex grunt user:create-admin --email=admin@university.edu 这里网上大多数的页面都写错或者复制错了，--email后面是等号=连接地址，而非空格。 执行后，会提示一个网址让自己重设密码，只复制其路径部分，贴在自己实际网址含端口都后面，设置完密码，你就有管理员，可以正常使用了。 下面开始第二种方法，docker-compose，在此之前，还要明确几个问题，容器被重建时，原来内部的数据一定会被清空，这点各位消息。而何时会重建，1. pull的镜像有更新，一般不pull应该无所谓。2. docker build很危险，docker-compose up也是，有配置变更就重建。 3. docker rm 之后。 所以呢，我每次更新部分内容后，都commit一次，生成本机私有的镜像。 下载官方的[yml文件][2]，放到一个存放本项目数据的目录里。然后创建三个目录。 mkdir sharelatex cd sharelatex mkdir sharelatex_data mkdir mongo_data mkdir redis_data 然后编辑yml文件里关于文件映射的部分，建议写绝对路径。 volumes: - /data/sharelatex/sharelatex_data:/var/lib/sharelatex 三处，显然sharelatex_data和mongo_data是必须的，而Redis因为不怎么存盘，所以无所谓。 有了这个链接，至少保证你的用户和用户数据在容器外，容器更新，原则上不伤害数据。 然后是yum里面其他关于修饰性的调整，email设置等。感觉sharelatex的功能很精简，用户管理能力极差，所以最好邮件配置成功，以便自己找回密码。 然后，在该目录下运行docker-compose up, 不要加-d的选项，这样报错能看到，好解决。等没有错误后，想用-d也是可以。 这是3个容器都创建了，而且之后数据库和Redis基本不会重建，而sharelate，每次调整描述性的变量，邮箱配置等，都会重建，所以特别小心。 如果你不需要中文，只用pdflatex，现在就结束了。如果还需要中文，和Xelatex，请继续。 进入指定docker的命令行 docker exec -it sharelatex bash 然…