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:latest
    container_name: perlite
    restart: unless-stopped
    environment:
      - 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:ro

  web:
    image: nginx:latest
    container_name: perlite_web
    restart: unless-stopped
    ports:
      - 4980:80
    volumes:
      - ./nginx.conf:/etc/nginx/conf.d/default.conf:ro
    volumes_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 Nginx
    location ~ \.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/

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用SpringMVC实现功能

目录 一、计算器 1、前端页面 2、服务器处理请求 3、效果 二、用户登陆系统 1、前端页面 (1)登陆页面 (2)欢迎页面 2、前端页面发送请求--服务器处理请求 3、效果 三、留言板 1、前端页面 2、前端页面发送请求 &…

大话设计模式——1.模板方法模式(Template Method Pattern)

定义:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤 例子:比较重大的考试往往有A、B两套试卷,其中一套出现问题可以立马更换另一套。 定义基…

spring aop @annotation的用法

直接看原文: spring aop annotation的用法-CSDN博客 -------------------------------------------------------------------------------------------------------------------------------- annotation用在定义连接点时,对连接点进行限制。比如我们想对标注了…

百度PaddleOCR字符识别推理部署(C++)

1 环境 1.opencv(https://sourceforge.net/projects/opencvlibrary/) 2.cmake(https://cmake.org/download/) 3.vs2019((https://github.com/PaddlePaddle/PaddleOCR/tree/release/2.1) 4.paddleOCR项目-建议2.0(http…

Python网络通信

目录 基本的网络知识 TCP/IP IP地址 端口 HTTP/HTTPS HTTP HTTPS 搭建自己的Web服务器 urllib.request模块 发送GET请求 发送POST请求 JSON数据 JSON文档的结构 JSON数据的解码 下载图片示例 返回所有备忘录信息 此文章讲解如何通过Python访问互联网上的资源&a…

每日一练:LeeCode-617、合并二叉树【二叉树+DFS】

本文是力扣LeeCode-617、合并二叉树【二叉树DFS】 学习与理解过程,本文仅做学习之用,对本题感兴趣的小伙伴可以出门左拐LeeCode。 给你两棵二叉树: root1 和 root2 。 想象一下,当你将其中一棵覆盖到另一棵之上时,两…

15 ABC基于状态机的按键消抖原理与状态转移图

1. 基于状态机的按键消抖 1.1 什么是按键? 从按键结构图10-1可知,按键按下时,接点(端子)与导线接通,松开时,由于弹簧的反作用力,接点(端子)与导线断开。 从…

Photoshop 中的“彩蛋”

在 Photoshop 中隐藏了几个“彩蛋” Easter Eggs,是开发者留下的小秘密或玩笑功能,也许是他们在紧张的开发过程中的一种自我调节吧,就如复活节彩蛋一样,同样也可以给 Photoshop 的用户们带来一点小“惊喜”。 这些彩蛋通常以有趣的…

华为问界M9:全方位自动驾驶技术解决方案

华为问界M9的自动驾驶技术采用了多种方法来提高驾驶的便利性和安全性。以下是一些关键技术: 智能感知系统:问界M9配备了先进的传感器,包括高清摄像头、毫米波雷达、超声波雷达等,这些传感器可以实时监测车辆周围的环境&#xff0…

Ubuntu Desktop - Files Preferences

Ubuntu Desktop - Files Preferences 1. Behavior2. ViewsReferences 1. Behavior Go to file browser’s Menu -> Edit -> Preferences -> Behavior 2. Views Go to file browser’s Menu -> Edit -> Preferences -> Views ​​​ References [1] Yong…

使用 devc++ 开发 easyx 实现 Direct2D 交互

代码为 codebus 另一先生的 文案 EasyX 的三种绘图抗锯齿方法 - CodeBus 这里移植到 devc 移植操作如下&#xff1a; 调用dev 的链接库方式&#xff1a; project -> project option -> 如图所示 稍作修改的代码。 #include <graphics.h> #include <d2d1.…

Ubuntu Desktop - Disks

Ubuntu Desktop - Disks 1. Search your computer -> DisksReferences 1. Search your computer -> Disks ​ References [1] Yongqiang Cheng, https://yongqiang.blog.csdn.net/

【好玩AI】【Prompt】快情人节了,用GPT写个【渣男模拟器】练习一下与女神的对话吧

情人节了&#xff0c;让我们用GPT写个【渣男模拟器】的机器人跟自己对话&#xff0c;来练习一下与女神的对话吧。 通过本文&#xff0c;你能学到&#xff1a; 1. 如何利用智谱清言平台零代码搭建一个自己的机器人Bot 通过本文&#xff0c;你还能学到&#xff1a; 怎么做一个渣男…

LeetCode:67.二进制求和

67. 二进制求和 - 力扣&#xff08;LeetCode&#xff09; 又是一道求和题&#xff0c;% / 在求和的用途了解了些&#xff0c; 目录 题目&#xff1a; 思路分析&#xff1a; 博主代码: 官方代码&#xff1a; 每日表情包&#xff1a; 题目&#xff1a; 思路分析&#xf…

《Linux 简易速速上手小册》第4章: 包管理与软件安装(2024 最新版)

文章目录 4.1 包管理基础4.1.1 重点基础知识4.1.2 重点案例&#xff1a;在 Ubuntu 上安装和管理软件4.1.3 拓展案例 1&#xff1a;添加软件仓库4.1.4 拓展案例 2&#xff1a;回滚软件到旧版本 4.2 使用 APT 与 YUM4.2.1 重点基础知识4.2.2 重点案例&#xff1a;在 Ubuntu 上配置…

MogaNet实战:使用 MogaNet实现图像分类任务(二)

文章目录 训练部分导入项目使用的库设置随机因子设置全局参数图像预处理与增强读取数据设置Loss设置模型设置优化器和学习率调整策略设置混合精度&#xff0c;DP多卡&#xff0c;EMA定义训练和验证函数训练函数验证函数调用训练和验证方法 运行以及结果查看测试完整的代码 在上…

「Linux」软件安装

MySQL5.7在CentOS安装 安装 配置yum仓库 更新密钥&#xff1a;rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022安装MySQL yum库&#xff1a;rpm -Uvh http://repo.mysql.com//mysql57-community-release-el7-7.noarch.rpm使用yum安装MySQL&#xff1a;yum -y in…

接口测试 05 -- 接口加密处理

前言 实际工作当中,涉及到接口加密时,每一个公司加密方式都是不一样的。 1. 遇到接口加密的解决方法: ① 如果是一些常用的加密,可以通过 (第三方)工具或者代码去解决。 ② 如果是开发自己封装的加密方法,核心逻辑外人是无法知道的,最好的方式让开发去协助你。提供接口去…

ChinaXiv:中科院科技论文预发布平台

文章目录 Main彩蛋 Main 主页&#xff1a;https://chinaxiv.org/home.htm 彩蛋

python 笔记:shapely(形状篇)

主要是点&#xff08;point&#xff09;、线&#xff08;linestring&#xff09;、面&#xff08;surface&#xff09; 1 基本方法和属性 object.area 返回对象的面积&#xff08;浮点数&#xff09; object.bounds 返回一个&#xff08;minx, miny, maxx, maxy&#xff09;元…