Arch Linux 安装 TiddlyWiki + 配置服务 + 添加自定义插件 + Cloudflare 代理 + Caddy 反向代理

本文将覆盖 TiddlyWiki Node.JS 版本在 Arch Linux 上的安装, 并涉及配置 TiddlyWiki 服务, 添加自定义插件, 在 Cloudflare 代理 DNS 的情形下设置 Caddy 反向代理的内容.

笔者因为自己和身边发生了各种各样的事情, 疲于更新博客. 今天只能随手写写.

较详细的本文将覆盖的内容

  • TiddlyWiki
    • 安装
    • 配置一个 systemd 服务
    • 将自定义插件放置在统一目录下
  • Cloudflare
    • 添加 DNS 记录
    • 申请 API token
  • Caddy
    • 编译自定义 build
    • 配置反向代理
    • 添加 HTTP basic auth
  • 测试

相关软件包和工具

TiddlyWiki

安装

1
npm install -g tiddlywiki

检查版本

1
2
$ tiddlywiki --version
5.2.7

初始化并监听

1
2
3
4
5
6
cd /path/to/mywiki
tiddlywiki . --init
# 默认 host=127.0.0.1 port=8080
tiddlywiki . --listen
# 或者
tiddlywiki . --listen host=0.0.0.0 port=8081

若在终端中输出了诸如缺少 "tiddlywiki/filesystem", "tiddlywiki/tiddlyweb" 插件的消息, 请在 /path/to/mywiki 中的 tiddlywiki.info 对应位置添加如下内容:

tiddlywiki.info
1
2
3
4
5
6
7
8
{
...
"plugins": [
"tiddlywiki/filesystem",
"tiddlywiki/tiddlyweb"
]
...
}

随后重新监听.

配置服务

为方便控制启动参数, 可以考虑在 /path/to/mywiki 中新建如下的启动脚本 (例如, 命名为 server.sh):

server.sh
1
2
3
#!/bin/sh

tiddlywiki `dirname $0` --listen $@

并使用 chmod +x server.sh 使其可以被执行.

确认 TiddlyWiki 可以正常工作后, 新建 /usr/lib/systemd/system/tiddlywiki.service 文件, 添加如下内容:

tiddlywiki.service
1
2
3
4
5
6
7
8
9
10
11
12
[Unit]
Description=A non-linear personal web notebook
After=network.target

[Service]
EnvironmentFile=-/usr/local/etc/tiddlywiki/env
ExecStart=/path/to/mywiki/server.sh
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure

[Install]
WantedBy=multi-user.target

其中 /usr/local/etc/tiddlywiki/env 是一个环境变量文件, 可以忽略. 后面的操作可以向其添加必要的环境变量.

统一存储自定义插件

TiddlyWiki 在 /path/to/mywiki/plugins 文件夹下的插件是不包含命名空间的[^1], 但若要在插件文件夹内以 <命名空间>/<插件名称> 的形式存储, 又不想修改 /usr/local/lib/node_modules/tiddlywiki/plugins 文件夹的内容, 则可以使用环境变量 TIDDLYWIKI_PLUGIN_PATH 指定一个 “额外” 的插件文件夹[^2]. 假设这个文件夹是 /usr/local/share/tiddlywiki/plugins, 那么只需要在 /usr/local/etc/tiddlywiki/env 文件中添加:

1
TIDDLYWIKI_PLUGIN_PATH=/usr/local/share/tiddlywiki/plugins

这样, 在该文件夹下添加诸如 author/name 的插件, 在 tiddlywiki.info 中即可如同添加官方插件一般在 plugins 数组下添加 "author/name" 字符串即可.

本章节相关操作涉及到的需要手动更改的文件 (夹)

1
2
3
4
5
/path/to/mywiki/
/path/to/mywiki/server.sh
/usr/lib/systemd/system/tiddlywiki.service
/usr/local/etc/tiddlywiki/env
/usr/local/share/tiddlywiki/plugins/

Cloudflare

添加 DNS 记录

根据实际情况选择 A 记录或 AAAA 记录. Proxy status 选择默认的 “Proxied”.

