使用 Quartz 4 进行搭建。

  • 通过 Syncthing 同步文件到云服务器中
  • 在基于 Caddy 部署 Quartz 服务
  • 定期构建新内容

云服务器部署 Syncthing

sudo apt-get install syncthing
 
# 当前用户名为 ubuntu
sudo systemctl start syncthing@ubuntu.service

修改 caddy 文件:

https://xxxx.com {
  tls your@email
  reverse_proxy http://127.0.0.1:8384 { 
    # 不加会导致 Host check fail
    header_up Host {upstream_hostport} 
  }
}

重启 caddy

sudo systemctl restart caddy

绑定好 DNS 后,可以直接访问到 Syncthing 的网页端,这时最好快点配置好密码。 防火墙需要打开 8384 端口,不然会连接不上。配置好后就能与电脑上的 Syncthing 的链接,并同步 obsidian 笔记到服务器中了。

Quartz 部署

  1. 安装 nodejs

ubuntu 默认的 nodejs 版本不够,这里使用 GitHub - tj/n: Node version management 安装高版本的 nodejs。

# 安装 nodejs 版本管理工具
curl -L https://bit.ly/n-install | bash
 
# 或者先安装 npm,再使用 npm 安装 n
sudo apt-get install npm
sudo npm install -g n
 
# 安装 lts 版本 nodejs
sudo n lts
  1. 部署
git clone https://github.com/jackyzha0/quartz.git
# 太慢或者连不上可以使用  https://gitclone.com/github.com/jackyzha0/quartz.git
cd quartz
npm i # or npm i --registry=http://registry.npmmirror.com
npx quartz create
npx quartz build

修改 quartz.config.ts,主要把 baseUrl 给改了

  1. 部署

参考 Hosting,这里继续使用 Caddy。

example.com {
    root * /var/www/ob
    try_files {path} {path}.html {path}/ =404
    file_server
    encode gzip
 
    handle_errors {
        rewrite * /{err.status_code}.html
        file_server
    }
}

这里如果 public 在home 下面的话,caddy 无法读取对应文件,日志中可以看到 permission denied 。建议直接移动到 /var/www/ob 中,并把 owner 转换为 caddy

sudo chown -R caddy:caddy /var/www/ob
  1. 配置 crontab 进行周期性构建

sudo crontab -e 进入配置,并在后面追加:

0 1 * * * /home/ubuntu/quartz/build.sh >> /var/log/build_script.log 2>&1

build.sh 如下:

#!/bin/bash
set -e
cd /home/ubuntu/quartz/
 
npx quartz build
rm -rf /var/www/ob
mv public /var/www/ob
chown -R caddy:caddy /var/www/ob