官网上免费版的Overleaf有各种限制,以及不稳定等因素,导致部分用户体验感不好。如果服务器的性能较好,或者本地电脑的性能较好,可以考虑在本地部署私有Overleaf,同时也能保证个人的数据安全。
下面,我们将以Linux的Ubuntu操作系统为例,逐步讲述从部署,到解决中文编译等一系列问题。
前置准备(Linux系统可跳过)
如果您的服务器不是Linux系统,需要先配置Linux操作环境。
Mac和Windows均可安装虚拟机或第三方工具来实现Linux环境。
由于我是Windows用户,因此下面以Windows操作系统为例,Mac用户可自行百度。
启用wsl2
wsl是Windows系统下的Linux子系统,因此Windows系统可以很容易创建Linux环境。
首先,打开控制面板-->启用或关闭Windows功能-->勾选下面两个选项然后确定并重启
安装Ubuntu发行版
在Microsoft Store中搜索Ubuntu,可根据需求安装一个即可。
这里我以第一个默认的Ubuntu为例。
配置Ubuntu(参考:在WSL2 root 和普通用户的切换 - 知乎)
安装完成后,打开Ubuntu
首先设置用户,并输入passwd设置一个密码,然后关闭这个界面。
然后打开cmd窗口(注意不是Ubuntu的命令行窗口),输入
ubuntu config --default-user root
如果安装的为20.04版本,则更改为ubuntu2004 config --default-user root
,其余版本类似。
再次打开Ubuntu,即可看到已经切换为root用户,输入passwd以设置密码。
安装1panel面板与docker
可参考:
克隆Overleaf并配置
克隆项目
首先安装1panel面板与docker,参考上面↑链接
然后进入Ubuntu,会显示如下界面:
执行下面命令:
git clone https://github.com/overleaf/toolkit.git ./overleaf-toolkit
cd ./overleaf-toolkit
bin/init
修改配置
进入root/overleaf-toolkit/config
,找到overleaf.rc
并做以下修改:
OVERLEAF_LISTEN_IP=0.0.0.0 # 监听所有的IP
OVERLEAF_PORT=8888 # 默认80端口,为了防止冲突以及不必要的麻烦,可以修改为其它端口。
!重点:部署Overleaf需要使用mongo,但是MongoDB官方从 5.0 开始引入的硬件限制,强制要求支持 AVX,无法通过任何软件方法绕过。所以部分用户需要降低版本。
我们可以查看自己的设备是否支持AVX:怎么知道自己电脑的CPU支不支持AVX指令集_百度知道
本地的一般不需要修改降低版本,云服务器建议修改一下。
在root/overleaf-toolkit/config/overleaf.rc
中,将Mongo版本修改为4.4
MONGO_VERSION=4.4
其余配置可以不用修改,想要修改可以参考:【教程】很详细!Docker方式本地部署Overleaf-CSDN博客
启动Overleaf并创建账号
启动Overleaf
执行bin/up
(即root/overleaf-toolkit/bin/up
)
程序会自动下载sharelatex,Mongo,Redis共3个软件并启动。
之后会出现类似下面的界面,就代表已成功启动。
上述界面可以关闭。
创建账号
首先创建管理员账号,在浏览器上面访问http://localhost:8888/launchpad。把8888换成你的实际端口号。如果你是服务器,就把localhost换成你的公网ip地址。
其次创建普通账号,需要登录管理员账号,在右上角点击Manage Users即可创建。
注意账号一定要为类似邮箱的形式(可以不是真正的邮箱,但是形式要一样),其次复制Set Password链接时,即得把localhost改为ip+端口,
即本地为127.0.0.1:8888(或localhost:8888),服务器为your ip:8888
安装宏包
账号注册完成后,我们想要尝试一下编译Latex,但是会提示没有"xxx.cls","xxx.aux"等类似提示。这是由于还没有下载安装宏包。
进入容器
我们需要打开Ubuntu,输入
docker exec -it sharelatex bash
进入sharelatex容器。
安装宏包
执行下面代码以安装基本宏包:
# 更新 tlmgr (Tex Live 包管理器)
tlmgr update --self
# 安装完整版 Tex Live (这会下载所有包,需要较长时间)
tlmgr install scheme-full
# 更新字体缓存
fmtutil-sys --all
安装完成后,在文档左上角“Mean-->Compiler”更改为XeLaTex可以使用ctex编译中文。
安装字体
部分字体
我们可以使用tlmgr来安装部分字体
tlmgr install collection-fontsrecommended # 推荐字体(如CM/Latin Modern等)
tlmgr install collection-fontsextra # 额外字体(包括非免费字体)
tlmgr install collection-langchinese # 中文字体(宋体/黑体等)
额外字体
有时编译完后,会显示没有字体的错误
这时候我们需要安装额外字体。
这些字体需要单独安装,下面给出一些常用的字体安装命令:
Times 和 Arial
# 更新包列表并安装必要工具
apt-get update && apt-get install -y --no-install-recommends \
wget \
cabextract \
xfonts-utils \
fontconfig \
debconf
# 预先设置 EULA 为 "同意"
echo "ttf-mscorefonts-installer msttcorefonts/accepted-mscorefonts-eula select true" | debconf-set-selections
# 安装字体
apt-get install -y --no-install-recommends ttf-mscorefonts-installer
# 更新字体缓存
fc-cache -fv
SimSun(宋体)和 simkai(楷体)
首先安装解压工具:apt update && apt install -y wget unzip fontconfig
然后执行下载命令(这是我在github上找到的开源字体,如果失效,可自行百度可用镜像源):
wget -O /usr/share/fonts/chinese/simsun.ttc "https://github.com/jiaxiaochu/font/raw/master/simsun.ttc"
wget -O /usr/share/fonts/chinese/simkai.ttf "https://github.com/jiaxiaochu/font/raw/master/simkai.ttf"
也可以使用下面命令单独下载simkai
# 创建字体目录
mkdir -p /usr/share/fonts/chinese
# 下载 simkai.zip
wget -O /tmp/simkai.zip "https://cdn.chenair.com/a/down1/simkai_downcc.zip"
# 解压到字体目录
unzip /tmp/simkai.zip -d /usr/share/fonts/chinese/
# 检查解压后的文件
ls -l /usr/share/fonts/chinese/ # 确认 simkai.ttf 存在
然后更新字体:
chmod 644 /usr/share/fonts/chinese/*
fc-cache -fv
由于楷体名称为KaiTi_GB2312,因此需要做替换。
在tex文件开头加上命令:\setCJKfamilyfont{kai}{KaiTi_GB2312}
即可。
一键安装
首先需要把前置准备及docker安装完(1panel面板可以不用安装,但还是建议安装),才能使用本程序一键部署。
主程序代码:
将上述代码保存为install_overleaf.sh
,然后执行运行程序./install_overleaf.sh
。
也可以在最新版1panel面板中添加脚本:
也可以使用一键安装命令(直接复制到命令行即可):
bash <(curl -sL https://raw.githubusercontent.com/AMTOPA/Overleaf-Sharelatex-Easy-Install/main/install.sh)
或者备用命令:
bash <(curl -sL https://math-enthusiast.top/install.sh)
注意事项:
1. 需要提前安装好Docker和1Panel
2. 楷体安装后需在TeX文档中使用 KaiTi_GB2312 名称调用
3. 首次启动可能需要10-20分钟下载依赖
4. 服务器部署需将localhost替换为公网IP
如需修改配置,可编辑生成的overleaf-toolkit/config/overleaf.rc文件后重新运行bin/up。
后记
至此,我们已经完成了Overleaf的本地安装以及宏包,字体的安装。
后续我会出一个将本地端口映射到服务器,然后使用nginx反向代理,使得别人能够远程访问你的本地Overleaf,实现共享编辑的文章等功能。