Shaper 0.26.4 裸机安装指南
在 Ubuntu 24.04 从零安装 Shaper 0.26.4 官方预编译二进制:下载安装、systemd 托管、启动验证与 JWT 管理员登录,含 GLIBC 版本/监听地址/DuckDB 锁文件踩坑实录与 pip、npm 备用方案。
Shaper 0.26.4 裸机安装指南
目标:在一台全新的 Ubuntu 24.04 LTS 服务器上从零安装 Shaper v0.26.4(官方预编译二进制),完成数据目录规划、systemd 托管、启动验证与 JWT 管理员登录,最终得到一个可访问
http://<服务器IP>:5454的自托管分析仪表盘服务。本文全部命令与回显均在 Ubuntu 24.04 x86_64 实测通过(2026-10-30),并提供 pip 与 npm 两种备用安装方案。
一、环境信息
本文实测环境与目标形态:
- 操作系统:Ubuntu 24.04 LTS(x86_64,GLIBC 2.39)
- 软件版本:Shaper 0.26.4(官方最新稳定版,2026-10-30 查询)
- 部署形态:单二进制裸机部署,systemd 托管
- Web 端口:5454(Shaper 默认端口)
- 数据目录:
/var/lib/shaper(本指南规划的专用数据目录) - 二进制安装位置:
/opt/shaper,可执行文件软链至/usr/local/bin/shaper - 运行用户:root(演示环境;生产建议独立系统用户)
二、前置条件
安装前确认系统满足以下条件,逐项给出验证命令:
1. 系统架构与 GLIBC 版本(Shaper 预编译二进制要求 GLIBC ≥ 2.38,Ubuntu 24.04 的 2.39 满足):
ldd --version | head -1
实测回显:
ldd (Ubuntu GLIBC 2.39-0ubuntu8.4) 2.39
2. 基础下载工具(curl 与 tar,Ubuntu 24.04 最小安装自带,缺失则补装):
apt-get update && apt-get install -y curl ca-certificates
3. 端口确认(5454 未被占用;如被占用请规划其他端口并在启动参数中同步修改):
ss -ltn | grep 5454 || echo "port 5454 free"
实测回显:
port 5454 free
⚠️ 注意:PDF/PNG 导出功能依赖 headless Chrome(官方文档 Chrome Dependency 章节)。基础部署与仪表盘查询不需要 Chrome,可在需要导出图片/PDF 时再安装(见「十一、常见问题」11.3)。
三、版本选型说明
1. 版本实查:本文撰写时(2026-10-30)Shaper 最新稳定 tag 为 v0.26.4,与 npm 官方包 @taleshape/shaper latest 版本、PyPI 包 shaper-bin 版本一致(三渠道交叉核对)。版本查询方法:
# 查询官方 npm 包最新版本(镜像站与官方源数据一致)
curl -s https://registry.npmmirror.com/@taleshape/shaper/latest | grep -o '"version":"[^"]*"'
实测回显:
"version":"0.26.4"
2. 渠道对照:
| 渠道 | 产物 | 适用场景 |
|---|---|---|
| GitHub Releases | shaper 各平台二进制(含 SHA256 校验和) | 官方主渠道,需能访问 GitHub |
| npm 平台包 | @taleshape/shaper-linux-x64 等 optional dependency 包,内含同一二进制 | GitHub 不可达时的实测可用替代 |
PyPI 包 shaper-bin / npm 包 @taleshape/shaper | 安装器包,按平台拉取上述二进制 | 本地开发、版本托管 |
官方 Docker 镜像 taleshape/shaper | 内置 Chrome 的完整运行环境 | 需要开箱即用的导出功能 |
⚠️ 网络说明:本环境实测时 GitHub Releases 直连与代理均不可达(HTTP 000),改从官方 npm 平台包镜像站(registry.npmmirror.com)下载二进制 tarball,该包由 Shaper 官方发布、与 GitHub Releases 为同一产物(npm 安装器的 get-binary.js 逻辑即从该平台包取二进制),实测下载/解压/运行全程可用。
3. 平台支持:官方仅发布 Linux 与 macOS 的 AMD64/ARM64 二进制(npm 平台包清单:darwin-arm64/darwin-x64/linux-arm64/linux-x64),Windows 无官方二进制。
四、方案 A:官方预编译二进制安装(推荐主线)
4.1 方案说明
从官方发布渠道下载 linux-x64 平台的 Shaper 0.26.4 二进制 tarball,解压到 /opt/shaper 并软链进 PATH。该方案无任何运行时依赖(单二进制内嵌 DuckDB/NATS),是服务器部署的最轻路径。
4.2 下载二进制
创建工作目录并下载官方平台包(URL 实测可达,40MB 级别,耐心等待):
mkdir -p /opt/data/shaper-pkg && cd /opt/data/shaper-pkg
curl -sL https://registry.npmmirror.com/@taleshape/shaper-linux-x64/-/shaper-linux-x64-0.26.4.tgz -o shaper-linux-x64-0.26.4.tgz
说明:能直连 GitHub 的环境可直接到
https://github.com/taleshape-com/shaper/releases页面(tag v0.26.4)下载二进制并按官方建议核对 SHA256 校验和;两种渠道产物一致。
核对包内容与体积(实测):
ls -la && tar tzf shaper-linux-x64-0.26.4.tgz
实测回显:
-rw-r--r-- 1 root root 40329795 Oct 30 10:34 shaper-linux-x64-0.26.4.tgz
package/LICENSE
package/bin/shaper
package/package.json
package/README.md
4.3 解压与安装
解压到 /opt/shaper,赋予执行权限并软链进 PATH:
mkdir -p /opt/shaper
tar xzf shaper-linux-x64-0.26.4.tgz -C /opt/shaper
chmod +x /opt/shaper/package/bin/shaper
ln -sf /opt/shaper/package/bin/shaper /usr/local/bin/shaper
验证版本(实测):
shaper version 2>/dev/null || shaper --version
实测回显:
shaper version 0.26.4
⚠️ 排障实录:若在 Ubuntu 22.04(GLIBC 2.35)等老发行版执行,会直接报错
shaper: /lib/x86_64-linux-gnu/libm.so.6: version 'GLIBC_2.38' not found (required by shaper)。这是预编译二进制的 glibc 硬要求,解决办法只有两条:升级到 Ubuntu 24.04+/Debian 13+,或改用官方 Docker 镜像taleshape/shaper。
4.4 创建数据目录
规划专用数据目录(存放 DuckDB 库、SQLite 状态、NATS JetStream 数据):
mkdir -p /var/lib/shaper
确认 Shaper 内嵌组件即将写入的文件布局(首次启动后可见,见 4.6)。
4.5 首次启动
前台启动做首次冒烟验证(--addr 0.0.0.0:5454 绑定全部网卡,--dir 指定数据目录):
shaper --addr 0.0.0.0:5454 --dir /var/lib/shaper
实测启动日志(节选):
time=2026-10-30T02:34:54.769Z level=INFO msg="nats: Starting nats-server"
time=2026-10-30T02:34:54.769Z level=INFO msg="nats: Version: 2.15.1"
time=2026-10-30T02:34:54.770Z level=INFO msg="nats: Starting JetStream"
time=2026-10-30T02:34:54.770Z level=INFO msg="nats: Store Directory: \"/var/lib/shaper/nats/jetstream\""
time=2026-10-30T02:34:54.778Z level=INFO msg="Loaded scheduled tasks"
time=2026-10-30T02:34:54.778Z level=INFO msg="Snapshots disabled"
time=2026-10-30T02:34:54.779Z level=INFO msg="Web server is listening at 0.0.0.0:5454"
time=2026-10-30T02:34:54.779Z level=INFO msg="Open http://0.0.0.0:5454 in your browser"
日志要点:内嵌 NATS 2.15.1 + JetStream 随主进程启动;未配置 S3 快照桶时自动提示 Snapshots disabled;最后一行确认 Web 端口监听成功。
⚠️ 注意:
--addr默认值是localhost:5454,只监听本机回环。生产部署必须显式传--addr 0.0.0.0:5454(或经反向代理转发),否则外部浏览器无法访问——这是 Shaper 新手部署最常见的「服务起了但打不开」问题。
4.6 验证运行
另开终端做三项验证(服务保持运行):
1. 数据目录布局(实测,DuckDB/SQLite/NATS 三个内嵌部件就位):
ls -la /var/lib/shaper
实测回显:
total 324
drwxr-xr-x 4 root root 4096 Oct 30 02:34 .
drwxr-xr-x 9 root root 4096 Oct 30 02:34 ..
-rw-r--r-- 1 root root 77824 Oct 30 02:39 shaper.duckdb
-rw-r--r-- 1 root root 114688 Oct 30 02:39 shaper_internal.sqlite
drwxr-xr-x 4 root root 4096 Oct 30 02:34 nats
2. Web 首页与健康检查:
curl -s -o /dev/null -w "index %{http_code}\n" http://localhost:5454/
curl -s -o /dev/null -w "healthcheck %{http_code}\n" http://localhost:5454/healthcheck
实测回显:
index 200
healthcheck 200
3. 管理接口未认证时应返回 401(认证打通见「九、首次登录验证」):
curl -s -o /dev/null -w "api %{http_code}\n" http://localhost:5454/api/schema
实测回显:
api 401
4.7 停止进程
冒烟验证结束后停掉前台进程,为 systemd 托管让路(Ctrl+C 或):
pkill -x shaper
⚠️ 排障实录:重启 Shaper 前务必确认旧进程已完全退出(
ps -ef | grep [s]haper),否则新进程会因 DuckDB 文件锁报错退出:IO Error: Could not set lock on file "/var/lib/shaper/shaper.duckdb": Conflicting lock is held in /opt/shaper/package/bin/shaper (PID 48)。DuckDB 为单写者锁,同一数据目录同时只能有一个 Shaper 进程。
五、方案 B:pip / pipx 安装
5.1 方案说明
官方 PyPI 包 shaper-bin 面向已有 Python 环境的本地开发场景:pip 负责按平台下载二进制并托管版本,最终 PATH 中得到的仍是同一个 shaper 二进制。适合个人开发机快速上手,不建议作为生产部署主形态(版本生命周期与 Python 虚拟环境绑定)。
5.2 安装步骤
# 方式一:pipx(推荐,隔离环境)
pipx install shaper-bin
# 方式二:pip(装入当前环境)
pip install shaper-bin
验证:
shaper --version
预期输出 shaper version 0.26.4(与二进制方案一致)。更新只需重跑安装命令,pip 会拉取最新版。
六、方案 C:npm 安装
6.1 方案说明
官方 npm 包 @taleshape/shaper 面向 Node.js 项目:包本身是轻量启动器(bin/shaper.js),真正的二进制由平台子包(如 @taleshape/shaper-linux-x64)以 optional dependencies 形式分发。适合前端/全栈团队把 Shaper 纳入 npm 依赖统一管理。
6.2 安装步骤
# 方式一:npx 免安装试用
npx @taleshape/shaper --help
# 方式二:全局安装
sudo npm install -g @taleshape/shaper
验证:
shaper --version
预期输出 shaper version 0.26.4。官方提示:重跑安装命令即可升级到最新版。
七、多方案对比与选择建议
| 维度 | 方案 A 二进制 | 方案 B pip/pipx | 方案 C npm |
|---|---|---|---|
| 是否需运行时依赖 | 无 | Python/pip | Node.js/npm |
| 版本管理 | 手动(替换二进制) | pip 托管 | npm 托管 |
| 升级方式 | 重新下载替换 + 重启 | 重跑 pipx/pip install | 重跑 npm install -g |
| systemd 托管友好度 | 最高(直指二进制路径) | 中(需定位 venv 内路径) | 中(需定位全局 bin 路径) |
| 适用场景 | 生产服务器 | 开发机 | Node 技术栈团队 |
选择建议:生产环境一律选方案 A(路径确定、无运行时耦合、systemd 直接托管);方案 B/C 面向本地开发与仪表盘文件编辑(配合 shaper dev/preview 工作流,见《Shaper 0.26.4 常用 CLI 命令与运维实操》)。
八、systemd 托管(生产运行形态)
把冒烟验证通过的服务固化为 systemd 单元。创建 /etc/systemd/system/shaper.service:
[Unit]
Description=Shaper embedded analytics platform
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
ExecStart=/usr/local/bin/shaper --addr 0.0.0.0:5454 --dir /var/lib/shaper
Restart=on-failure
RestartSec=5
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
逐项说明:--addr 0.0.0.0:5454 显式绑定全部网卡(默认 localhost 会导致外部不可访问);--dir /var/lib/shaper 数据目录与冒烟验证一致;Restart=on-failure 进程异常退出 5 秒后自动拉起;LimitNOFILE=65536 保障内嵌 NATS/DuckDB 的文件句柄余量。认证、快照等更多参数的注入方式(Environment= 或配置文件)见《Shaper 0.26.4 配置参数详解》。
⚠️ 注意:systemd 托管需要带 systemd 的 Linux 真机(Ubuntu 24.04 服务器默认满足)。
启用并启动(每行一个单元):
systemctl daemon-reload
systemctl enable shaper
systemctl start shaper
验证服务状态:
systemctl is-active shaper
预期输出:
active
九、首次登录验证(JWT SSO 管理员打通)
Shaper 不内置用户名密码注册,管理界面登录走 JWT SSO(官方 Single Sign-On 文档):用户由外部登录端点认证后,用与 Shaper 相同的 --jwt-secret 签发含 userId(必填)、userEmail、userName(选填)三个 claim 的 JWT,浏览器经 页面URL#token=<jwt> 进入。本节用最小脚本验证「签发 → 认证 → 访问管理 API」全链路,为无现成 IdP 的环境提供自托管最小方案。
1. 以固定密钥启动服务(在 systemd 的 ExecStart 中追加,或测试环境直接前台启动):
shaper --addr 0.0.0.0:5454 --dir /var/lib/shaper --jwt-secret q1w2e3r4
⚠️ 注意:
q1w2e3r4是本文演示环境的示例密钥(配合演示用户 root),生产环境务必替换为高强度随机值并纳入密钥管理。
2. 用 Python 标准库签发演示管理员 JWT(HS256,claims:userId=root):
# /opt/data/jwt_sign.py —— HS256 手工签名,无第三方依赖
import base64, hashlib, hmac, json, time
def b64(d):
return base64.urlsafe_b64encode(d).rstrip(b'=')
secret = b'q1w2e3r4'
header = b64(json.dumps({"alg": "HS256", "typ": "JWT"}).encode())
payload = b64(json.dumps({
"userId": "root",
"userEmail": "root@shaper.local",
"userName": "root",
"exp": int(time.time()) + 86400
}).encode())
sig = b64(hmac.new(secret, header + b'.' + payload, hashlib.sha256).digest())
print((header + b'.' + payload + b'.' + sig).decode())
实测执行与浏览器免登地址拼接:
TOKEN=$(python3 /opt/data/jwt_sign.py)
echo "http://<服务器IP>:5454/#token=$TOKEN"
3. 用该 JWT 调用管理 API 验证认证生效(/api/schema 返回内嵌 DuckDB 库结构):
TOKEN=$(python3 /opt/data/jwt_sign.py)
curl -s -H "Authorization: Bearer $TOKEN" http://localhost:5454/api/schema
实测回显(节选,空库状态):
{
"databases": [
{
"name": "shaper",
"schemas": [
{
"name": "main",
"tables": [],
"views": [],
"enums": []
}
]
}
]
}
浏览器侧把第 2 步输出的完整 URL 粘贴到地址栏回车,即以 root 身份进入仪表盘工作台。API Key 的生成(UI Admin 区)与 Bearer 用法见《Shaper 0.26.4 常用 CLI 命令与运维实操》。
十、升级与多版本管理
- 升级:下载新版本 tarball → 解压到
/opt/shaper-v<新版本>→ 停服务(systemctl stop shaper)→ 切换软链ln -sf /opt/shaper-v<新版本>/package/bin/shaper /usr/local/bin/shaper→systemctl start shaper。数据目录由--dir独立于二进制,升级不动数据; - 回滚:把软链切回旧版本目录后重启即可(Shaper 0.x 阶段建议升级前备份
/var/lib/shaper全目录); - 多版本共存:按
/opt/shaper-v<版本>目录命名保留多个解压目录,用软链切换,验证shaper --version确认生效。
十一、常见问题(FAQ)
Q1:启动报 version 'GLIBC_2.38' not found?
预编译二进制要求 GLIBC ≥ 2.38(实测 Ubuntu 22.04 的 GLIBC 2.35 必现该错)。解决:升级到 Ubuntu 24.04/Debian 13+,或改用官方 Docker 镜像 taleshape/shaper(内置兼容运行环境与 Chrome)。
Q2:服务已启动,浏览器打不开 5454?
默认 --addr localhost:5454 只监听回环。加 --addr 0.0.0.0:5454 重启;云服务器还需放行安全组 5454 端口(生产建议反向代理 + TLS 后仅暴露 443)。
Q3:PDF/PNG 导出报 exec: "google-chrome": executable file not found in $PATH?
裸机形态未装 Chrome(实测报错原文)。安装 Chromium/Google Chrome 后恢复;官方镜像已内置轻量 Chrome。该错误可在服务日志中检索 failed to generate png 定位。
Q4:重启报 Conflicting lock is held (PID 48) 类错误?
旧进程未退出仍持有 DuckDB 文件锁(实测 PID 48 案例)。pkill -x shaper 后确认进程消失再启动;systemd 形态用 systemctl restart shaper 由单元管理生命周期,可避免手工时序问题。
Q5:/api/schema 等 API 返回 401?
管理 API 默认要求认证(实测未认证即 401,日志报 missing or malformed jwt)。按「九、首次登录验证」签发 JWT 携带 Authorization: Bearer 头,或在 UI 中生成 API Key。
Q6:日志出现 Snapshots disabled 是故障吗?
不是。未配置 --snapshot-s3-bucket 时的正常提示,快照功能详见《Shaper 0.26.4 配置参数详解》。
十二、卸载与清理
systemctl stop shaper && systemctl disable shaper # 停止并禁用服务(先 stop 后 disable,每行一个单元见上)
rm -f /etc/systemd/system/shaper.service && systemctl daemon-reload
rm -f /usr/local/bin/shaper # 移除软链
rm -rf /opt/shaper /var/lib/shaper # 移除二进制与数据(数据删除前先确认已备份)
十三、参考链接
- 官方安装文档:https://taleshape.com/shaper/docs/installing-shaper/
- 官方 Single Sign-On 文档:https://taleshape.com/shaper/docs/single-sign-on/
- 官方 GitHub Releases:https://github.com/taleshape-com/shaper/releases
- 官方 npm 平台包:https://www.npmjs.com/package/@taleshape/shaper-linux-x64
- 本专栏篇章:《Shaper 介绍与选型指南》 、《Shaper 0.26.4 配置参数详解》 、《Shaper 0.26.4 常用 CLI 命令与运维实操》
- 数据引擎背景:《DuckDB 1.5 介绍与选型指南》