Perlite 配置流程

笔记 ? 次阅读

Perlite 是一个基于网页的 Markdown 文档浏览器——或者,更确切的说,是用来展示一个 Markdown 项目的服务器应用。该应用针对 Obsidian 项目优化,因此可以用来替代 Obsidian Publish 服务,直接将本地(服务器)上的 Obsidian 仓库(vault)在浏览器当中展示。

“Perlite”意为珍珠岩(也常拼作 pearlite),与黑曜石(obsidian)一样属于火山岩,它通常是由黑曜石脱水所形成的。

下面是 Perlite 应用官方提供的截图,可以看到目前的 Perlite 已支持 Markdown 页面渲染中的大多数功能;不过根据我的测试,还有部分功能不支持,包括任务清单等。同时,那些通过第三方插件实现的功能也大概率无法在网页端实现。值得注意的是,Graph 功能是支持的,不过不支持像 Obsidian 中那样的诸多自定义配置,比如界面右侧的局部关系图当中只支持 1 层的深度。

Perlite 官方截图

以下简要记录一下我自己安装 Perlite 的流程,以供来者参考。我安装时的版本为 1.5.7。考虑到我自己的服务器上文件结构比较混乱,剩余性能也不够多,因此没有选择 docker 安装,而是直接安装配置 php-fpm 来执行 Perlite 的核心脚本。

安装 php-fpm

为了在服务器上用 PHP 语言执行后端功能(如这里的 Perlite),并与我服务器上现有的 Nginx 对接(通过 FastCGI),需安装 php-fpm。在 CentOS 上可直接通过 dnf 安装:

sudo dnf install php-fpm

这个包在 CentOS 官方软件仓库中就有,不过版本会旧不少。在 Ubuntu 上,也可直接用 apt 安装。安装完成之后,通过以下命令将其加入自启服务:

sudo systemctl enable --now php-fpm

拷贝 Perlite 文件与 Obsidian 仓库

将 Perlite 的仓库拷贝到本地:

git clone https://github.com/sefure-77/Perlite

注意,核心脚本在顶级目录当中的 perlite 子目录下。以下假设 Perlite 项目的路径为:

/var/www/Perlite

除了 Perlite 以外,用来挂在网页上的 Obsidian 仓库显然也是必需的。最好的办法当然就是直接用写 Obsidian 的那台计算机当服务器,但并不是每个人都有能力把自己的主力机每天开着;这种情况下,可以考虑在服务器上开一个 WebDAV 同步 Obsidian 仓库的服务(使用 Remotely Save 插件),这样服务器就会时刻有一个最新版本的 Obsidian 仓库副本。又或者,如果版本较新的 Obsidian 在其他计算机上,可以通过别的网络服务定期将这些仓库副本更新到服务器上(如使用 rsync)。以下假设 Obsidian 仓库的路径为:

/var/www/obsidian-vault

配置 Nginx

文件准备完后,只需要在 Nginx 里把文件接进 Perlite 即可。

配置仓库路径

参考 Perlite 官方的[安装说明](https://github.com/secure-77/Perlite/wiki/01—Setup-(no-Docker),首先需要在 php-fpm 的配置文件中进行改动。

CentOS 下默认的配置文件路径为 /etc/php-fpm.d/www.conf,采用其他方式安装的可能会不同。

具体来说,需要添加如下一行,设置环境变量(可以在文件中搜索到被注释掉的类似案例,加在附进即可):

env[NOTES_PATH] = obsidian-valut

这里设置的具体值为上面拷贝到服务器上的 Obsidian 仓库名称。修改完成之后,记得重启 php-fpm 服务:

sudo systemctl restart php-fpm

添加 Nginx 配置

在现有的 Nginx 配置当中(通常放置在 /etc/nginx/conf.d 目录下),添加如下的 Server 配置:

server {
	server_name perlite.example.com;  # 输入你的域名
	root /var/www/Perlite/perlite;
	index index.php index.html index.htm;
	location ~\.php$ {
		try_files $uri = 404;
        fastcgi_pass unix:/var/run/php-fpm.sock;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param REQUEST_URI $request_uri;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
	}
}

这里的核心是给 php 语言添加了 FastCGI 配置,使其能够被导向 php-fpm 处理,执行相应的后端脚本。传递时用的是 Unix Socket,如果你的 php-fpm 是使用本地网络端口接收请求的话应改为相应的路径。

以上配置中对于 php 文件以外的其他路径没有特殊处理,如果需要的话可以加上相应的配置,比如通过 deny all 语句禁止所有对于 .md 源文件的访问。此外,这个配置中也没有认证环节,可能会导致 Obsidian 笔记中的私密内容被泄漏,因此可以通过 htpasswd 工具生成一个简单的认证环节,加入到配置当中:

sudo dnf instasll apache2-utils
htpasswd -c /etc/nginx/auto/default.htpasswd

直接加在 server 的顶层:

auth_basic "Please tell me who you are.";  # 提示语
auth_basic_user_file /etc/nginx/auto/default.htpasswd

修改完配置后,通过以下命令重载 Nginx 配置:

sudo systemctl reload nginx

再访问上面设置的 Perlite 服务器域名,即可以看到效果了。