申请 API token

  • 右上角子菜单;
  • “My profile”;
  • 左侧 “API Tokens”;
  • “Create Token”;
  • “Edit zone DNS” 选择 “Use template”;
  • “Zone Resources” 下可以选择指定的 zone;
  • 如果确定服务器的 IP 可以设置 “Client IP Address Filtering”;
  • “Continue to summary”;
  • 复制 API token.
    [^3]

设置 SSL/TLS 加密模式

  • 域名管理页面;
  • 左侧 “SSL/TLS”;
  • 子菜单 “Overview”;
  • 模式选择 “Full” 或者 “Full (strict)”[^4].
    [^3]

Caddy

因为 Cloudflare 的 DNS 记录设置中选择了 “Proxied”, 现在服务器前相当于添加了一个 Cloudflare 的反向代理, 所以 Caddy 默认获取证书使用的 ACME HTTP-01 模式无法使用, 故利用 Caddy 的一个 Cloudflare 模块使用 ACME DNS-01 模式获取证书 - 这个模式通过修改 Cloudflare 上指定域名的 DNS 记录用以验证.[^5] 但由于这个模块本身并不包含在大部分软件包管理器中, 故需要手动编译包含该模块的 Caddy.

自定义编译

自定义编译使用了 Caddy 官方推出的 xcaddy 工具. 编译 Caddy 时需要下载大量 Go 模块, 可能会占用较大量磁盘空间.

安装 xcaddy

1
yay -S xcaddy-bin

[^6]

编译

编译时选择临时文件夹 /tmp 作为编译目录.

1
2
cd /tmp
xcaddy build --with github.com/caddy-dns/cloudflare

待编译结束后, 将生成的 caddy 可执行文件复制到诸如 /usr/local/bin 文件夹即可. 注意环境变量 $PATH/usr/local/bin 的优先级一般高于 /usr/bin, 故如此操作会使自定义编译的 caddy 优先于发行版软件包管理器中安装的版本.

配置反向代理

笔者的 /etc/caddy/Caddyfile 中存在如下的配置:

1
import /etc/caddy/conf.d/*

因此选择在 /etc/caddy/conf.d/tiddlywiki 的文件中编写:

1
2
3
4
5
6
7
<domain>:443 {
tls {
dns cloudflare <token>
}

reverse_proxy localhost:8080
}

以上假设 TiddlyWiki 暴露在本地网络的端口为 8080. <domain>“添加 DNS 记录” 小节中设置的域名, <token>“申请 API token” 小节中申请到的 API token.

随后, 格式化配置文件:

1
2
3
sudo caddy fmt --overwrite /etc/caddy/Caddyfile
# 或者
sudo caddy fmt --overwrite /etc/caddy/conf.d/tiddlywiki

此时则可以重启 Caddy 服务检查是否正确配置 Caddy.

添加 HTTP basic auth

HTTP basic auth 的效果简单来说, 会在访问页面的时候提示输入用户名和密码.

先使用 Caddy 生成哈希后的密码:

1
caddy_naiveproxy hash-password --plaintext <plain password>

其中 <plain password> 为明文密码. 随后修改对应的 Caddyfile:

1
2
3
4
5
6
7
<domain>:443 {
...
basicauth /* {
<username> <hashed password>
}
...
}

其中 <username> 为 HTTP basic auth 中的用户名, <hashed password> 为上一步操作中生成的明文密码的哈希结果.

测试

略.

[^1]: https://tiddlywiki.com/static/PluginFolders.html.
[^2]: https://tiddlywiki.com/static/Environment%2520Variables%2520on%2520Node.js.html.
[^3]: https://samjmck.com/en/blog/using-caddy-with-cloudflare/#2-using-a-lets-encrypt-certificate.
[^4]: 因为以下示例使用 Caddy 自动申请 Let’s Encrypt 证书, 所以选择 “Full (strict)” 也不会被阻断连接.
[^5]: https://samjmck.com/en/blog/using-caddy-with-cloudflare/#configuration-with-proxy-enabled.
[^6]: xcaddy-bin 的版本可能略旧于 xcaddy, 但前者省略了编译 xcaddy 的过程.

Arch Linux 安装 TiddlyWiki + 配置服务 + 添加自定义插件 + Cloudflare 代理 + Caddy 反向代理

https://blog.tamako.work/techdev/arch/tiddlywiki/

Posted on

2023-05-12

Updated on

2023-05-12

Licensed under

Comments