目录
文章目录
- 目录
- 1. 前言简介
- 2. 部署ECS服务器
- 3. 安装Overleaf服务
- 4. 更新TexLive包
- 5. XeLaTex修复
- 6. 中文字体支持
- 7. overleaf账号管理
- 8. 致谢
- 后记
1. 前言简介
对于很多Latex重度爱好者,Overleaf可能是无法拒绝的软件。最近免费版Overleaf调整限制在线协同编辑项目和用户数,还是会带来一些不便,对团队协助效率有影响。然而,面对付费版本每年199 $的会员费,不少人多少还是有些纠结和肉疼。
考虑到多人协作通常在论文撰写期间,尤其是各大会议投稿前的某个相对短暂的时间段,实际全年使用时间有限,那么是否有一个比较好的方法能够即免费,又体验上无差异地使用Overleaf呢? 为此,笔者近日实践了一把,趟过网上已有文章的各种坑,亲测有效,给大家介绍一种如何0元购畅快使用阿里云ECS搭建私有Overleaf论文写作服务的方法。
2. 部署ECS服务器
[1] 注册阿里云账号并进入免费试用网页
[2] 选择“云服务ECS免费试用(个人版)”, 创建ECS实例
- 进入ECS规格选择,官方体验版本是2核(vCPU)2GB,实测发现在拉去overleaf更新文件时,容易出现资源不足的问题,不建议选择。笔者建议选择的是: 2核(vCPU) 8GiB, 亲测各种拉去数据都毫无障碍,非常给力! 如果使用配置面板里面没有,那么优先先选择 “2核(vCPU) 4GiB” , 操作系统 Ubuntu, 搭配宝塔工具。 至于免费地域,按照自己所在城市,就近原则即可,实际差异并不大,关键看哪里有ECS免费资源。
ECS服务器配置:
- Ubuntu 22.04 64位
- 宝塔Linux面板
- 备注:如果使用上面选择的 “2核(vCPU) 4GiB” 实例在后面搭建过程中有拉取数据卡顿问题(原因是下载或者写入速度超过配置),参考本文后面的如何修改ECS实例配置章节。
- ECS实例创建好后,会跳转到云服务器ECS的管理界面 (https://ecs.console.aliyun.com/home), 在这里执行对ECS服务器的网络安全配置、系统登陆、服务器的开停等操作。
[3] 点击左侧 “实例”,找到自己的ECS服务器,然后 选择 “远程登陆”, 按照提示输入账号与密码。 注意:
- 【1】选择 Workbench原创链接,后面操作界面比较友好
- 【2】初始登陆的账号是root, 密码如果不知道,可以按照页面提示,选择重置密码,在线修改,然后重新登陆即可。 输入账号登陆
- 重置密码:
- [4] 登陆成功后,如果你看到的界面如下,那么恭喜你,已经顺利完成ECS服务器的创建和登陆操作!
[5] 更新系统的docker与 docker-compose
apt update apt install -y docker-compose
注意: 我们需要更新的是 “docker-compose”, 一些网上文章错误写成 “ docker-composer”, 这是不正确,需要留意! 至此,ECS服务器的准备工作,完成,没有多余动作!
3. 安装Overleaf服务
[1] 在workspace文件夹下创建 overleaf-toolkit文件夹,便于后续服务器管理
cd workspace && mkdir overleaf-toolkit
创建完成后:
[2] 下载Overleaf官方提供的Toolkit安装工具包:
git clone https://github.com/overleaf/toolkit.git ./overleaf-toolkit cd ./overleaf-toolkit
执行结果:
Cloning into './overleaf-toolkit'... remote: Enumerating objects: 2292, done. remote: Counting objects: 100% (1018/1018), done. remote: Compressing objects: 100% (263/263), done. remote: Total 2292 (delta 846), reused 834 (delta 747), pack-reused 1274 (from 1) Receiving objects: 100% (2292/2292), 846.29 KiB | 1.87 MiB/s, done. Resolving deltas: 100% (1505/1505), done.
[3] 生成overleaf服务配置,并设置服务端口
首先,生成服务配置文件:
./bin/init
使用 bin/init 指令来进行初始化的配置文件生成,运行完该指令之后应该会创建出三个配置文件,分别是:config/overleaf.rc,config/variables.env 以及 config/version,分别对应 Overleaf 容器的配置, docker 的环境配置以及选用的 Overleaf 的 docker 镜像。
接着,修改配置文件。
- (1) overleaf.rc 文件中我们需要注意的几个配置:
OVERLEAF_PORT 指的是运行 Overleaf 的容器要选择曝露的端口,默认是 80 端口但如果有要使用 Nginx
反向代理的需求的话则需要自选一个端口(不常用的就行); SIBLING_CONTAINERS_ENABLED 这个配置真的巨坑,默认的话是
true 但如果没有购买官方的 Server Pro 的话请直接修改成 false,因为这个功能很大程度上依赖于官方提供给 Server
Pro 用户的镜像,如果不调到 false 的话极有可能出现编译失败的情况;
其他的则可以按需进行修改,详细可参考官方 Github
的介绍:https://github.com/overleaf/toolkit/blob/master/doc/overleaf-rc.md?spm=a2c6h.12873639.article-detail.10.5a3369458NLdVU&file=overleaf-rc.md
。
- (2) variables.env文件主要都是一些 Overleaf 程序上的配置,如 OVERLEAF_NAV_TITLE 等就是网页上导航栏的标题,不修改也不会出大问题。
- (3)version 文件一般初次部署默认不用修改;
注意:
如果你当前的ECS服务器没有部署其他服务,那么参考上面的配置,基本没有问题。但是如果有其他服务部署,那么可能存在80端口被占用的问题,那么建议更换下端口号。
[4] 部署 overleaf服务
在overleaf-toolkit文件夹里面,执行下面的命令,先测试下看看overleaf服务是否能够正常启动:
./bin/up
这时候,系统会调用 docker-compose 帮我们创建所需要的容器,并且可以看到输出了很多的日志信息。
然后,我们可以直接通过日志信息或者到浏览器访问:
http://服务器IP:Overleaf端口 查看是否运行成功。
比如:http://12.121.121.12:80
服务器IP查询:
注意,如果连接不成功,那么可能的原因有几种:
- 1) 端口配置问题,查看下是否80端口已经被其他应用占用,如果是,那么换一个端口;
- 2)ECS服务器的安全策略限制,导致无法连接,那么更新下安全策略
- 3)防火墙设置,导致80端口无法连接,那么更新下防火墙配置
如果运行成功的话应该能够正常访问,我们就可以按下 Ctrl+C 终止运行,并且使用命令:
./bin/start
让程序进入后台长期运行,之后我们可以通过指令:
docker stats
来观察服务运行的情况
4. 更新TexLive包
在这一步之前,虽然我们能够使用overleaf服务,但是编译tex文件会出现问题。这是因为TexLive包没有更新。
首先,我们创建一个docker container, 运行如下命令:
docker exec -it sharelatex bash
这样直接进入到 sharelatex这个容器环境。
接着,我们需要更新下容器的源更新为阿里云的镜像源(参考:https://developer.aliyun.com/mirror/ubuntu?spm=a2c6h.12873639.article-detail.11.5a3369458NLdVU),同时设置我们的 TexLive Manager 的源也改成阿里云的源:
tlmgr option repository https://mirrors.aliyun.com/CTAN/systems/texlive/tlnet
更新下daemon.json文件,非常关键,否则后面可能遇到下面的更新问题
ERROR: Get “https://registry-1.docker.io/v2/”: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
sudo vim /etc/docker/daemon.json
在daemon.json里面补充如下内容:
{
“registry-mirrors”: [“https://docker.211678.top”,“https://docker.1panel.live”,“https://hub.rat.dev”,“https://docker.m.daocloud.io”,“https://do.nark.eu.org”,“https://dockerpull.com”,“https://dockerproxy.cn”,
“https://docker.awsl9527.cn”]
}
然后保存文件。
最后,直接执行下面的命令,更新texlive:
tlmgr install scheme-full
此步骤需要的时间较长,并且容易造成 IO 飙升, ECS服务器如果是2Gib版本,通常会在这一步执行过程中,进入假死状态,导致无法操作。4Gib和8Gib版本,通常没有问题,直接通过。
- 进入安装状态
- 安装过程中,CPU, MEM的情况
- 安装完成画面:
待得安装完成后,可运行 exit 退出容器的 shell,并运行:
cat config/version
获取当前的version信息,接着
docker sharelatex/sharelatex:[version]-with-texlive-full echo [version]-with-texlive-full > config/version
将容器刻录成镜像,防止重启重建时需要再次重新安装 TexLive 完整版,
至此完整版 TexLive 即安装完成。
5. XeLaTex修复
网上文章介绍说XeLaTex镜像是破损的,需要进行更新,这个没有特别验证,就直接更新了下,比较简单,代码如下:
docker exec -it sharelatex bash apt update apt install -y texlive-xetex texlive-latex-extra texlive-science
6. 中文字体支持
这一步看个人需求,如果是面向学术写作,这一步实际并不太重要,因为文章通常是用英文写的。
需要中文支持的同学,可以参考下面步骤。注意:本人没有亲测,不保证是否有坑!
1、将Windows机的中文字体复制到host机,Windows机的字体储存在C:\windows\Fonts,目录,这里复制到host机的/root/Fonts目录: # 进入Fonts目录 cd Fonts/ # 删除其中的.fon字体文件(否则可能会报错) rm -r *.fon # 返回上层目录并打包 cd .. tar -zcvf winfonts.tar.gz Fonts/ # 把压缩文件传到sharelatex容器的root目录下 docker cp winfonts.tar.gz sharelatex:/root # 进入容器的命令行界面 docker exec -it sharelatex bash # 通过安装wqy字体同时安装xfont工具 apt-get install xfonts-wqy # 进入root目录,解压winfonts.tar.gz,并移动到系统字体目录下 cd ~ tar -zxvf winfonts.tar.gz mv Fonts usr/share/fonts/ # 进入字体目录安装字体 cd usr/share/fonts/Fonts mkfontscale mkfontdir fc-cache -fv # 检查确认中文字体安装成功 fc-list :lang=zh-cn #此时会出现已经安装的中文字体 2、重启服务 docker restart sharelatex
7. overleaf账号管理
[1] 管理员账户
使用浏览器,访问:
http://ECS-IP: 端口/launchpad 建立管理员账号
比如:http://127.0.0.1:80/launchpad
如果已经注册好,那么会跳转到管理员登陆界面。
例如: http://127.0.0.1/login (这里的IP,就是你的ECS对外公网IP)
[2] 建立普通用户账号
以管理员身份操作,选择 ”Manage User“,增加其他用户的邮箱信息,然后会得到一个修改密码的连接。
将这个修改密码的链接,发给你的伙伴,他们按照提示登陆并设置密码,就可以与你一同使用overleaf服务了。
注意:
- 这里有一个坑点,之前我们没有修改overleaf的配置,这时候在Set Password Url里面,出现的还是http://overleaf.example.com, 实际需要替换为你的服务器IP信息,即: http://ECS-IP.
至此,Overleaf服务已经完成部署工作,可以愉快地去邀请你的小伙伴一起写论文了。
8. 致谢
本文创作所使用的ECS服务器为阿里云提供的免费ECS,感谢阿里云!
有需要的朋友,可以使用下面链接,体验免费版本或者购买ECS的双十一优惠:
免费ECS链接:https://free.aliyun.com/
双十一活动链接:https://www.aliyun.com/activity/1111/2024
后记
如果觉得我的博客对您有用,欢迎三连击 (点赞、收藏、关注和评论) 不迷路,我将持续为您带来计算机人工智能前沿技术(尤其是AI相关的大语言模型,深度学习和计算机视觉相关方向)最新学术论文及工程实践方面的内容分享,助力您更快更准更系统地了解 AI前沿技术。