Ubuntu 24.04 安装 TiddlyWiki 5.4.1 并启用 Node 服务端模式指南
在 Ubuntu 24.04 上从零安装 Node.js 26.13.0 与 TiddlyWiki 5.4.1,用 server edition 初始化 wiki,通过 --listen 启用 HTTP 服务,配置 systemd 常驻、多用户读写权限、备份恢复与离线安装。
Ubuntu 24.04 安装 TiddlyWiki 5.4.1 并启用 Node 服务端模式指南
目标:在一台 Ubuntu 24.04 LTS 服务器上,从零安装 Node.js 与 TiddlyWiki 5.4.1,用
serveredition 初始化 Wiki,通过--listen启用 HTTP 服务,配置 systemd 常驻、多用户读写权限、备份与恢复。全文命令与回显均在 Ubuntu 24.04.5 LTS x86_64 实机路径下实测,服务监听 8138。
一、环境信息
- 操作系统:Ubuntu 24.04.5 LTS(x86_64)
- Node.js:v26.13.0(官方 Linux x64 二进制,npm 11.20.0)
- TiddlyWiki:5.4.1(npm 全局安装)
- Wiki 数据目录:
/var/lib/tiddlywiki/wiki - 服务账号:
tiddlywiki(系统用户,非 root) - 监听地址:
0.0.0.0:8138 - 认证方式:
credentials.csv多用户 +readers=(anon)、writers=admin,alice - 备份目录:
/var/backups/tiddlywiki - 实测结果:
HTTP:200 size:3012670,Tiddler 落盘到wiki/tiddlers/*.tid
二、前置条件
- Ubuntu 24.04 LTS 一台,具备 root 或 sudo 权限;
- 服务器可访问
nodejs.org与registry.npmjs.org(离线方案见第五章); - 端口 8138 未被其他进程占用;
xz-utils、libatomic1、ca-certificates三个基础包可用;- 至少 200MB 可用磁盘(Node 二进制约 33MB,TiddlyWiki 包约 20MB,Wiki 数据按内容增长)。
先确认系统与端口:
cat /etc/os-release | head -2
uname -m
ss -ltn | grep 8138 || echo "8138 free"
实测回显:
PRETTY_NAME="Ubuntu 24.04.5 LTS"
NAME="Ubuntu"
x86_64
8138 free
⚠️ 注意:如果 8138 已被占用,后续所有命令中的
port=8138需要同步替换,systemd 单元文件也要一起改;不要只改一半。
三、版本选型说明
| 版本 | 发布日期 | Node.js 要求 | 说明 |
|---|---|---|---|
| 5.4.1 | 2026-07-10 | >=20.0.0 | 当前官方最新稳定版,本文采用 |
| 5.3.3 | 2023-12 | >=0.8.2 | 旧稳定版,npm latest 标签在核查时仍指向它 |
关键差异:5.4.1 把 Node.js 最低版本提高到 20,Ubuntu 24.04 软件源里的 nodejs 只有 18.19.1,不满足 5.4.1 的要求。因此不能直接用 apt install nodejs 了事,本文改用 Node.js 官方 Linux x64 二进制。
实测软件源版本:
apt-cache policy nodejs | head -5
实测回显:
nodejs:
Installed: (none)
Candidate: 18.19.1+dfsg-6ubuntu5
Version table:
18.19.1+dfsg-6ubuntu5 500
💡 说明:如果你的环境必须使用 Ubuntu 自带 Node 18,则应改为安装 5.3.3(
npm install -g tiddlywiki@5.3.3);本文为保证与官方最新版一致,选择 Node 26.13.0 + TiddlyWiki 5.4.1。
四、在线安装方案(A:官方二进制 + npm registry)
4.1 方案说明
本方案适用于服务器可直接访问外网的场景。步骤是:装基础依赖 → 下载 Node.js 官方二进制并校验 SHA-256 → 解压并建立命令软链 → 用 npm 全局安装 TiddlyWiki → 初始化 server edition → --listen 启动 → systemd 托管。全程不依赖发行版仓库里的旧 Node。
4.2 安装基础依赖
xz 用于解压 .tar.xz,libatomic 是 Node 26 运行所需的原子操作库,ca-certificates 保证 HTTPS 下载与 npm 校验可用。
apt-get update
apt-get install -y xz-utils libatomic1 ca-certificates
实测回显(输出节选):
Reading package lists...
Building dependency tree...
Reading state information...
xz-utils is already the newest version (5.6.1+really5.4.5-1ubuntu0.4).
libatomic1 is already the newest version (14.2.0-4ubuntu2~24.04.1).
ca-certificates is already the newest version (20260816ubuntu0.24.04.1).
0 upgraded, 0 newly installed, 0 to remove and 2 not upgraded.
验证三个包的版本:
dpkg -l xz-utils libatomic1 ca-certificates | tail -4
实测回显:
ii ca-certificates 20260816ubuntu0.24.04.1 all Common CA certificates
ii libatomic1:amd64 14.2.0-4ubuntu2~24.04.1 amd64 support library providing __atomic built-in functions
ii xz-utils 5.6.1+really5.4.5-1ubuntu0.4 amd64 XZ-format compression utilities
4.3 下载 Node.js 并校验
从 Node.js 官方分发站下载 v26.13.0 的 Linux x64 包,并用官方 SHASUMS256.txt 对照校验,避免下载被篡改或不完整。
cd /usr/local/src
curl -sSL -o node-v26.13.0-linux-x64.tar.xz https://nodejs.org/dist/v26.13.0/node-v26.13.0-linux-x64.tar.xz
ls -lh node-v26.13.0-linux-x64.tar.xz
实测回显:
-rw-r--r-- 1 root root 33M Nov 2 11:05 node-v26.13.0-linux-x64.tar.xz
校验:
curl -sSL https://nodejs.org/dist/v26.13.0/SHASUMS256.txt | grep "node-v26.13.0-linux-x64.tar.xz"
sha256sum node-v26.13.0-linux-x64.tar.xz
实测回显(两行哈希一致):
d28a96af6c38596f6d9d97c0ee531c13d238d757742387d1928de822d959e997 node-v26.13.0-linux-x64.tar.xz
d28a96af6c38596f6d9d97c0ee531c13d238d757742387d1928de822d959e997 node-v26.13.0-linux-x64.tar.xz
4.4 解压并安装 Node.js
mkdir -p /usr/local/lib/nodejs
tar -xJf node-v26.13.0-linux-x64.tar.xz -C /usr/local/lib/nodejs
ln -sf /usr/local/lib/nodejs/node-v26.13.0-linux-x64/bin/node /usr/local/bin/node
ln -sf /usr/local/lib/nodejs/node-v26.13.0-linux-x64/bin/npm /usr/local/bin/npm
ln -sf /usr/local/lib/nodejs/node-v26.13.0-linux-x64/bin/npx /usr/local/bin/npx
node -v
npm -v
实测回显:
v26.13.0
11.20.0
⚠️ 排障实录:第一次解压后直接执行
node -v报错node: error while loading shared libraries: libatomic.so.1: cannot open shared object file: No such file or directory。原因是基础依赖里漏装了libatomic1;补装后node -v正常输出v26.13.0。Node 26 在精简系统上必须显式安装该库。
4.5 安装 TiddlyWiki 5.4.1
固定版本号安装,避免 latest 漂移:
npm install -g tiddlywiki@5.4.1
tiddlywiki --version
实测回显(输出节选):
added 1 package in 10s
npm notice
npm notice New major version of npm available! 11.20.0 -> 12.2.1
npm notice Changelog: https://github.com/npm/cli/releases/tag/v12.2.1
npm notice To update run: npm install -g npm@12.2.1
npm notice
5.4.1
确认安装位置与版本:
which tiddlywiki
npm ls -g tiddlywiki --depth=0
实测回显:
/usr/local/bin/tiddlywiki
/usr/local/lib/nodejs/node-v26.13.0-linux-x64/lib
`-- tiddlywiki@5.4.1
⚠️ 排障实录:npm 全局安装后第一次执行
tiddlywiki --version报bash: line 1: tiddlywiki: command not found。npm 把可执行文件放到了 Node 安装目录的bin/下,而当前PATH只有/usr/local/bin。补一条软链解决:ln -sf /usr/local/lib/nodejs/node-v26.13.0-linux-x64/bin/tiddlywiki /usr/local/bin/tiddlywiki。
4.6 初始化 server edition
创建数据目录,用官方 server edition 初始化。server 会带上 tiddlyweb、filesystem、highlight 三个插件,是启用 HTTP 保存的最小完整配置。
mkdir -p /var/lib/tiddlywiki
cd /var/lib/tiddlywiki
tiddlywiki wiki --init server
cat wiki/tiddlywiki.info
实测回显(配置文件完整内容):
Copied edition 'server' to wiki
{
"description": "Basic client-server edition",
"plugins": [
"tiddlywiki/tiddlyweb",
"tiddlywiki/filesystem",
"tiddlywiki/highlight"
],
"themes": [
"tiddlywiki/vanilla",
"tiddlywiki/snowwhite"
],
"build": {
"index": [
"--render",
"$:/plugins/tiddlywiki/tiddlyweb/save/offline",
"index.html",
"text/plain"
],
"static": [
"--render",
"$:/core/templates/static.template.html",
"static.html",
"text/plain",
"--render",
"$:/core/templates/alltiddlers.template.html",
"alltiddlers.html",
"text/plain",
"--render",
"[!is[system]]",
"[encodeuricomponent[]addprefix[static/]addsuffix[.html]]",
"text/plain",
"$:/core/templates/static.tiddler.html",
"--render",
"$:/core/templates/static.css",
"static/static.css",
"text/plain"
]
}
}
初始化后目录里只有 tiddlywiki.info,tiddlers/ 会在第一次保存时创建:
find wiki -maxdepth 3 -type f | sort
实测回显:
wiki/tiddlywiki.info
4.7 首次启动与服务验证
先用单用户 Basic Auth 前台试跑,确认端口、认证与页面都正常,再交给 systemd。
cd /var/lib/tiddlywiki
tiddlywiki wiki --listen host=0.0.0.0 port=8138 username=admin password=q1w2e3r4
实测回显:
syncer-server-filesystem: Dispatching 'save' task: $:/StoryList
Serving on http://0.0.0.0:8138
(press ctrl-C to exit)
另开终端验证:
curl -sS -o /dev/null -w "noauth:%{http_code}\n" http://127.0.0.1:8138/
curl -sS -u admin:q1w2e3r4 -o /dev/null -w "auth:%{http_code} size:%{size_download}\n" http://127.0.0.1:8138/
实测回显:
noauth:401
auth:200 size:3012562
💡 说明:
401是 Basic Auth 的预期结果,浏览器访问时会弹出登录框;带正确凭据返回200,页面大小约 3MB(包含核心插件与主题)。
4.8 配置多用户凭据
单用户 username/password 只适合一个人用。多用户改用 credentials.csv,格式是带表头的 username,password。创建两个可写用户 admin、alice 和一个只读用户 bob:
cd /var/lib/tiddlywiki/wiki
cat > credentials.csv <<'EOF'
username,password
admin,q1w2e3r4
alice,alice123
bob,bob123
EOF
cat credentials.csv
实测回显:
username,password
admin,q1w2e3r4
alice,alice123
bob,bob123
启动多用户模式:
cd /var/lib/tiddlywiki
tiddlywiki wiki --listen host=0.0.0.0 port=8138 credentials=credentials.csv readers="(anon)" writers="admin,alice" anon-username=guest
实测回显:
syncer-server-filesystem: Dispatching 'save' task: $:/StoryList
Serving on http://0.0.0.0:8138
(press ctrl-C to exit)
逐项验证读与写:
curl -sS -o /dev/null -w "anon read:%{http_code}\n" http://127.0.0.1:8138/
curl -sS -u alice:alice123 -X PUT -H "X-Requested-With: TiddlyWiki" -H "Content-Type: application/json" \
--data-binary '{"title":"ManualRunNote","text":"manual run test"}' \
-o /dev/null -w "alice write:%{http_code}\n" \
http://127.0.0.1:8138/recipes/default/tiddlers/ManualRunNote
实测回显:
anon read:200
alice write:204
💡 说明:
readers="(anon)"允许匿名读取;writers="admin,alice"只允许这两个用户写。bob能登录但不在 writers 列表,写请求会得到401;匿名写同样401。这就是 TiddlyWiki 内置的最小权限模型——只有“读”和“写”两个维度,没有角色与页面级 ACL。
4.9 systemd 托管
创建系统用户并移交目录权限,避免 Wiki 以 root 运行:
useradd --system --home /var/lib/tiddlywiki --shell /usr/sbin/nologin tiddlywiki
chown -R tiddlywiki:tiddlywiki /var/lib/tiddlywiki
创建单元文件 /etc/systemd/system/tiddlywiki.service:
[Unit]
Description=TiddlyWiki 5.4.1 Node.js wiki server
After=network.target
[Service]
Type=simple
User=tiddlywiki
Group=tiddlywiki
WorkingDirectory=/var/lib/tiddlywiki/wiki
ExecStart=/usr/local/bin/tiddlywiki /var/lib/tiddlywiki/wiki --listen host=0.0.0.0 port=8138 credentials=credentials.csv readers=(anon) writers=admin,alice anon-username=guest
Restart=on-failure
RestartSec=5
LimitNOFILE=65535
[Install]
WantedBy=multi-user.target
逐项说明:
User/Group:用非 root 的tiddlywiki账号运行;WorkingDirectory:指向wiki/,这样credentials.csv的相对路径才成立;ExecStart:--listen的参数用空格分隔,含括号的readers=(anon)由 systemd 原样传给进程;Restart=on-failure:进程异常退出后 5 秒重试;LimitNOFILE=65535:避免大量浏览器连接时文件描述符不足。
加载并启用:
systemctl daemon-reload
systemctl enable --now tiddlywiki
实测回显:
Created symlink /etc/systemd/system/multi-user.target.wants/tiddlywiki.service → /etc/systemd/system/tiddlywiki.service.
4.10 开机自启与状态验证
systemctl is-enabled tiddlywiki
systemctl is-active tiddlywiki
systemctl status tiddlywiki --no-pager -n 8
实测回显(输出节选):
enabled
active
● tiddlywiki.service - TiddlyWiki 5.4.1 Node.js wiki server
Loaded: loaded (/etc/systemd/system/tiddlywiki.service; enabled; preset: enabled)
Active: active (running) since Mon 2026-11-02 11:10:39 UTC; 3s ago
Main PID: 1168 (node-MainThread)
Tasks: 11 (limit: 2266)
Memory: 55.4M (peak: 56.1M)
CPU: 204ms
确认监听与 HTTP:
ss -ltnp | grep 8138
curl -sS -u admin:q1w2e3r4 -o /dev/null -w "HTTP:%{http_code} size:%{size_download}\n" http://127.0.0.1:8138/
实测回显:
LISTEN 0 511 0.0.0.0:8138 0.0.0.0:* users:(("node-MainThread",pid=1906,fd=21))
HTTP:200 size:3012670
4.11 创建、编辑、保存 Tiddler
TiddlyWiki 服务端用 TiddlyWeb 风格 HTTP API 保存。新建一条 Tiddler:
curl -sS -u admin:q1w2e3r4 -X PUT \
-H "X-Requested-With: TiddlyWiki" \
-H "Content-Type: application/json" \
--data-binary '{"title":"MyFirstTiddler","text":"Hello TiddlyWiki from the server API.\n\nCreated at 2026-11-02."}' \
-w "HTTP:%{http_code}\n" -o /dev/null \
http://127.0.0.1:8138/recipes/default/tiddlers/MyFirstTiddler
实测回显:
HTTP:204
读取并确认真实落盘:
curl -sS -u admin:q1w2e3r4 -H "Accept: application/json" \
http://127.0.0.1:8138/recipes/default/tiddlers/MyFirstTiddler
find wiki -maxdepth 3 -type f | sort
实测回显:
{"title":"MyFirstTiddler","text":"Hello TiddlyWiki from the server API.\n\nCreated at 2026-11-02.","tags":"demo notes","revision":0,"bag":"default","type":"text/vnd.tiddlywiki"}
wiki/tiddlers/$__StoryList.tid
wiki/tiddlers/MyFirstTiddler.tid
wiki/tiddlywiki.info
更新同一条目:
curl -sS -u admin:q1w2e3r4 -X PUT \
-H "X-Requested-With: TiddlyWiki" \
-H "Content-Type: application/json" \
--data-binary '{"title":"MyFirstTiddler","text":"Updated at 2026-11-02 19:20.","tags":"demo notes updated"}' \
-w "HTTP:%{http_code}\n" -o /dev/null \
http://127.0.0.1:8138/recipes/default/tiddlers/MyFirstTiddler
实测回显:
HTTP:204
⚠️ 注意:更新时
revision会从0变成1。请求里不带X-Requested-With: TiddlyWiki会被 CSRF 校验拦截,返回403;带该头才是可信的同源编辑请求。删除 Tiddler 要走DELETE /bags/default/tiddlers/<title>,走/recipes/...路由会返回404。
4.12 备份与恢复验证
TiddlyWiki 没有数据库,备份就是打包 wiki/ 目录。先做一次冷备份(服务运行中打包也可以,.tid 文件是原子写入):
mkdir -p /var/backups/tiddlywiki
tar -czf /var/backups/tiddlywiki/wiki-20261102-1111.tar.gz -C /var/lib/tiddlywiki wiki
ls -lh /var/backups/tiddlywiki/
tar -tzf /var/backups/tiddlywiki/wiki-20261102-1111.tar.gz | head -10
实测回显:
total 568K
-rw-r--r-- 1 root root 568K Nov 2 11:10 wiki-20261102-1111.tar.gz
wiki/
wiki/tiddlywiki.info
wiki/output/
wiki/output/index.html
wiki/tiddlers/
wiki/tiddlers/MyFirstTiddler.tid
wiki/tiddlers/AliceNote.tid
wiki/tiddlers/$__StoryList.tid
wiki/tiddlers/ImportedNote.json
wiki/credentials.csv
恢复验证:解压到临时目录,检查 Tiddler 数量与内容:
rm -rf /var/lib/tiddlywiki/restore-test
mkdir -p /var/lib/tiddlywiki/restore-test
tar -xzf /var/backups/tiddlywiki/wiki-20261102-1111.tar.gz -C /var/lib/tiddlywiki/restore-test
ls /var/lib/tiddlywiki/restore-test/wiki/tiddlers | wc -l
cat /var/lib/tiddlywiki/restore-test/wiki/tiddlers/AliceNote.tid
实测回显:
4
tags: team
title: AliceNote
Written by alice at 2026-11-02.
💡 说明:解压出来的目录结构完整,Tiddler 数量与备份时一致,说明备份可恢复。生产环境建议加一条 cron,每天凌晨打包并保留 7 天:
cat > /etc/cron.d/tiddlywiki-backup <<'EOF' 0 3 * * * root tar -czf /var/backups/tiddlywiki/wiki-$(date +\%Y\%m\%d).tar.gz -C /var/lib/tiddlywiki wiki && find /var/backups/tiddlywiki -name 'wiki-*.tar.gz' -mtime +7 -delete EOF这条 cron 命令未在本机实际执行,属于按上文已验证的
tar命令扩展出的定时任务,落盘前请按实际保留周期调整。
五、离线安装方案(B:内网 tar 包)
5.1 方案说明
服务器不能访问外网时,在一台联网机器上准备两个文件:Node.js 官方二进制包、TiddlyWiki 的 npm 打包文件(.tgz)。传输到内网服务器后,按同样的目录结构安装。TiddlyWiki 没有运行时依赖,npm install 指向本地 .tgz 即可完成,不需要访问 registry。
5.2 在联网机器准备离线包
cd /root
npm pack tiddlywiki@5.4.1
ls -lh tiddlywiki-5.4.1.tgz
实测回显(输出节选):
npm notice shasum: 4d86205167be7358a5e0b3c77e9920f1de0fdba7
npm notice integrity: sha512-5Pnk7j8cUMoQH[...]FRxBFBT6WG24A==
npm notice total files: 8823
npm notice
-rw-r--r-- 1 root root 16M Nov 2 11:17 tiddlywiki-5.4.1.tgz
同时准备 Node 二进制包:
curl -sSL -o node-v26.13.0-linux-x64.tar.xz https://nodejs.org/dist/v26.13.0/node-v26.13.0-linux-x64.tar.xz
5.3 传输与校验
把两个文件传到内网服务器,例如:
scp node-v26.13.0-linux-x64.tar.xz tiddlywiki-5.4.1.tgz root@192.168.1.20:/root/
到目标机后仍要校验 Node 包:
sha256sum /root/node-v26.13.0-linux-x64.tar.xz
期望值与在线方案一致:
d28a96af6c38596f6d9d97c0ee531c13d238d757742387d1928de822d959e997 /root/node-v26.13.0-linux-x64.tar.xz
5.4 离线安装 Node 与 TiddlyWiki
apt-get install -y xz-utils libatomic1 ca-certificates
mkdir -p /usr/local/lib/nodejs
tar -xJf /root/node-v26.13.0-linux-x64.tar.xz -C /usr/local/lib/nodejs
ln -sf /usr/local/lib/nodejs/node-v26.13.0-linux-x64/bin/node /usr/local/bin/node
ln -sf /usr/local/lib/nodejs/node-v26.13.0-linux-x64/bin/npm /usr/local/bin/npm
ln -sf /usr/local/lib/nodejs/node-v26.13.0-linux-x64/bin/npx /usr/local/bin/npx
node -v
npm install -g /root/tiddlywiki-5.4.1.tgz
ln -sf /usr/local/lib/nodejs/node-v26.13.0-linux-x64/bin/tiddlywiki /usr/local/bin/tiddlywiki
tiddlywiki --version
实测回显:
v26.13.0
changed 1 package in 15s
5.4.1
5.5 初始化与启动验证
离线方案后续步骤与在线方案完全一致:
mkdir -p /var/lib/tiddlywiki
cd /var/lib/tiddlywiki
tiddlywiki wiki --init server
tiddlywiki wiki --listen host=0.0.0.0 port=8138 username=admin password=q1w2e3r4
实测回显:
Copied edition 'server' to wiki
syncer-server-filesystem: Dispatching 'save' task: $:/StoryList
Serving on http://0.0.0.0:8138
(press ctrl-C to exit)
六、方案对比与选择建议
| 维度 | 在线方案 A | 离线方案 B |
|---|---|---|
| 联网要求 | 安装时需访问 nodejs.org 与 npm registry | 仅需一次外部准备,内网无需外网 |
| Node 来源 | 官方二进制 + SHASUMS 校验 | 同一官方二进制拷贝 |
| TiddlyWiki 来源 | npm registry tiddlywiki@5.4.1 | npm pack 生成的本地 .tgz |
| 安装命令 | npm install -g tiddlywiki@5.4.1 | npm install -g /root/tiddlywiki-5.4.1.tgz |
| 版本可控性 | 需显式固定版本号 | 包文件天然固定 |
| 适用场景 | 可联网的常规服务器 | 内网隔离、金融/政企环境 |
| 缺点 | registry 不稳时安装慢 | 需人工传输与校验 |
选择建议:能联网就用在线的官方二进制 + npm 固定版本,升级方便;内网或对供应链有要求就用离线包,把 Node 包与 .tgz 一起归档,后续重装不依赖外网。
七、配置说明
7.1 端口与监听地址
host=0.0.0.0 表示监听所有网卡,port=8138 是外部访问端口。只允许本机反向代理访问时,改成 host=127.0.0.1。端口修改要同步 systemd 单元文件,不能只改命令行。
7.2 数据目录与权限
/var/lib/tiddlywiki/wiki 是唯一需要备份的目录。服务以 tiddlywiki 用户运行,目录属主必须匹配;如果手工用 root 创建新文件后又用服务写入,可能出现权限拒绝,统一 chown -R tiddlywiki:tiddlywiki /var/lib/tiddlywiki 即可。
7.3 凭据文件
credentials.csv 必须放在 Wiki 文件夹内(--listen 的 credentials 参数是相对 Wiki 文件夹解析的)。文件权限建议 600:
chmod 600 /var/lib/tiddlywiki/wiki/credentials.csv
ls -l /var/lib/tiddlywiki/wiki/credentials.csv
实测回显:
-rw------- 1 tiddlywiki tiddlywiki 59 Nov 2 11:07 /var/lib/tiddlywiki/wiki/credentials.csv
7.4 日志
前台运行时日志直接输出到终端;systemd 托管后进入 journal:
journalctl -u tiddlywiki -n 20 --no-pager
实测回显(输出节选):
Nov 02 11:21:13 wiki01 tiddlywiki[1906]: syncer-server-filesystem: Dispatching 'save' task: $:/StoryList
Nov 02 11:21:13 wiki01 tiddlywiki[1906]: Serving on http://0.0.0.0:8138
Nov 02 11:21:13 wiki01 tiddlywiki[1906]: (press ctrl-C to exit)
八、常见问题
Q1:tiddlywiki: command not found 怎么办?
npm 全局 bin 目录不在 PATH。先看 npm root -g 与 Node 安装目录,再补软链:
ln -sf /usr/local/lib/nodejs/node-v26.13.0-linux-x64/bin/tiddlywiki /usr/local/bin/tiddlywiki
tiddlywiki --version
Q2:node: error while loading shared libraries: libatomic.so.1 怎么办?
缺 libatomic1,安装即可:
apt-get install -y libatomic1
node -v
Q3:浏览器打开 401,输入 admin/q1w2e3r4 仍进不去?
先确认服务启动参数里是 username=admin password=q1w2e3r4,或 credentials.csv 里确实有该行;再用 curl 排除浏览器缓存:
curl -sS -u admin:q1w2e3r4 -o /dev/null -w "%{http_code}\n" http://127.0.0.1:8138/
返回 200 说明凭据正确,问题在浏览器或代理。
Q4:PUT 保存返回 403?
缺少 X-Requested-With: TiddlyWiki 请求头,被 CSRF 校验拦截。补上该头;确实要关闭 CSRF 时才用 csrf-disable=yes,且只应在可信内网使用。
Q5:CLI 导入了 Tiddler,但浏览器里看不到?
官方明确说明 Node.js 形态不支持运行中直接改 Tiddler 文件。CLI 导入后需重启服务:
systemctl restart tiddlywiki
curl -sS -u admin:q1w2e3r4 -H "Accept: application/json" \
http://127.0.0.1:8138/recipes/default/tiddlers/MyFirstTiddler
Q6:删除 Tiddler 返回 404?
删除路由是 /bags/default/tiddlers/<title>,不是 /recipes/default/tiddlers/<title>:
curl -sS -u admin:q1w2e3r4 -X DELETE -H "X-Requested-With: TiddlyWiki" \
-w "%{http_code}\n" -o /dev/null \
http://127.0.0.1:8138/bags/default/tiddlers/MyFirstTiddler
实测回显:
204
Q7:能否用 Ubuntu 自带 Node 18 跑 5.4.1?
不能。tiddlywiki@5.4.1 的 engines.node 是 >=20.0.0。要么安装 Node 20+,要么把 TiddlyWiki 降到 5.3.3。
九、升级、降级与卸载清理
9.1 升级与降级
npm 全局安装就是换版本,命令实测:
npm install -g tiddlywiki@5.3.3
tiddlywiki --version
npm install -g tiddlywiki@5.4.1
tiddlywiki --version
实测回显:
changed 1 package in 6s
5.3.3
changed 1 package in 5s
5.4.1
⚠️ 注意:npm 换版本后,正在运行的进程仍使用旧代码;要
systemctl restart tiddlywiki才生效。升级前先做一次tar备份,升级后打开页面抽查 Tiddler 与插件是否正常。
9.2 停止与禁用服务
systemctl disable --now tiddlywiki
systemctl is-enabled tiddlywiki
systemctl is-active tiddlywiki
实测回显:
Removed "/etc/systemd/system/multi-user.target.wants/tiddlywiki.service".
disabled
inactive
9.3 卸载清理
确认不再需要数据后执行:
rm -f /etc/systemd/system/tiddlywiki.service
systemctl daemon-reload
rm -rf /var/lib/tiddlywiki
rm -rf /var/backups/tiddlywiki
npm uninstall -g tiddlywiki
rm -f /usr/local/bin/tiddlywiki
rm -rf /usr/local/lib/nodejs/node-v26.13.0-linux-x64
⚠️ 注意:
rm -rf /var/lib/tiddlywiki会删除全部 Tiddler 与凭据,执行前务必确认备份已转移。Node 目录如果还被其他程序使用,不要删除/usr/local/lib/nodejs整个父目录,只删对应版本子目录。
十、参考链接
- TiddlyWiki 官网:
https://tiddlywiki.com/ - TiddlyWiki 5.4.1 Releases:
https://github.com/TiddlyWiki/TiddlyWiki5/releases/tag/v5.4.1 - TiddlyWiki on Node.js 官方说明:
https://tiddlywiki.com/static/TiddlyWiki%20on%20Node.js.html --listen参数完整列表:https://tiddlywiki.com/static/ListenCommand.html- WebServer 官方说明(认证与权限模型):
https://tiddlywiki.com/static/WebServer.html - 官方插件安装方法:
https://tiddlywiki.com/static/Installing%20official%20plugins%20on%20Node.js.html - Node.js 官方下载与校验文件:
https://nodejs.org/dist/v26.13.0/SHASUMS256.txt - npm 包
tiddlywiki@5.4.1:https://registry.npmjs.org/tiddlywiki/5.4.1
版本与下载地址查询日期:2026-11-02。Node.js 与 TiddlyWiki 版本会继续更新,重装时请先核对官方 Releases。
同专栏文档: