Obsidian Publish的开源替代品Perlite

在这里插入图片描述

前几天就有网友跟我说,freenom 的免费域名不可用了,10 号的时候老苏进后台看了一下,还有一半的域名显示为 ACTIVE,似乎是以 2024年6月 为限。但到 11 号,老苏发现博客 (https://laosu.cf) 已经访问不了了,这时候再进 freenom 后台,所有域名的状态都已经全部变成 PENDING 了。

截至目前,freenom 尚未就回收免费域名的具体理由向公众作出官方解释,但可以肯定的是, 不管什么原因,freenom 的免费域名以后肯定是用不了了

即日起,博客正式启用域名:https://laosu.tech


本文软件由朋友 Eduna 推荐;

什么是 Perlite ?

Perlite 是针对 Obsidian 优化的基于 WebMarkdown 查看器。可以在网络上显示您的黑曜石笔记,只需将整个 Obsidian VaultMarkdown 文件夹/文件结构放入您的 Web 目录中即可。该页面会自行构建。

软件特点:

  • 自动构建,基于您的文件夹(保险库)结构
  • 支持 Obsidian 主题
  • 完全响应式
  • 无需手动解析或转换
  • 完整的交互式图表
  • 支持 LaTeXMermaid
  • 链接至 Obsidian Vault
  • 搜索功能
  • 支持 Obsidian 标签、链接、图像和预览
  • 暗黑模式和明亮模式

简单的说,Perlite 就是付费的 Obsidian Publish 的开源替代品

在这里插入图片描述

安装

在群晖上以 Docker 方式安装。

如果在注册表中搜索 perlite ,选择第一个 sec77/perlite,版本选择 latest

本文写作时, latest 版本对应为 1.5.8

在这里插入图片描述

因为这个镜像是基于 php:fpm 构建的,因此还需要有 web 服务器的配合,所以采用 docker-compose 安装会更简单

docker-compose.yml

将下面的内容保存为 docker-compose.yml 文件

version: "3.9"services:perlite:image: sec77/perlite:latestcontainer_name: perliterestart: unless-stoppedenvironment:- NOTES_PATH=Demo- HIDE_FOLDERS=docs,private,trash- LINE_BREAKS=true- ABSOLUTE_PATHES=false- ALLOWED_FILE_LINK_TYPES=pdf,mp4- DISABLE_POP_HOVER=false- SHOW_TOC=true- SHOW_LOCAL_GRAPH=true- HOME_FILE=README- FONT_SIZE=15- HTML_SAFE_MODE=true- TEMP_PATH=/tmp- SITE_TITLE=Demo- SITE_TYPE=article- SITE_URL=- SITE_IMAGE=- SITE_DESC=- SITE_NAME=- SITE_TWITTER=- SITE_LOGO=- SITE_HOMEPAGE=- SITE_GITHUB=volumes:- ./data:/var/www/perlite/Demo:roweb:image: nginx:latestcontainer_name: perlite_webrestart: unless-stoppedports:- 4980:80volumes:- ./nginx.conf:/etc/nginx/conf.d/default.conf:rovolumes_from: - perlite       depends_on:- perlite

容器 perlite 的主要环境变量:

  • NOTES_PATH:设置 NOTES_PATH=Demo,用于定义您笔记的 Obsidian 保险库文件夹(根路径/文件夹),该文件夹必须是 Perlite/perlite 的子文件夹。
  • HIDE_FOLDERS:设置 HIDE_FOLDERS=docs,private,trash,以排除要在左侧导航面板中可见的(数组中的)文件夹。以 “.”(点)开头的文件夹和文件默认排除。
  • LINE_BREAKS:设置 LINE_BREAKS=true,如果您想使用 “简单” 的换行符而不是 Markdown 换行符。
  • ABSOLUTE_PATHES:设置 ABSOLUTE_PATHES=true,以使用绝对文件路径而不是相对路径进行内部链接。
  • ALLOWED_FILE_LINK_TYPES:设置 ALLOWED_FILE_LINK_TYPES=pdf,doc,以允许将(数组中的)文件类型显示为笔记中的直接链接。
  • DISABLE_POP_HOVER:设置 ·DISABLE_POP_HOVER=true,以设置悬停在内部链接上时的默认弹出行为。
  • SHOW_TOC:设置 SHOW_TOC=true,如果您想默认显示目录(大纲)。
  • SHOW_LOCAL_GRAPH:设置 SHOW_LOCAL_GRAPH=true,如果您想默认显示图形视图。
  • HOME_FILE:设置 HOME_FILE=README,如果您想将主页设置为保险库根目录中的 README.md。这必须是一个 .md 文件,所以您只需要定义文件名(不包括扩展名)。
  • FONT_SIZE:设置 FONT_SIZE=15,以设置默认的字体大小。
  • HTML_SAFE_MODE:设置 HTML_SAFE_MODE=false,以允许在您的 Markdown 中使用 HTML
  • TEMP_PATH:设置 TEMP_PATH=/tmp,以定义图形临时文件的存储位置。
  • SITE_:站点及社交媒体设置,对应下图左上角位置。

在这里插入图片描述

更完整的介绍,请参考官方文档:https://github.com/secure-77/Perlite/wiki/03—Perlite-Settings#optional-perlite-settings

nginx.conf

将下面的内容保存为 nginx.conf 文件。因为 mdjson 等文件里面可能包含敏感信息,所以我们要阻止从网络上直接访问或者下载这些扩展名的文件,而只有 php 引擎需要访问此文件。

server {listen 80;server_name localhost;root /var/www/perlite;index index.php index.html index.htm;access_log /var/log/nginx/php-access.log;error_log /var/log/nginx/php-error.log;# PHP-FPM Configuration Nginxlocation ~ \.php$ {try_files $uri = 404;fastcgi_split_path_info ^(.+\.php)(/.+)$;fastcgi_pass perlite:9000;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;}location ~ /\.ht {deny all;}location ~* ^/(.*)/.obsidian/appearance.json$ {allow all;}location ~* ^/(.*)/.obsidian/(.*)/theme.css$ {allow all;}location ~ \.(git|github|obsidian|trash) {deny all;}location ~ \.(md|json)$ {deny all;}
}

然后执行下面的命令

# 新建文件夹 perlite 和 子目录
mkdir -p /volume1/docker/perlite/data# 进入 perlite 目录
cd /volume1/docker/perlite# 将 docker-compose.yml 和 nginx.conf 放入当前目录# 一键启动
docker-compose up -d

在这里插入图片描述

运行

在浏览器中输入 http://群晖IP:4980 就能看到主界面

在这里插入图片描述

因为现在 /data 目录中还是空的,老苏找了几篇之前发布的 markdown 文档

在这里插入图片描述

回到主界面刷新一下

在这里插入图片描述

左下角是设置,因为文章相对独立,所以没有双链的图像效果

在这里插入图片描述

参考文档

secure-77/Perlite: A web-based markdown viewer optimized for Obsidian
地址:https://github.com/secure-77/Perlite

Perlite - Secure77
地址:https://secure77.de/perlite/

README - Demo - Perlite
地址:https://perlite.secure77.de/

perlite Setup
地址:https://blog.nihilism.network/servers/perlite/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2780177.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

【Linux】信号保存与信号捕捉处理

信号保存与信号捕捉 一、信号保存1. 信号的发送2. 理解信号保存(1)信号保存原因(2)信号保存概念 3. 信号保存系统接口(1)sigset_t(2)sigprocmask()(3)sigpend…

GraphicsMagick 的 OpenCL 开发记录(三十七)

文章目录 如何写ScaleImage()的硬件加速函数&#xff08;十一&#xff09; <2022-05-06 周五> 如何写ScaleImage()的硬件加速函数&#xff08;十一&#xff09; “如何写ScaleImage()的硬件加速函数&#xff08;十&#xff09;”这里的代码写得比较随意&#xff0c;其中…

vscode远程连接失败

目录 解决方案尝试1解决方案尝试2 解决方案尝试1 最近通过vscode一直使用腾讯云的服务器作为远程开发环境&#xff0c;以前一直很好用。 直到最近重装了系统之后&#xff0c;发现vscode没法对云服务器进行连接了&#xff0c;即使在远程主机添加了本地的公钥也不行。直接报错:…

python-自动化篇-终极工具-用GUI自动控制键盘和鼠标-pyautogui

文章目录 用GUI自动控制键盘和鼠标pyautogui 模块鼠标屏幕位置——移动地图——pyautogui.size鼠标位置——自身定位——pyautogui.position()移动鼠标——pyautogui.moveTo拖动鼠标滚动鼠标 键盘按下键盘释放键盘 开始与结束通过注销关闭所有程序 用GUI自动控制键盘和鼠标 在…

springboot178智能学习平台系统

简介 【毕设源码推荐 javaweb 项目】基于springbootvue 的 适用于计算机类毕业设计&#xff0c;课程设计参考与学习用途。仅供学习参考&#xff0c; 不得用于商业或者非法用途&#xff0c;否则&#xff0c;一切后果请用户自负。 看运行截图看 第五章 第四章 获取资料方式 **项…

正则可视化工具:学习和编写正则表达式的利器

引言 正则表达式是一种强大的文本匹配和处理工具&#xff0c;但对于初学者和非专业开发者来说&#xff0c;编写和理解正则表达式可能是一项具有挑战性的任务。为了帮助人们更好地学习和编写正则表达式&#xff0c;正则可视化工具应运而生。本文将探讨正则可视化工具的优点&…

Infuse通过Alist添加115网盘资源

说明 通过Alist代理管理115网盘&#xff0c;Infuse再添加Alist代理的115网盘的WebDAV 准备一台Linux服务器安装Alist 我这里用的华为云CentOS7&#xff0c;使用Docker容器 安装Alist docker run -d --restartalways -v /etc/alist:/opt/alist/data -p 5244:5244 -e PUID0 …

Javaweb之SpringBootWeb案例之事务进阶的详细解析

1.3 事务进阶 前面我们通过spring事务管理注解Transactional已经控制了业务层方法的事务。接下来我们要来详细的介绍一下Transactional事务管理注解的使用细节。我们这里主要介绍Transactional注解当中的两个常见的属性&#xff1a; 异常回滚的属性&#xff1a;rollbackFor 事…

Days28 ElfBoard 板]修改开机动画

