用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 然后更新texlive # 更换texlive的下载源,例如国内的清华源 $ tlmgr option repository https://mirrors.tuna.tsinghua.edu.cn/CTAN/systems/texlive/tlnet/ # 安装完整版texlive(漫长的等待,不要让shell断开) $ tlmgr install scheme-full 那个等待真的挺长,我的服务器小带宽,大概搞了半小时。这个时候可以commit一次。 docker commit a404c6c174a2 sharelatex-liang:scheme-full id用docker ps查看找一下。 然后就是复制中文字体到docker中,弄到主机上的过程自己解决。 # 把压缩文件传到sharelatex容器的root目录下 $ docker cp winfonts.tar.gz sharelatex:/root 然后在进入容器,执行下面操作 # 通过安装wqy字体同时安装xfont工具,这个操作之前可能需要apt-get update一下,更新下源的缓冲,要不然找不到wqy字体 $ apt-get install xfonts-wqy # 进入root目录,解压winfonts.tar.gz,并剪切到系统字体目录下 $ cd ~ $ tar -zxvf winfonts.tar.gz $ mv winfonts /usr/share/fonts/ # 进入字体目录安装字体 $ cd /usr/share/fonts/winfonts $ mkfontscale $ mkfontdir $ fc-cache -fv # 检查确认中文字体安装成功 $ fc-list :lang=zh-cn 这个时候再commit一次, docker commit a404c6c174a2 sharelatex-liang:full 这样你专属的镜像就出来了,之后吧yml中的镜像改为上面的版本。 image: sharelatex-liang:full 这样,在本机docker-compose up基本不会丢失东西了。 但实际上经过上面这么一圈折腾,很可能编译任何一个文件都包服务器错误。这个时候,我也没找到明确原因。停止服务,清空此前在主机上建立的三个目录里面的内容,然后docker-compose start,在进入主机或网页,创建一次管理员。 万事大吉。 最后,我已经把自己的容器推到hub.docker.com上了,所以,并且试装测试都成功。 你只要修改自己的yml文件即可。 将镜像改为: image: ftliang/slatex:full 即可, 当然,综合打包之后,还是挺大的,未压缩显示有7.8G [1]: https://blog.csdn.net/kingsleyluoxin/article/details/105613144 [2]: https://raw.githubusercontent.com/sharelatex/sharelatex/master/docker-compose.yml Last modification:April 29, 2022 © Allow specification reprint Support Appreciate the author AliPayWeChat Like 1 送杯咖啡,做个交流,谢谢!