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 常驻、多用户读写权限、备份恢复与离线安装。

TiddlyWikiTiddlyWikiWikiNode.js知识库2026/11/02

Ubuntu 24.04 安装 TiddlyWiki 5.4.1 并启用 Node 服务端模式指南

目标:在一台 Ubuntu 24.04 LTS 服务器上,从零安装 Node.js 与 TiddlyWiki 5.4.1,用 server edition 初始化 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.12026-07-10>=20.0.0当前官方最新稳定版,本文采用
5.3.32023-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.1npm pack 生成的本地 .tgz
安装命令npm install -g tiddlywiki@5.4.1npm 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。

同专栏文档:

Ubuntu 24.04 安装 TiddlyWiki 5.4.1 并启用 Node 服务端模式指南 - Quzuo