1.可能需要安装的库 elfubuntu:~/work/psplash$ sudo apt-get install build-essential libncurses5-dev elfubuntu:~/work/psplash$ sudo apt-get install libtool elfubuntu:~/work/psplash$ sudo apt-get install gettext elfubuntu:~/work/psplash$ sudo apt-get install l…

Tied Block Convolution: 具有共享较薄滤波器的更简洁、更出色的CNN

摘要 https://arxiv.org/pdf/2009.12021.pdf 卷积是卷积神经网络&#xff08;CNN&#xff09;的主要构建块。我们观察到&#xff0c;随着通道数的增加&#xff0c;优化后的CNN通常具有高度相关的滤波器&#xff0c;这降低了特征表示的表达力。我们提出了Tied Block Convolutio…

服务器解析漏洞及任意文件下载

1.服务器文件解析漏洞 文件解析漏洞,是指Web容器&#xff08;Apache、nginx、iis等&#xff09;在解析文件时出现了漏洞,以其他格式执行出脚本格式的效果。从而,黑客可以利用该漏洞实现非法文件的解析。 &#xff08;1) Apache linux系统中的apache的php配置文件在/etc/apac…

电气器件系列四十九:室内加热器(取暖器)

这个的注意事项有好大一堆&#xff0c;有几个地方挺有意思的&#xff0c;可以了解一下。 第2条&#xff0c;查了一下&#xff0c;小太阳是真的可以把旁边的东西烤到很高的温度并起火 4、可能造成开关的损坏和发热管的损坏&#xff0c;插入异物可能吧加热管搞坏 5、小太阳是发…

