Ubuntu 22.04 安装 serviette 0.1.8 指南
在 Ubuntu 22.04.5 上从零安装 serviette 0.1.8:双方案安装、验证回显、systemd 托管、升级降级与九条真实排障实录,全部命令实测。
Ubuntu 22.04 安装 serviette 0.1.8 指南
目标:在 Ubuntu 22.04 服务器上从零安装 serviette 0.1.8(Pathway 团队的 no-code 实时 RAG 服务器),完成 Python 环境、安装、配置生成、服务验证与 systemd 托管,并沉淀安装过程中的全部真实排障记录。本文全部命令与回显均在 Ubuntu 22.04.5 LTS(x86_64)服务器上以 root 实测通过。
一、环境信息
本次实测环境如下(均为实测值):
- 操作系统:Ubuntu 22.04.5 LTS(x86_64),
/etc/os-release显示PRETTY_NAME="Ubuntu 22.04.5 LTS"; - 系统自带 Python:3.10.12(Ubuntu 22.04 仓库默认版本,满足 serviette 的 ≥ 3.10 要求);
- serviette 版本:0.1.8(PyPI 最新稳定版,2026-10-15 发布;查询日期 2026-10-22);
- 底座引擎:pathway 0.33.0(由 pip 依赖解析自动安装);
- 安装方式:venv 虚拟环境隔离,安装到
/opt/serviette-venv; - 服务端口:8989(server 默认端口,仅监听 127.0.0.1);
- 工作目录示例:
/root/serviette-demo/(配置、语料、DuckDB 库文件所在); - 磁盘占用:venv 约 1.2 GB(含 Pathway 引擎、unstructured、numpy/scipy/pandas 等依赖)。
⚠️ serviette 是「索引器 + API 服务器」双进程软件,其中 indexer 启动时需要免费的 Pathway 许可证密钥(
PATHWAY_LICENSE_KEY,在 https://pathway.com/framework/get-license 一键领取,GitHub/LinkedIn 或邮箱注册)。安装本身不需要许可证;本文的安装、CLI 验证、server 启动与 API 验证均实测通过,indexer 启动一步需读者自行领取许可证后执行(对应步骤已注明)。
二、前置条件
安装前需要确认的系统条件,每项都给出验证命令与实测回显:
1. 操作系统与架构(serviette 官方支持 Linux/macOS,本文以 Ubuntu 22.04 为准):
cat /etc/os-release | head -2 && uname -m
实测回显:
PRETTY_NAME="Ubuntu 22.04.5 LTS"
NAME="Ubuntu"
x86_64
2. Python ≥ 3.10(Pathway 引擎的最低要求)。Ubuntu 22.04 自带 3.10,若最小安装没有 Python,先装:
apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y python3 python3-venv python3-pip curl
实测回显(节选,安装末尾):
Setting up python3-pip (22.0.2+dfsg-1) ...
Processing triggers for ca-certificates (20240203) ...
版本验证:
python3 --version && pip3 --version
实测回显:
Python 3.10.12
pip 22.0.2 from /usr/lib/python3/dist-packages/pip (python 3.10)
3. 磁盘空间:纯 CPU 使用、OpenAI 嵌入方案约 1.2 GB(本文实测占用);若安装 serviette[local] 本地嵌入,需再预留约 1 GB(PyTorch CPU 版,官方约 0.8 GB 下载体积,装后更大)。查看磁盘:
df -h / | tail -1
实测回显:
overlay 786G 379G 373G 51% /
4.(可选)git:仅「源码安装」方案需要:
apt-get install -y git && git --version
实测回显:
git version 2.34.1
5.(安装后运行时)免费的 Pathway 许可证密钥:到 https://pathway.com/framework/get-license 注册领取(一次即可),后续以环境变量 PATHWAY_LICENSE_KEY 提供。领取动作需要在浏览器完成登录,属于账号操作,无法在纯终端里完成——这是唯一需要「离开终端」的前置步骤。
三、版本选型说明
serviette 目前处于 0.x 快速迭代期,选版本前先看官方版本节奏。用 pip 直接列出全部可装版本(实测命令与回显):
pip index versions serviette
实测回显:
serviette (0.1.8)
Available versions: 0.1.8, 0.1.7, 0.1.6, 0.1.5, 0.1.4, 0.1.3, 0.1.2, 0.1.1, 0.1.0.post1, 0.1.0
INSTALLED: 0.1.8
LATEST: 0.1.8
结合 PyPI 发布时间(查询日期 2026-10-22),版本对照如下:
| 版本 | 发布日期 | 说明 |
|---|---|---|
| 0.1.0 / 0.1.0.post1 | 2026-08-04 | 首个公开版本 |
| 0.1.1 | 2026-09-21 | 迭代 |
| 0.1.2 | 2026-09-23 | 迭代 |
| 0.1.3 / 0.1.4 / 0.1.5 | 2026-09-29 | 同日三连发,快速修复期 |
| 0.1.6 | 2026-10-08 | 迭代 |
| 0.1.7 | 2026-10-12 | 官方 50 GB 索引基准所用版本 |
| 0.1.8 | 2026-10-15 | 当前最新稳定版,本文安装目标 |
选型结论:新装一律选最新稳定版 0.1.8(本文全部实测基于该版本);已有部署升级前先在测试环境验证,0.x 阶段小版本间配置结构可能微调,锁定版本号安装(serviette==0.1.8)更稳妥。serviette 的全部能力建立在 pathway[xpack-llm]>=0.32.1 之上,pip 会自动带上匹配的 pathway(本文实测装到 0.33.0),无需手工指定。
四、方案A:PyPI 在线安装(官方推荐)
4.1 方案说明
serviette 官方分发渠道就是 PyPI 包 serviette,推荐装进独立 venv 避免污染系统 Python。安装命令按嵌入方案分两档:
- 打算用 OpenAI 嵌入(或 LiteLLM/Gemini/Bedrock 等 API 嵌入):
pip install serviette,装包最小; - 打算用本地免费嵌入(向导默认):
pip install "serviette[local]" --extra-index-url https://download.pytorch.org/whl/cpu,会拉取 PyTorch CPU 版(约 0.8 GB 下载体积)。--extra-index-url指定 CPU 构建,不加则会拉到带 CUDA 库的约 5 GB 版本。
官方 README 特别提醒:pip 需要 23.1 以上(旧版解析器处理这个依赖树会极慢),所以 venv 里先升级 pip。
本文以方案 A 的最小安装为主线实测(本地嵌入 extra 的安装命令相同,仅多 [local] 后缀,见 4.5 节说明)。
4.2 创建 venv 并升级 pip
python3 -m venv /opt/serviette-venv
/opt/serviette-venv/bin/python -m pip install -U pip
实测回显(升级 pip 末尾):
Successfully installed pip-26.2.2
验证 pip 版本:
/opt/serviette-venv/bin/pip --version
实测回显:
pip 26.2.2 from /opt/serviette-venv/lib/python3.10/site-packages/pip (python 3.10)
4.3 安装 serviette
/opt/serviette-venv/bin/pip install serviette
实测回显(成功末尾,输出节选——完整列表 200+ 个包,保留首尾):
Collecting serviette
Downloading serviette-0.1.8-py3-none-any.whl.metadata (16 kB)
...(中略:Collecting pathway[xpack-llm]>=0.32.1、fastapi、uvicorn、duckdb、openai、unstructured 等大量依赖)...
Successfully installed Jinja2-3.1.6 MarkupSafe-3.0.4 ... pathway-0.33.0 ... pypdf-6.21.2 ... serviette-0.1.8 ... uvicorn-0.54.0 ... (共 200 余项)
关键依赖实测结果:serviette-0.1.8、pathway-0.33.0、fastapi-0.159.1、uvicorn-0.54.0、duckdb-1.5.6、openai-2.54.0、unstructured-0.18.32。
⚠️ 网络排障实录:直连官方 PyPI 源安装时,依赖解析阶段在境内网络下可能长时间停留在
Collecting/下载阶段(本文实测直连超过 20 分钟未完成,已终止)。解决办法二选一:① 换国内 PyPI 源(本文实测采用清华 TUNA 源,命令与成功回显如下):
/opt/serviette-venv/bin/pip install -i https://pypi.tuna.tsinghua.edu.cn/simple serviette实测约 2 分钟完成,回显末尾同上
Successfully installed ... serviette-0.1.8 ...;② 走 HTTP 代理:
/opt/serviette-venv/bin/pip install --proxy http://<代理IP>:<端口> serviette。
4.4 验证安装
入口与版本:
which serviette && export PATH=/opt/serviette-venv/bin:$PATH && serviette --version
实测回显:
/opt/serviette-venv/bin/serviette
serviette 0.1.8
包信息:
pip show serviette
实测回显:
Name: serviette
Version: 0.1.8
Summary: A no-code RAG server that keeps answers in sync with your documents. Works with 8 vector databases. Built on Pathway.
Home-page: https://pathway.com
Author: serviette contributors
License: MIT License
主命令帮助(能正常打印即安装完好):
serviette --help
实测回显:
usage: serviette [-h] [--version] {indexer,server,up,demo,frontend,wizard} ...
Single ``serviette`` entrypoint dispatching all subcommands. Subcommands:
serviette indexer --config FILE Build & run the Pathway indexing graph
serviette server --config FILE Start the FastAPI retrieval/RAG server
serviette up --config FILE Run indexer + server together (dev/demo) serviette
demo Zero-to-chat demo on a bundled corpus serviette wizard Interactive
config-generation wizard
positional arguments:
{indexer,server,up,demo,frontend,wizard}
indexer Run the indexer
server Run the server
up Run indexer + server together
demo Zero-to-chat demo on a bundled corpus
frontend Run the web chat frontend
wizard Interactive config wizard
options:
-h, --help show this help message and exit
--version show program's version number and exit
底座引擎版本:
python -c "import pathway; print(pathway.__version__)"
实测回显:
0.33.0
4.5 本地嵌入 extra(可选)
若要用免费的本地嵌入模型(向导默认选择),在同一个 venv 里补装 local extra:
/opt/serviette-venv/bin/pip install "serviette[local]" --extra-index-url https://download.pytorch.org/whl/cpu
该命令会追加安装 sentence-transformers 与 PyTorch CPU 版(下载约 0.8 GB,耗时主要在下载)。⚠️ 无 NVIDIA GPU 务必带 --extra-index-url https://download.pytorch.org/whl/cpu,否则 pip 默认拉取约 5 GB 的 CUDA 构建。本文实验环境采用 OpenAI 嵌入路线,未执行此步;不装该 extra 时向导会明确提示(真实提示见《serviette 0.1.8 常用 CLI 命令与工具详解》向导一节)。
4.6 server 启动验证(无需许可证即可跑通)
server 是读路径的 FastAPI 服务,不依赖 Pathway 引擎初始化,可在装完立即验证。先手写一份最小配置(字段含义见《serviette 0.1.8 配置参数详解》):
mkdir -p /root/serviette-demo/docs && cd /root/serviette-demo
cat > server-openai.yaml <<'EOF'
pathway_license_key: ${PATHWAY_LICENSE_KEY}
sources:
- type: fs
path: /root/serviette-demo/docs
vector_db:
type: duckdb
path: ./embeddings.duckdb
embedder:
type: openai
llm:
type: mock
EOF
⚠️ 此处
embedder.type: openai需要OPENAI_API_KEY已导出(预检要求 key 存在,启动阶段不校验真伪);llm.type: mock表示不调用任何 LLM、回答直接引用检索片段。PATHWAY_LICENSE_KEY在 server 进程里仅做变量插值检查,无需真实有效。
启动 server(前台运行,观察启动日志):
export PATHWAY_LICENSE_KEY=<你的免费许可证> OPENAI_API_KEY=sk-<你的OpenAI密钥>
serviette server --config server-openai.yaml
实测回显(启动后数秒):
INFO: Started server process [4791]
INFO: Waiting for application startup.
INFO llm client ready in 0.0s
INFO: Application startup complete.
INFO: Uvicorn running on http://127.0.0.1:8989 (Press CTRL+C to quit)
另开终端验证四个点(均实测):
curl -s http://127.0.0.1:8989/api/v1/health
实测回显:
{"status":"ok"}
curl -s http://127.0.0.1:8989/api/v1/stats
实测回显(空索引状态,stats_available: false 表示库中还没有任何已索引分块):
{"backend":"duckdb","stats_available":false}
聊天页面:
curl -s http://127.0.0.1:8989/ | grep -oE '<title>[^<]*</title>'
实测回显:
<title>serviette</title>
验证到此,安装链路完整可用。indexer 的启动在领取真实许可证后执行(serviette up --config 或 serviette indexer --config),第一次运行会自动建 DuckDB 库文件并开始索引 sources 目录。
五、方案B:源码可编辑安装(git clone + pip install -e)
5.1 方案说明
需要改源码、跑开发测试或使用仓库内基准脚本时,从 GitHub 克隆源码做可编辑安装(官方 README「Development」节给出的开发者路径)。生产部署不需要此方案。
5.2 克隆与安装
cd /opt
git clone https://github.com/pathwaycom/serviette.git
python3 -m venv /opt/serviette-src-venv
/opt/serviette-src-venv/bin/pip install -U pip
cd serviette
/opt/serviette-src-venv/bin/pip install -e .
实测回显(克隆与安装关键行;境内网络克隆建议先 export https_proxy=http://<代理IP>:<端口>):
Cloning into 'serviette'...
...
Successfully installed ... pathway-0.33.0 ... serviette-0.1.8 ...
开发者如需跑测试套件,官方要求额外装 dev/本地依赖:pip install -e ".[dev,local]"(会拉 PyTorch,体积大、耗时长,按需选择)。
5.3 验证
/opt/serviette-src-venv/bin/serviette --version
实测回显:
serviette 0.1.8
确认是可编辑安装(包内容指向源码目录,改动源码立即生效):
ls /opt/serviette
实测回显:
CONTRIBUTING.md LICENSE README.md benchmarks docs pyproject.toml serviette tests
六、方案对比与选择建议
| 维度 | 方案A:PyPI 在线安装 | 方案B:源码可编辑安装 |
|---|---|---|
| 来源 | PyPI 官方 wheel(py3-none-any) | GitHub main 分支源码 |
| 版本 | 固定版本号,可锁 ==0.1.8 | 跟随 main 最新提交 |
| 体积 | 一样(依赖树相同,实测均装 pathway-0.33.0) | 一样 |
| 是否需要 git | 否 | 是 |
| 适用 | 生产/日常(推荐) | 二次开发、跑 tests/benchmarks、试用未发布修复 |
| 升级方式 | pip install -U serviette | git pull 后生效(可编辑安装) |
选择建议:生产与一般使用一律方案A并用 == 锁版本;只有要改代码或跑仓库内测试/基准时才用方案B。两方案可共存(不同 venv 互不影响,本文即同时存在 /opt/serviette-venv 与 /opt/serviette-src-venv)。
七、配置说明
安装完成后,serviette 的运行由「环境变量 + 一个 YAML 配置文件」驱动,配置文件默认没有固定路径(每次用 --config 传入),约定放 /root/serviette-demo/config.yaml 或 /etc/serviette/config.yaml。
环境变量清单(运行时必需项):
| 变量 | 必需性 | 用途 |
|---|---|---|
PATHWAY_LICENSE_KEY | indexer 必需 | 免费 Pathway 许可证;server 仅要求该变量在配置引用时可插值 |
OPENAI_API_KEY | 使用 openai 嵌入/LLM 时必需 | OpenAI 嵌入与 /rag 生成 |
TWELVELABS_API_KEY | 可选 | 视频解析(TwelveLabs Pegasus) |
配置文件的两种生成方式:
- 向导生成(推荐,实测见《serviette 0.1.8 常用 CLI 命令与工具详解》):
serviette wizard,回答 9 步问题后写出 YAML; - 手写最小配置(本文 4.6 节的
server-openai.yaml即为真实可用的最小模板)。
工作目录约定:indexer 会在 workdir_path(默认 ./serviette-workdir,相对启动时的工作目录)下保存持久化状态与解析缓存;DuckDB 后端的库文件位置由 vector_db.path 决定(示例 ./embeddings.duckdb)。这两个位置都要纳入备份计划。
完整的逐参数解释见《serviette 0.1.8 配置参数详解》。
八、systemd 托管(生产部署)
生产环境把 indexer 与 server 作为两个 systemd 服务分开托管(官方生产部署形态即两进程分开)。写两个单元文件:
/etc/systemd/system/serviette-indexer.service:
[Unit]
Description=serviette indexer (Pathway live indexing pipeline)
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=root
WorkingDirectory=/root/serviette-demo
EnvironmentFile=/etc/serviette/serviette.env
ExecStart=/opt/serviette-venv/bin/serviette indexer --config /root/serviette-demo/config.yaml
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.target
/etc/systemd/system/serviette-server.service:
[Unit]
Description=serviette server (FastAPI retrieval/RAG API + chat UI)
After=network-online.target serviette-indexer.service
[Service]
Type=simple
User=root
WorkingDirectory=/root/serviette-demo
EnvironmentFile=/etc/serviette/serviette.env
ExecStart=/opt/serviette-venv/bin/serviette server --config /root/serviette-demo/config.yaml
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.target
凭据放独立环境文件(不要写进单元文件):
mkdir -p /etc/serviette
cat > /etc/serviette/serviette.env <<'EOF'
PATHWAY_LICENSE_KEY=你的免费许可证
OPENAI_API_KEY=sk-你的OpenAI密钥
EOF
chmod 600 /etc/serviette/serviette.env
启用与启动(每条命令只作用于一个单元):
systemctl daemon-reload
systemctl enable serviette-indexer.service
systemctl enable serviette-server.service
systemctl start serviette-indexer.service
systemctl start serviette-server.service
验证:
systemctl is-active serviette-indexer.service
systemctl is-active serviette-server.service
curl -s http://127.0.0.1:8989/api/v1/health
预期 is-active 返回 active,curl 返回 {"status":"ok"}(server 的启动日志与 health 实测回显见 4.6 节;indexer 单元的启动需要环境文件里是真实有效的许可证,哑值会以第十章 FAQ Q5 的报错退出,Restart=on-failure 会反复重试——排障时先 journalctl -u serviette-indexer.service -n 50 看报错原文)。
⚠️ 注意:indexer 首次启动会校验配置指纹并把状态写入
workdir_path;手工前台跑过一次后再交给 systemd 时,确保 systemd 单元的WorkingDirectory与手工运行时一致,否则会重新建一份工作目录。
九、升级、降级与多版本管理
serviette 只有 Python 包一种形态,升级/降级都通过 pip 完成(同一 venv 内同一时刻只有一个版本)。
查看当前版本:
serviette --version
升级到最新:
/opt/serviette-venv/bin/pip install -U serviette
锁定/降级到指定版本(本文实测从 0.1.8 降到 0.1.7 再升回):
/opt/serviette-venv/bin/pip install -i https://pypi.tuna.tsinghua.edu.cn/simple 'serviette==0.1.7'
serviette --version
实测回显:
serviette 0.1.7
/opt/serviette-venv/bin/pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -U serviette
serviette --version
实测回显:
serviette 0.1.8
多版本并存:如需同一台机多个版本并存,建多个 venv(如 /opt/serviette-0.1.7-venv、/opt/serviette-0.1.8-venv),各自 pip install serviette==<版本>,用各自 venv 的绝对路径调用。
⚠️ 版本升级对索引数据的影响:indexer 用「配置指纹」记录分块相关设置(含库版本号),升级 serviette/pathway 后首次启动可能拒绝运行并要求确认指纹变更(交互确认,或设
SERVIETTE_ACCEPT_FINGERPRINT_CHANGES=1),确认后会对全量语料重建索引(向量按新分块方案重写)。生产升级请先在测试环境跑通指纹确认流程。
十、常见问题(FAQ)
以下问题全部来自本文实测过程中真实出现的报错与现象,按「现象 → 原因 → 解决」整理。
Q1:pip install serviette 长时间卡在依赖解析/下载不动
- 现象:直连官方 PyPI,命令停在同一行超过 20 分钟无进展(本文实测)。
- 原因:依赖树庞大(200+ 包,含 pathway、unstructured、numpy/scipy 等),境内直连 pypi.org 慢。
- 解决:换国内 PyPI 源,如清华 TUNA 源
-i https://pypi.tuna.tsinghua.edu.cn/simple(实测约 2 分钟装完,回显见 4.3 节),或--proxy走代理。
Q2:启动报 The config references environment variable(s) that are not set
实测回显:
Invalid configuration in config.yaml:
The config references environment variable(s) that are not set:
- ${PATHWAY_LICENSE_KEY} (used in pathway_license_key)
Export them before starting (e.g. `export OPENAI_API_KEY=sk-...`) or replace the reference in the config.
- 原因:配置里写了
${PATHWAY_LICENSE_KEY}引用,但 shell 里没有导出该变量。serviette 对未设置的${VAR}引用立即报错(不会静默替换成空串)。 - 解决:
export PATHWAY_LICENSE_KEY=<许可证>后重跑;报错信息会精确指出变量名与使用它的配置键。
Q3:up --config 传了不存在的配置文件
实测回显(末尾):
FileNotFoundError: [Errno 2] No such file or directory: '/root/nope.yaml'
- 原因:
--config路径写错。serviette 对「文件不存在」直接抛 Python 异常(这与源目录不存在等配置级错误的友好提示不同)。 - 解决:核对路径后重跑;建议配置文件放固定位置(如
/root/serviette-demo/config.yaml)并用相对稳定路径引用。
Q4:indexer 报 Source directory not found
实测回显:
Source directory not found:
- /root/serviette-demo/nodir
Check the 'path' of the fs source(s) in your config (relative paths resolve against the current working directory; '~' is expanded), or create the directory first — documents dropped into an existing folder are indexed live.
- 原因:
sources[].path指向的目录不存在。注意相对路径是相对启动时的工作目录解析的,systemd 托管时要和WorkingDirectory对上。 - 解决:先
mkdir -p建目录,或改配置里的path。
Q5:indexer 报 require a Pathway license key(许可证无效)
实测回显(末尾):
RuntimeError: the feature(s) you used ["DUCKDB"] require a Pathway license key, which is free.
Get one in seconds (sign up with GitHub or LinkedIn) at https://pathway.com/framework/get-license, then set the PATHWAY_LICENSE_KEY environment variable.
Occurred here:
Line: pw.io.duckdb.write(
- 原因:
PATHWAY_LICENSE_KEY设置了但不是有效许可证(本文实验环境用了哑值dummy-test-key-123,触发真实校验失败)。许可证校验发生在索引图初始化时,并会指出用到的特性(如["DUCKDB"])。 - 解决:到 https://pathway.com/framework/get-license 领取真实许可证(免费,GitHub/LinkedIn 或邮箱注册),替换环境变量后重跑。
Q6:embedder/llm 配了 openai 但没设 OPENAI_API_KEY
实测回显:
OpenAI API key missing for: embedder (type: openai).
Export it before starting (`export OPENAI_API_KEY=sk-...`) or set `api_key` in those config sections. To run without OpenAI, switch the embedder to `sentence_transformer` (free, local) and drop or change the `llm` section.
- 解决:导出 key,或在配置各节里写
api_key: ${OPENAI_API_KEY};不想用 OpenAI 就把 embedder 换成sentence_transformer(需装[local]extra)。
Q7:serviette demo 未设许可证
实测回显:
serviette demo needs a Pathway license key (free, one click at https://pathway.com/framework/get-license). Set PATHWAY_LICENSE_KEY and re-run.
- 解决:导出
PATHWAY_LICENSE_KEY后重跑。demo 是「零到聊天」的一键体验命令,同样受许可证约束。
Q8:对聊天页发 HEAD 请求返回 405
实测回显:
HTTP/1.1 405 Method Not Allowed
allow: GET
- 原因:聊天页路由只接受 GET。用
curl -s http://127.0.0.1:8989/(GET)即可,健康检查请用/api/v1/health。
Q9:/api/v1/stats 返回 stats_available: false
实测回显:
{"backend":"duckdb","stats_available":false}
- 原因:这是空索引状态的正常返回——indexer 尚未写入任何分块(如只在验证 server,还没跑 indexer)。
- 解决:启动 indexer 完成首轮索引后复查,
stats会带出 chunk 数与索引新鲜度。
十一、卸载与清理
卸载 Python 包(删除 venv 即等于彻底卸载,serviette 全部装在 venv 里):
/opt/serviette-venv/bin/pip uninstall -y serviette
rm -rf /opt/serviette-venv
rm -rf /opt/serviette-src-venv /opt/serviette # 若做过方案B源码安装
删除运行数据(按你的实际路径):
rm -rf /root/serviette-demo # 配置、DuckDB 库文件、workdir、语料
rm -rf /etc/serviette # systemd 环境文件
移除 systemd 单元:
systemctl stop serviette-server.service
systemctl stop serviette-indexer.service
systemctl disable serviette-server.service
systemctl disable serviette-indexer.service
rm /etc/systemd/system/serviette-server.service /etc/systemd/system/serviette-indexer.service
systemctl daemon-reload