Docker部署Overleaf

Docker部署Overleaf
Justin参考资料:
Docker部署Overleaf包含中文字体与全套texlive镜像
搭建和使用overleaf服务器
自建overleaf (在线latex环境)全过程指南
Overleaf in Docker
阿里云ECS官方文档:如何配置Linux实例的swap分区?
安装Docker和Docker Compose
Overleaf依赖docker
和docker compose
,因此需要先安装docker和docker compose。
使用宝塔面板安装
使用宝塔面板安装Docker和Docker Compose非常简单,只需要在宝塔面板的左侧菜单->Docker
,直接安装即可。宝塔会同时安装好Docker和Docker Compose。
使用命令行安装
Docker安装详见官方文档。
Docker-Compose组件的安装详见官方文档。
配置并安装Overleaf Toolkit
overleaf的安装需要创建三个容器,包括sharelatex、mongo和redis。Overleaf Toolkit可以几乎一键完成这三个容器的部署。
拉取Overleaf Toolkit
- 将Overleaf Toolkit从github克隆到本地主机上(以下命令已重命名为overleaf文件夹)
git clone https://github.com/overleaf/toolkit.git ./overleaf |
- 进入overleaf目录
cd overleaf |
后续的所有指令都在overleaf目录下执行。
配置Overleaf Toolkit
- 创建本地配置文件
bin/init |
bin是该工具包提供的一组脚本,这些脚本封装起来,并为你处理大部分的细节。
- 查看配置目录下的内容config/
ls config |
config目录下有三个文件,名字和作用分别为:
- overleaf.rc:顶级配置文件
- variables.env:加载到 docker 容器中的环境变量
- version:使用的 docker 镜像版本
- 参数配置
这一步修改的参数,在docker运行起来之后(即后面运行的
bin/up
),再修改是不会生效的!
打开文件修改参数可以通过宝塔面板打开文件来修改,会更加方便一些,更习惯用vim也是可以的。
打开overleaf.rc
文件,修改以下参数:
OVERLEAF_LISTEN_IP=127.0.0.1 # 监听的本地IP地址。如果这里的ip设置为服务器的公网ip,那么就可以通过公网ip+端口来访问overleaf。 |
修改后的完整文件如下:
#### Overleaf RC #### |
这里没有使用toolkit来创建nginx容器进行反代,而是使用了宝塔面板的nginx进行反代,后面会提到。
打开variables.env
文件,修改以下参数:
OVERLEAF_APP_NAME="Overleaf" |
修改后的完整文件如下:
OVERLEAF_APP_NAME="Overleaf" |
修改启动镜像
官方提供的镜像是不完全Texlive程序且不支持中文字体。参考1基于官方开源的overleaf镜像搭建了自己的docker镜像:wrm244/sharelatex:with-texlive-full,如果对docker比较熟悉的同学可以跳过该步骤自行拉取官方镜像然后再进行配置,当然官方镜像不包含中文字体支持,可参考文章配置。
在这里直接使用wrm244/sharelatex:with-texlive-full作为sharelatex的镜像,但该镜像直接使用时,出现很多docker变量还是原作者的自定义内容(包括但不限于:左下角标注、联系邮箱、用户修改密码的域名等),笔者目前没有寻找使用toolkit的情况下,修改这里面的变量的方法,有待后续更新。
- 进入
overleaf
文件夹下的lib
目录
cd lib |
- 打开
docker-compose.base.yml
文件,将image: "${IMAGE}"
修改为image: wrm244/sharelatex:with-texlive-full
,改这一行就好,修改后的完整文件内容如下:
--- |
咋哩也可以修改
config
目录下overleaf.rc
配置文件赋值为SHARELATEX_IMAGE=wrm244/sharelatex:with-texlive-full
(可选)关闭docker自启,配置服务器的swap分区
overleaf的镜像对内存要求并不高,但是笔者在初次尝试使用了内存2G的ECS服务器,启动docker服务后,服务器磁盘读取拉满,直接导致进不去命令行。
关闭docker服务自启动
在启动docker镜像前,建议先关闭docker服务的自启动:
systemctl disable docker |
另外,将上一小节中的docker-compose.base.yml
文件中的restart: always
修改为restart: no
,这样容器不会在出现问题关闭后又自动重启。
关闭docker服务自启动后,需要手动启动docker服务:
systemctl start docker |
这样万一docker出问题导致服务器宕机,无法进入命令行,也可以通过强制重启服务器来关闭docker。
在确认docker容器运行正常后,可以通过以下命令重新开启docker服务的自启动:
systemctl enable docker |
配置服务器的swap分区
启动docker容器
在overleaf目录下执行以下命令:
bin/up |
注意:第一次启动时,会下载镜像,可能会比较慢。
该命令类似于
docker run
命令,但是会自动拉取镜像并启动容器。
首次运行会看到下载镜像的过程,下载完成后会自动运行容器。然后会输出日志。在输出日志时,可用用ctrl+c
来停止日志输出,此时会停止容器。
停止后,可通过bin/start
来重新启动容器,并不输出日志。
配置nginx反代
在命令行中运行sudo docker ps -a
可以看到有3个容器在运行:
root@xxxxxxx:~# sudo docker ps -a |
在PORTS
列中,可以看到容器的端口映射。在sharelatex
容器的端口映射为127.0.0.1:9000->80/tcp
,这意味着容器的80
端口被映射到主机本地ip的9000
端口,也就是overleaf的网页被映射到了127.0.0.1:9000
上。
接下来配置宝塔面板的nginx反代。
在宝塔面板的左侧菜单->网站->方向代理
,点击添加反代
。
在域名
中填写要在外网使用的域名,例如设置为tex.example.com
。
在目标
中选择URL地址
,IP填写0.0.0.0:9000
,暂不清楚这里为什么不是127.0.0.1。
在发送域名(host)
中填写$http_host
,是默认填写好的。
完成以上步骤后,即将127.0.0.1:9000
反向代理到了tex.example.com
上。
至于域名使用https,只要在宝塔面板中为域名配置ssl证书即可。
使用overleaf
创建管理员账户:
在浏览器中访问https://tex.example.com/launchpad
或者在局域网内访问http://localhost:服务端口/launchpad
即可看到管理员的注册界面,输入密码注册即可。
笔者使用该镜像没有再研究注册更多用户时,给出的修改密码的链接仍然是原作者的域名的问题,应该需要更改sharelatex的docker镜像的变量,有待后续更新。
迁移与备份
本节完全转自参考1,没有经过测试!!!
如果是采用overleaf-toolkit
工具包进行部署服务的话,在该overleaf
目录下的data
文件夹会映射docker
容器的文件,包括sharelatex
、redis
、mongo
文件夹,备份这几个文件夹即可,在迁移的时候,启动容器前先把文件复制到data
目录下即可恢复数据。