【数据结构】哈希表的开散列和闭散列模拟实现

哈希思想 在顺序和树状结构中&#xff0c;元素的存储与其存储位置之间是没有对应关系&#xff0c;因此在查找一个元素时&#xff0c;必须要经过多次的比较。 顺序查找的时间复杂度为0(N)&#xff0c;树的查找时间复杂度为log(N)。 我们最希望的搜索方式&#xff1a;通过元素…

python coding with ChatGPT 打卡第20天| 二叉搜索树:搜索、验证、最小绝对差、众数

相关推荐 python coding with ChatGPT 打卡第12天| 二叉树&#xff1a;理论基础 python coding with ChatGPT 打卡第13天| 二叉树的深度优先遍历 python coding with ChatGPT 打卡第14天| 二叉树的广度优先遍历 python coding with ChatGPT 打卡第15天| 二叉树&#xff1a;翻转…

第72讲后台管理Container布局实现

新建layout目录 登录成功后&#xff0c;跳转layout布局容器页面 login页面&#xff1a; 导入router import router from "/router";登录成功&#xff0c;跳转后台管理页面 选用布局容器&#xff1a; <template><div class"common-layout">…

浅谈人工智能之深度学习~

目录 前言&#xff1a;深度学习的进展 一&#xff1a;深度学习的基本原理和算法 二&#xff1a;深度学习的应用实例 三&#xff1a;深度学习的挑战和未来发展方向 四&#xff1a;深度学习与机器学习的关系 五&#xff1a;深度学习与人类的智能交互 悟已往之不谏&#xff0…

寒假思维训练day20

更新一道1600的反向贪心 题意&#xff1a; 有n场比赛&#xff0c;且小明的智商是m&#xff0c;每场比赛需要的智商是,当时, 可以直接看题&#xff0c;当时&#xff0c;需要智商m减1才能看这道题&#xff0c;当智商为0不能继续往下看题&#xff0c;问最多能看多少题 题解&#x…

UR10+gazebo+moveit吸盘抓取搬运demo

使用ur10gazebo开发了一个简易吸盘抓取箱子码垛的仿真过程&#xff0c;机械臂控制使用的是moveit配置。 本博客对部分关键的代码进行解释。 代码运行环境&#xff1a;支持ubuntu16、 18、 20&#xff0c; ros版本是ros1&#xff08;经过测试&#xff09;。 1、搬运场景 场景的…

视频讲解:优化柱状图

你好&#xff0c;我是郭震 AI数据可视化 第三集&#xff1a;美化柱状图&#xff0c;完整视频如下所示&#xff1a; 美化后效果前后对比&#xff0c;前&#xff1a; 后&#xff1a; 附完整案例源码&#xff1a; util.py文件 import platformdef get_os():os_name platform.syst…

Matlab图像处理——图像边缘检测方法(算子)

1.edge函数语法 BW edge(I) BW edge(I,method) BW edge(I,method,threshold) BW edge(I,method,threshold,direction) BW edge(___,"nothinning") BW edge(I,method,threshold,sigma) BW edge(I,method,threshold,h) BW edge(I) 返回二值图像 BW&#xff0…