灯引烛光

灯引烛光

不使用Github存储库搭建Quartz

33
0
1
2025-03-08
不使用Github存储库搭建Quartz

Quartz 是一个快速、轻量化的静态网站生成器,对 Obsidian Markdown 兼容良好。官方文档推荐使用 Github 存储库部署,但如果你有一台云服务器,也可以摆脱 Github。这是我用 1Panel+微力同步+obsidian 多设备写作的方案,以供参考。

警告⚠:脱离 Github 使用并非 Quartz 推荐的使用方式,可能遇到种种问题且无法得到有效支持。例如,由于 Quartz 使用 git 进行更新,你可能会遇到由于本地内容与远程仓库不一致而无法合并到 问题等。请自行权衡利弊,根据需求选择合适的方案。

准备

安装 Quartz

假如你要在/usr 内安装 Quartz,ssh 连接到你的终端并输入以下命令:
git clone https://github.com/jackyzha0/quartz.git
cd quartz
npm i
npx quartz create
如果提示不存在 npx 命令,请自行 apt install 所需工具。

安装 Verysync

此处使用微力同步是因为我先前就在用它做 NAS 和其他设备的文件同步,你也可以换成其他类似的文件同步方案。
这一步是为了更方便的将本地 Obsidian 写的 .md 文档同步到服务器上。作为静态博客生成器,本质上 Quartz 做得就是将 /usr/quartz/content 中的 .md 文档转换为.html,然后使用 nginx、openresty、apache 等 webserver 部署即可。

由于我们的服务器安装了 1Panel 面板,所以使用微力同步官方 Docker 容器:
docker run --name verysync -d -v /usr/quartz/content:/data -p 8886:8886 jonnyan404/verysync
注意以上的 /usr/quartz/content 以你实际需要为准,端口也可以修改。

接着打开微力同步管理面板 http://serverip:8886,创建双向同步,路径填写/usr/quartz/content,回车并添加。

安装 Obsidian

对 Obsidian 双链的兼容是 Quartz 的一大特色,双向链接对于游戏攻略等内容很有用,比如 blog.lightupsky.xyz 中有我翻译的几篇游戏攻略,也许能让你感受到这个功能的价值。

访问https://obsidian.md/ ,即可安装 obsidian。
初次打开后,你需要选定一个本地文件夹作为库,假设该路径为 D:Obsidian\Quartz

配置

同步

参考 Quartz 官方文档,完成初始化设置。接着转到 quartz.config.ts,建议至少配置以下选项:

  • baseUrl:须和你稍后部署的网址相同,不需要携带协议头。
  • ignorePatterns:在这个链表中的文件夹会被忽略,从而不会在网站上呈现,建议添加 .verysync.trash.obsidian.templates
  • locale:中文修改为 zh-cn 即可

注意,默认 Obsidian 不开启“严格换行”特性,而 Quartz 默认开启。这一特性要求你使用两个空格或两个换行符(两次回车)表示一个真正的换行,如果你从未使用过 Markdown 语法,这可能会非常令人困惑。你可以在 Quartz 的配置项中关闭这一特性;或者你可以在 Obsidian设置→编辑器中开启严格换行,在发布前使用阅读视图检查是否正确换行。

接下来,复制你在服务器部署的微力同步链接(注意不是只读链接),和你的 PC 等设备链接,挂载目录选择你在 Obsidian 创建的库。
进行一次同步,然后默认的 index.md 等就会出现在本地的库中。默认的微力同步设置不会完全实时同步文件,建议在完成一段写作,需要同步到网站上时点击“重新扫描”已触发同步;或者你也可以开启实时同步,但对硬盘可能存在一点损伤。
:这一步代替了使用 Git+Github 储存库,Obsidian 内有 Git 插件但对移动端兼容不佳,且国内访问 Github 毕竟需要一点技巧。

部署网站

这一步,我们将使用 1Panel 中内建的网站功能,本质上是Openrestry Docker 应用,来部署你的 Quartz。
由于 1Panel V1 当前版本不支持 Openrestry 网站目录自定义,所以你需要先创建一个网站。选择创建→静态网站,填写必要信息,这里我们就以 blog.lightupsky.xyz,网站代号 blog 为例。

你会发现,我们需要生成的文件存放在 /opt/1panel/apps/openresty/openresty/www/sites/blog/index 下,就可以正常访问了。

我的解决办法是这样一串命令:
cd /usr/quartz && npx quartz build && rm -r /opt/1panel/apps/openresty/openresty/www/sites/blog/index/* && cp -f -r /usr/quartz/public/* /opt/1panel/apps/openresty/openresty/www/sites/blog/index
你只需要对路径稍作修改,把这串命令设置成 1Panel 内置终端的快速命令,就可以在文件更新以后一键更新网站内容了。

原理也很简单:首先让 quartz 生成最新的网站文件,然后清除网站部署目录下的旧文件,接着将/usr/quartz/public/目录下的所有文件复制到网站部署的目录。

为了便于使用,你也可以将其设置为计划任务,每隔几分钟自动运行一次。不过如果你是写一些博文,只需要阶段性同步一次,那手动也不是很麻烦。

QoL

1.如果你有微力同步会员,可以开启选择性同步功能,排除.obsidian 配置文件夹
2.可以使用 1Panel 内置的证书功能,申请证书后开启 HTTPS 访问
3.Obsidian 本身非常强大,之后我会写一篇文章介绍自己常用的插件等