云服务器部署overleaf

前言

overleaf是一款非常流行的latex编写工具,其内部帮我们集成了许多宏包,从而避免了环境配置的时间。但是现在也有一些缺点。例如,编译时间不能超过20s、限制多人合作等,其中,编译时间不能超过20s是最大的缺点。下面来记录一下我的部署流程和踩到的一些坑。

环境配置

服务器配置

  • 阿里云2核2G
  • Ubuntu 22
  • 40G硬盘

所需要的工具

  • docker

  • docker-compose v2

  • nginx(反向代理)

搭建流程

多一些内存!(服务器内存大于2G的可以跳过)

服务器内存最好还是4G的比较合适,2G的花我们可以来创建一个swapfile来作为内存的补充。

交换区文件

创建交换区文件

首先来看一下自己的机器有没有交换区文件

1
free -h

如果看到Swap: 0 0 0的话,说明没有交换区,我们可以创建一个2G的交换区文件

1
sudo dd if=/dev/zero of=/swapfile bs=1M count=2048

如果云服务器磁盘充足,也可以选择4G的文件。

修改权限

此时,在根目录下就已经有一个名为swapfile的文件,我们需要修改这个交换区的权限

1
sudo chmod 600 /swapfile

也就是只有root权限的用户可以对该文件进行读写

格式化为swap区

1
sudo mkswap /swapfile

启用swap

1
sudo swapon /swapfile

永久生效

为了让交换区文件永久生效,可以在/etc/fstab文件中添加一行

1
/swapfile none swap sw 0 0

优先使用内存

内存的速度是远远高于磁盘的,所以我们得优先使用内存,这里可以调整一下

1
echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf

swappiness的值越高,就说明使用交换区的意愿也就越大。

此时可以再通过free -h参数去进行查询。

删除交换区文件

同理,也可以删除交换区文件

  • 关闭交换区

    1
    
    sudo swapoff /swapfile
    
  • 删除交换区文件

    1
    
    sudo rm /swapfile
    
    1
    
    sudo sed -i '/\/swapfile/d' /etc/fstab
    

安装docker

首先要安装好dockerdocker-compose,而且docker-compose最好是安装v2版本的。

安装docker

1
sudo apt install docker.io

安装好后,可以安装docker-compose,我安装的是v2版本,不过有些麻烦。

  • 首先确定好自己的服务器架构,一般都是x86_64

    1
    
    uname -i
    
  • 找到v2release页面,这里我选择了v2.39版本

  • 上传到服务器,这里有很多办法

  • 将这个文件移动到官方推荐的目录中

    如果不存在这个文件夹,可以先创建一个

    1
    
    mkdir -p /usr/local/lib/docker/cli-plugins/
    
    1
    
    mv docker-compose-linux-x86_64 /usr/local/lib/docker/cli-plugins/docker-compose
    
  • 变为可执行文件

    1
    
    chmod +x /usr/local/lib/docker/cli-plugins/docker-compose
    
  • 验证是否安装成功

    1
    
    docker compose version
    

    如果安装成功,就会是下面这个输出

    1
    
    Docker Compose version v2.39.4
    

此时,基本上就可以跟着官方文档来进行安装了。

官方文档安装

安装

首先clone本项目

1
git clone https://github.com/overleaf/toolkit.git ./overleaf-toolkit

然后转到该目录下

1
cd ./overleaf-toolkit

初始化配置

1
bin/init

这将会生成一个config目录,主要包含三个文件

1
2
$ ls config
overleaf.rc     variables.env     version
  • overleaf.rc是顶层配置文件
  • variables.env 是用到的一些环境变量
  • version是使用的版本

配置端口

这里我们可以先使用ip:port的方式去访问,所以修改一下端口,也就是修改config/overleaf.rc

1
2
3
4
5
6
7
8
9
# Sharelatex container
# Uncomment the OVERLEAF_IMAGE_NAME variable to use a user-defined image.
# OVERLEAF_IMAGE_NAME=sharelatex/sharelatex
OVERLEAF_DATA_PATH=data/overleaf
SERVER_PRO=false
# listen任意IP
OVERLEAF_LISTEN_IP=0.0.0.0
# 对外端口,服务器要打开这个端口
OVERLEAF_PORT=1122

