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: 一个非线性个人 wiki;
- xcaddy: 自定义编译
caddy
; - caddy: 反向代理.
TiddlyWiki
安装
1 | npm install -g tiddlywiki |
检查版本
1 | $ tiddlywiki --version |
初始化并监听
1 | cd /path/to/mywiki |
若在终端中输出了诸如缺少 "tiddlywiki/filesystem"
, "tiddlywiki/tiddlyweb"
插件的消息, 请在 /path/to/mywiki
中的 tiddlywiki.info
对应位置添加如下内容:
1 | { |
随后重新监听.
配置服务
为方便控制启动参数, 可以考虑在 /path/to/mywiki
中新建如下的启动脚本 (例如, 命名为 server.sh
):
1 | !/bin/sh |
并使用 chmod +x server.sh
使其可以被执行.
确认 TiddlyWiki 可以正常工作后, 新建 /usr/lib/systemd/system/tiddlywiki.service
文件, 添加如下内容:
1 | [Unit] |
其中 /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 | /path/to/mywiki/ |
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 | cd /tmp |
待编译结束后, 将生成的 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 | <domain>:443 { |
以上假设 TiddlyWiki 暴露在本地网络的端口为 8080. <domain>
为 “添加 DNS 记录” 小节中设置的域名, <token>
为 “申请 API token” 小节中申请到的 API token.
随后, 格式化配置文件:
1 | sudo caddy fmt --overwrite /etc/caddy/Caddyfile |
此时则可以重启 Caddy 服务检查是否正确配置 Caddy.
添加 HTTP basic auth
HTTP basic auth 的效果简单来说, 会在访问页面的时候提示输入用户名和密码.
先使用 Caddy 生成哈希后的密码:
1 | caddy_naiveproxy hash-password --plaintext <plain password> |
其中 <plain password>
为明文密码. 随后修改对应的 Caddyfile:
1 | <domain>:443 { |
其中 <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 反向代理
1.Android 使用 Gradle 命令行签名 APK
2.Arch Linux 在 ASUS Zenbook S 13 OLED (UM5302TA) 上的 patch
3.使用 GPG 加密、解密和验证信息
4.Kotlin 简要语法快速学习
5.【Arch Linux】使用 Wine 运行 Galgame
6.【Arch Linux】编译安装 AUR 上的 Linux 内核
7.【Arch Linux】本地化:简体中文
8.Arch Linux 物理机安装大体思路和部分实现细节(MBR & GPT)
1.【ACG音乐分享】Ceui《今、歩き出す君へ》
2.使用 GPG 加密、解密和验证信息
3.【翻译】如何编写 Git 提交消息
4.Linux 时间操作及其同步
5.【实测】Python 和 C++ 下字符串查找的速度对比
6.Codeforces 1312B: Bogosort