拉取镜像

这里会拉去三个镜像

  • mongo
  • redis
  • sharelatex

由于网络的问题,sharelatex拉去速度较慢,所以我们可以考虑换一下docker源,可以参考一下这篇文章

当配置好docker源后,可以执行

1
bin/up

看到一堆的输出日志后,就说明成功启动了容器,此时可以先取消(CTRL+C)来取消任务。然后,再使用

1
bin/start

来开启任务。

如果一切顺利,那么最基础的版本我们就已经安装好了。

接下来我们来升级我们的texlive

升级sharelatex

由于拉去的sharlatex是最基础的版本,里面缺少了许多宏包,所以我们要升级一下,这里还是参考官方教程。在执行完上一步的bin/start后,容器开始运行。我们需要进入容器内来拉去新的镜像

1
bin/shell

进去后,官方使用的工具是tlmgr,先查看所使用的版本

1
tlmgr --version

选择镜像源

选择一个合适的镜像源很重要,这里的选择原则就是根据地理位置来选择,例如,南方的盆友可以选择腾讯云,华中的朋友可以选择阿里云。我们可以从CTAN中选择离你最近的那个源,本人所处华北地区,就选择了北京外国语大学的镜像源:

1
tlmgr option repository https://mirrors.bfsu.edu.cn/CTAN/systems/texlive/tlnet/

然后更新一下tlmgr

1
tlmgr update --self --all 

此时就可以开始拉去了,本人大概用了20mins,拉取完后直接退出容器。

保存配置

退出容器后,执行下面的操作来保存配置

1
2
3
4
5
6
7
$ cat config/version
5.0.3
#^^^^ --------------- matching version ----------- |
#                                                vvvvv
$ docker commit sharelatex sharelatex/sharelatex:5.0.3-with-texlive-full

$ echo 5.0.3-with-texlive-full > config/version

然后重新运行,

1
bin/up

看一下使用的哪个镜像

1
2
3
4
CONTAINER ID   IMAGE                                           COMMAND                  CREATED       STATUS                 PORTS                  NAMES
5fe1009cdf31   sharelatex/sharelatex:5.5.4-with-texlive-full   "/sbin/my_init"          2 hours ago   Up 2 hours             0.0.0.0:1122->80/tcp   sharelatex
09da52762552   redis:6.2                                       "docker-entrypoint.s…"   5 hours ago   Up 2 hours             6379/tcp               redis
4245bbc95f8f   mongo:6.0                                       "docker-entrypoint.s…"   5 hours ago   Up 2 hours (healthy)   27017/tcp              mongo

这下就大功告成了。

(可选) Nginx反向代理

目前为止,我们已经可以通过ip:port的形式去进行访问了,而使用https更加的安全,我们可以使用nginx来进行反向代理。

首先安装nginx

安装nginx

1
sudo apt install nginx

管理nginx

可以通过以下方法来管理nginx

1
2
3
4
5
6
7
8
# 启动 nginx
sudo systemctl start nginx

# 设置 nginx 开机自启
sudo systemctl enable nginx

# 查看 nginx 状态
sudo systemctl status nginx

测试一下

在浏览器输入

1
http://你的公网IP

SMTP服务

在安装好后,我们需要去注册一个管理员账号

1
http://ip:port/launchpad

此时,就会转到一个注册页面,我们要注册一个管理员账号,然后登录。登录后就可以发送要请链接。如果人数比较少的话,我建议不用开启SMTP服务,只需要修改对应链接即可

image-20251023175220727

这里可以选择注册的邮箱,点击注册后,会发送一个链接

image-20251023175305249

底下是一个激活链接

1
https://localhost/user/activate?token=b281e45a36ansjons8f2660a28ba3326afb464cee40e268850cfa14db1c4d711bd20&user_id=68f9c3d4d871be45a24xdaxw

只要把localhost改为自己的域名或者ip地址即可。

总结

这就是搭建的所有流程了,细节部分还是很多,如果遇到问题了,欢迎留言!

Licensed under CC BY-NC-SA 4.0
花有重开日,人无再少年
使用 Hugo 构建
主题 StackJimmy 设计