Ubuntu 22.04 安装 PocketBase 0.40.5 指南

Ubuntu 22.04 从零安装 PocketBase v0.40.5 实战:官方 zip 下载与 sha256 校验、超级用户创建、systemd 托管、升级降级、FAQ 排障与卸载,全程命令实测。

PocketBaseBaaS低代码2026/10/21

Ubuntu 22.04 安装 PocketBase 0.40.5 指南

目标:在一台 Ubuntu 22.04 服务器上从零安装 PocketBase v0.40.5 并完成 systemd 托管,覆盖官方发布包下载校验、超级用户创建、服务启停、升级降级、常见故障排查与卸载清理。全部命令与输出均在 Ubuntu 22.04.5 LTS(amd64)环境实测通过。

一、环境信息

  • 操作系统:Ubuntu 22.04.5 LTS(amd64,cat /etc/os-release 实测 PRETTY_NAME="Ubuntu 22.04.5 LTS")
  • 服务器主机名:pb-server
  • PocketBase 版本:v0.40.5(2026-10-21 实查官方 GitHub Releases 最新稳定版)
  • 安装目录:/opt/pocketbase
  • 数据目录:/opt/pocketbase/pb_data(默认约定目录)
  • 服务端口:8090(pocketbase serve 默认端口)
  • 服务托管:systemd,单元名 pocketbase.service
  • 管理台地址:http://<服务器IP>:8090/_/
  • 示例超级用户:admin@example.com / q1w2e3r4(仅演示用,生产请替换为自己的强口令)

二、前置条件

开始安装前需要确认以下事项,逐项给出检查命令与实测回显。

1. 操作系统与架构。PocketBase 官方为 Linux 提供 amd64/arm64/armv7/ppc64le/s390x 五种架构的发行包,先确认本机架构,以选择正确的包:

uname -m

实测输出:

x86_64

x86_64 对应 linux_amd64 包(若输出 aarch64 则选 linux_arm64)。

2. 安装基础工具。下载解压官方 zip 包需要 curl(或 wget)与 unzip,校验需要 sha256sum(系统自带):

apt-get update -qq
apt-get install -y -qq curl unzip ca-certificates

实测输出(节选):

Setting up unzip (6.0-26ubuntu3.2) ...
Processing triggers for libc-bin (2.35-0ubuntu3.15) ...

3. 网络连通性。安装过程需要访问 github.com 下载发布包;若服务器出境网络慢或不稳定,可先配置代理环境变量再执行下载(以自建代理 192.168.1.62:7897 为例,按实际环境替换):

export http_proxy=http://192.168.1.62:7897 https_proxy=http://192.168.1.62:7897

⚠️ 注意:纯内网服务器请改用第五节"离线包安装方案",在能联网的机器下载后拷贝过去。

4. 端口占用检查。8090 为 PocketBase 默认端口,安装前确认未被占用:

ss -ltn | grep 8090 || echo "8090 空闲"

实测输出:

8090 空闲

5. 防火墙放行(可选,供外网访问)。Ubuntu 自带 ufw 防火墙,若处于启用状态需放行 8090 端口:

ufw status
ufw allow 8090/tcp

实测输出:

Status: inactive
Rules updated
Rules updated (v6)

⚠️ 注意:实测环境防火墙处于 inactive 状态;若你的服务器 Status: active,放行后外网才能访问 8090。

三、版本选型说明

PocketBase 发布节奏快,安装前应实查最新稳定版,而不是照抄旧教程中的版本号。

1. 查询最新稳定版:浏览器打开官方 Releases 页 https://github.com/pocketbase/pocketbase/releases,页面顶部即最新版。2026-10-21 实查结果:最新稳定版 v0.40.5,同一页面同期可见旧维护分支 v0.22.56 的回补版本(说明官方对 0.22 旧线仍在做安全回移)。也可用命令行查发布摘要:

curl -fsSL https://github.com/pocketbase/pocketbase/releases/expanded_assets/v0.40.5 | grep -oE "href=\"[^\"]+\"" | grep -iE "tar\.gz|zip|checksums"

实测输出(v0.40.5 全部发行资产清单):

href="/pocketbase/pocketbase/releases/download/v0.40.5/checksums.txt"
href="/pocketbase/pocketbase/releases/download/v0.40.5/pocketbase_0.40.5_darwin_amd64.zip"
href="/pocketbase/pocketbase/releases/download/v0.40.5/pocketbase_0.40.5_darwin_arm64.zip"
href="/pocketbase/pocketbase/releases/download/v0.40.5/pocketbase_0.40.5_linux_amd64.zip"
href="/pocketbase/pocketbase/releases/download/v0.40.5/pocketbase_0.40.5_linux_arm64.zip"
href="/pocketbase/pocketbase/releases/download/v0.40.5/pocketbase_0.40.5_linux_armv7.zip"
href="/pocketbase/pocketbase/releases/download/v0.40.5/pocketbase_0.40.5_linux_ppc64le.zip"
href="/pocketbase/pocketbase/releases/download/v0.40.5/pocketbase_0.40.5_linux_s390x.zip"
href="/pocketbase/pocketbase/releases/download/v0.40.5/pocketbase_0.40.5_windows_amd64.zip"
href="/pocketbase/pocketbase/releases/download/v0.40.5/pocketbase_0.40.5_windows_arm64.zip"

2. 版本与平台对照:

平台发行包(以 v0.40.5 为例)说明
Linux amd64pocketbase_0.40.5_linux_amd64.zip本篇所用
Linux arm64pocketbase_0.40.5_linux_arm64.zip树莓派 4/5、ARM 云主机
Linux armv7pocketbase_0.40.5_linux_armv7.zip老款 32 位 ARM 板
Linux ppc64le / s390x同名 zip小型机场景
macOS amd64/arm64pocketbase_0.40.5_darwin_*.zip开发机
Windows amd64/arm64pocketbase_0.40.5_windows_*.zip开发机

关键差异与选型:同一版本号下按 uname -m 结果选平台包;生产一律选最新稳定版,旧分支(0.22.x)仅在无法升级的存量环境中作安全回补用。

⚠️ 排障实录:tar.gz 下载 404。网上大量旧教程(含 0.39 及更早版本)使用 pocketbase_<版本>_linux_amd64.tar.gz 链接,从 v0.40.x 起 Linux 发行包已全部改为 zip 格式,继续下载 tar.gz 会报 404——实测:

curl: (22) The requested URL returned error: 404

定位方法即上方"查询最新稳定版"命令列出的资产清单:v0.40.5 资产里没有 tar.gz,只有 zip 与 checksums.txt。解决方案:改用 .zip 包并用 unzip 解压(这也是第二节安装 unzip 的原因)。

四、方案 A:在线下载官方 zip + systemd 托管(推荐)

4.1 方案说明

本方案是官方推荐的安装方式:从 GitHub Releases 下载与架构匹配的 zip 发布包,校验 sha256 后解压到 /opt/pocketbase,创建超级用户,最后交给 systemd 托管实现开机自启与崩溃自动拉起。全程约 5 分钟。

4.2 下载与校验

创建安装目录,下载 zip 包与官方校验文件,并核对 sha256:

mkdir -p /opt/pocketbase && cd /opt/pocketbase
curl -fsSL -o pocketbase.zip https://github.com/pocketbase/pocketbase/releases/download/v0.40.5/pocketbase_0.40.5_linux_amd64.zip
curl -fsSL -o checksums.txt https://github.com/pocketbase/pocketbase/releases/download/v0.40.5/checksums.txt
grep linux_amd64 checksums.txt
sha256sum pocketbase.zip

实测输出:

1dbea1b01eb3dfe64953513859d01e759c96650c4e3264fa4eecd54b769382e4  pocketbase_0.40.5_linux_amd64.zip
1dbea1b01eb3dfe64953513859d01e759c96650c4e3264fa4eecd54b769382e4  pocketbase.zip

两行哈希完全一致,说明包完整未被篡改。若不一致,删除后重新下载。

4.3 解压安装

unzip -o pocketbase.zip
chmod +x pocketbase
ls -lh

实测输出:

Archive:  pocketbase.zip
  inflating: CHANGELOG.md
  inflating: LICENSE.md
  inflating: pocketbase
total 44M
-rw-r--r-- 1 root root 6.9K Oct  8 16:38 CHANGELOG.md
-rw-r--r-- 1 root root 1.1K Oct  8 16:38 LICENSE.md
-rw-r--r-- 1 root root  908 Oct 21 09:28 checksums.txt
-rwxr-xr-x 1 root root  32M Oct  8 16:39 pocketbase
-rw-r--r-- 1 root root  13M Oct 21 09:28 pocketbase.zip

发布包内含三个文件:pocketbase 主程序(约 32MB 单二进制)、CHANGELOG.md 更新日志、LICENSE.md 许可证。确认版本:

./pocketbase -v

实测输出:

pocketbase version 0.40.5

4.4 首次启动验证(前台)

正式托管前先前台跑一次,确认程序能正常拉起并观察初始化输出:

timeout 8 ./pocketbase serve --http=0.0.0.0:8090

实测输出:

2026/10/21 09:29:06 Server started at http://0.0.0.0:8090
├─ REST API:  http://0.0.0.0:8090/api/
└─ Dashboard: http://0.0.0.0:8090/_/

(!) Launch the URL below in the browser if it hasn't been open already to create your first superuser account:
http://0.0.0.0:8090/_/#/pbinstall/eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJjb2xsZWN0aW9uSWQiOiJwYmNfMzE0MjYzNTgyMyIsImV4cCI6MTc5MjU3Njc0NiwiaWQiOiIwdTdtZzM2cTZ0cjNnYmsiLCJyZWZyZXNoYWJsZSI6ZmFsc2UsInR5cGUiOiJhdXRoIn0.qwj3tCb_vBjDCfDmBeh1mS1z6getZIca6oPOBKwZIS4
(you can also create your first superuser by running: ./pocketbase superuser upsert EMAIL PASS)

首启时 PocketBase 自动完成初始化:创建数据目录 pb_data(含业务库 data.db、辅助库 auxiliary.db、供 JS 扩展使用的类型声明 types.d.ts),并打印两条创建首个超级用户的路径(浏览器安装链接或 CLI 命令)。

验证健康检查接口(另开终端,或服务被 timeout 停止前执行):

curl -s http://127.0.0.1:8090/api/health

实测输出:

{"message":"API is healthy.","code":200,"data":{}}

4.5 创建超级用户

用 CLI 直接创建演示超级用户(避免依赖浏览器安装链接的有效期):

./pocketbase superuser create admin@example.com q1w2e3r4

实测输出:

Successfully created new superuser "admin@example.com"!

💡 说明:superuser upsert EMAIL PASS 会在邮箱已存在时改为更新密码,适合脚本幂等场景;create 在邮箱重复时会报错。二者首次创建效果相同。

4.6 配置 systemd 托管

写入服务单元 /etc/systemd/system/pocketbase.service:

cat > /etc/systemd/system/pocketbase.service <<EOF
[Unit]
Description=PocketBase service
After=network.target

[Service]
Type=simple
User=root
LimitNOFILE=4096
Restart=always
RestartSec=5
WorkingDirectory=/opt/pocketbase
ExecStart=/opt/pocketbase/pocketbase serve --http=0.0.0.0:8090

[Install]
WantedBy=multi-user.target
EOF

逐项说明:

  • After=network.target:网络就绪后再启动;
  • Type=simple:前台进程型服务,pocketbase serve 即前台运行;
  • User=root:以 root 运行(官方示例写法);如需收紧,可改为专用低权用户并同步调整 /opt/pocketbase 目录属主;
  • LimitNOFILE=4096:文件描述符上限,并发文件/连接较多时可调大;
  • Restart=always + RestartSec=5:进程异常退出后 5 秒自动拉起;
  • WorkingDirectory=/opt/pocketbase:工作目录,pb_data/pb_public/pb_hooks 等相对目录都基于它;
  • ExecStart 中 --http=0.0.0.0:8090:显式绑定所有网卡。不加该参数时 serve 默认只绑 127.0.0.1:8090(本机可访问,外网不可达),若指定了域名参数则默认绑 0.0.0.0:80;
  • WantedBy=multi-user.target:开机自启。

加载并启用服务:

systemctl daemon-reload
systemctl enable pocketbase
systemctl start pocketbase
systemctl is-active pocketbase

实测输出:

Created symlink /etc/systemd/system/multi-user.target.wants/pocketbase.service → /etc/systemd/system/pocketbase.service.
active

4.7 安装结果验证

服务状态:

systemctl status pocketbase --no-pager -l

实测输出(节选):

● pocketbase.service - PocketBase service
     Loaded: loaded (/etc/systemd/system/pocketbase.service; enabled; vendor preset: enabled)
     Active: active (running) since Wed 2026-10-21 09:29:52 UTC; 6s ago
   Main PID: 2822 (pocketbase)
      Tasks: 11 (limit: 94371)
     Memory: 7.5M
     CGroup: /system.slice/pocketbase.service
             └─2822 /opt/pocketbase/pocketbase serve --http=0.0.0.0:8090

Oct 21 09:29:52 pb-server systemd[1]: Started PocketBase service.
Oct 21 09:29:52 pb-server pocketbase[2822]: 2026/10/21 09:29:52 Server started at http://0.0.0.0:8090
Oct 21 09:29:52 pb-server pocketbase[2822]: ├─ REST API:  http://0.0.0.0:8090/api/
Oct 21 09:29:52 pb-server pocketbase[2822]: └─ Dashboard: http://0.0.0.0:8090/_/

注意 Memory: 7.5M——空载内存仅个位数 MB,这是单二进制 Go 程序的资源优势。

健康检查与管理台:

curl -s http://127.0.0.1:8090/api/health
curl -s http://127.0.0.1:8090/_/ | head -c 220

实测输出:

{"message":"API is healthy.","code":200,"data":{}}
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />

    <title>PocketBase</title>

管理台 HTML 正常返回。浏览器打开 http://<服务器IP>:8090/_/,用 admin@example.com / q1w2e3r4 登录即可看到管理仪表盘。

数据持久化验证(重启服务后账号仍有效,证明状态已落盘):

systemctl restart pocketbase
sleep 2
curl -s -X POST http://127.0.0.1:8090/api/collections/_superusers/auth-with-password -H "Content-Type: application/json" -d '{"identity":"admin@example.com","password":"q1w2e3r4"}' -o /dev/null -w "auth_http=%{http_code}\n"

实测输出:

auth_http=200

超级用户登录返回 200,重启无数据丢失。所有持久化状态都在 /opt/pocketbase/pb_data/ 目录内。

五、方案 B:离线包安装(内网/断网服务器)

5.1 方案说明

生产内网服务器通常不能直连 GitHub。本方案在任一能联网的机器上完成下载与校验,再把 zip 包传到服务器解压安装,后续步骤与方案 A 完全一致(PocketBase 本身就是单文件,不存在额外的依赖安装)。

5.2 在联网机器上下载并校验

mkdir -p pb_transfer && cd pb_transfer
curl -fsSL -o pocketbase_0.40.5_linux_amd64.zip https://github.com/pocketbase/pocketbase/releases/download/v0.40.5/pocketbase_0.40.5_linux_amd64.zip
curl -fsSL -o checksums.txt https://github.com/pocketbase/pocketbase/releases/download/v0.40.5/checksums.txt
grep linux_amd64 checksums.txt
sha256sum pocketbase_0.40.5_linux_amd64.zip

实测输出(与 4.2 一致即校验通过):

1dbea1b01eb3dfe64953513859d01e759c96650c4e3264fa4eecd54b769382e4  pocketbase_0.40.5_linux_amd64.zip
1dbea1b01eb3dfe64953513859d01e759c96650c4e3264fa4eecd54b769382e4  pocketbase_0.40.5_linux_amd64.zip

5.3 传输到服务器

用 scp(或内网已有的文件分发通道)把两个文件传到目标服务器:

scp pocketbase_0.40.5_linux_amd64.zip checksums.txt root@<服务器IP>:/opt/pocketbase/

在目标服务器上核对哈希后解压(输出同 4.2/4.3):

cd /opt/pocketbase
grep linux_amd64 checksums.txt
sha256sum pocketbase_0.40.5_linux_amd64.zip
unzip -o pocketbase_0.40.5_linux_amd64.zip
chmod +x pocketbase
./pocketbase -v

实测输出(节选):

1dbea1b01eb3dfe64953513859d01e759c96650c4e3264fa4eecd54b769382e4  pocketbase_0.40.5_linux_amd64.zip
pocketbase version 0.40.5

5.4 创建超级用户并 systemd 托管

与方案 A 相同,逐条执行即可:

./pocketbase superuser create admin@example.com q1w2e3r4

实测输出:

Successfully created new superuser "admin@example.com"!

写入与服务管理命令同 4.6 节(/etc/systemd/system/pocketbase.service 的完整内容与逐项说明见该节),执行后验证:

systemctl daemon-reload
systemctl enable pocketbase
systemctl start pocketbase
systemctl is-active pocketbase

实测输出:

Created symlink /etc/systemd/system/multi-user.target.wants/pocketbase.service → /etc/systemd/system/pocketbase.service.
active
curl -s http://127.0.0.1:8090/api/health

实测输出:

{"message":"API is healthy.","code":200,"data":{}}

六、升级、降级与多版本管理

6.1 官方自更新命令 pocketbase update

PocketBase 内置自更新子命令,自动下载最新版替换当前可执行文件,并在结束时默认对 pb_data 做一次备份。实测从 v0.40.4 升级到 v0.40.5(在 /opt/upgrade-test 目录放入 0.40.4 版二进制后执行):

./pocketbase -v
echo y | ./pocketbase update
./pocketbase -v

实测输出:

pocketbase version 0.40.4
Fetching release information...
You already have the latest version 0.40.5.
pocketbase version 0.40.5

执行过程中程序先拉取发布信息并打印新版本更新日志片段,然后替换二进制。更新产生的自动备份落在 pb_data/backups/ 下,文件名带 @update_ 前缀:

ls -lh pb_data/backups/

实测输出:

total 236
-rw-r--r-- 1 root root 225389 Oct 21 09:42 @update_v0.40.5.zip
-rw-r--r-- 1 root root    240 Oct 21 09:42 @update_v0.40.5.zip.attrs

💡 说明:update 命令默认 --backup 为 true,即更新前自动备份数据目录;可用 ./pocketbase update --backup=false 关闭。 ⚠️ 注意:update 需要能直连 GitHub Releases 下载新包,且对二进制所在目录有写权限。出境网络受限的服务器建议改用 6.2 的手动替换方式。

6.2 手动替换二进制升级

下载新版 zip(步骤同 4.2),解压覆盖旧二进制后重启服务即可,数据目录无需任何处理:

cd /opt/pocketbase
unzip -o pocketbase.zip
systemctl restart pocketbase
systemctl is-active pocketbase
./pocketbase -v

实测输出(节选):

active
pocketbase version 0.40.5

💡 说明:数据库结构迁移(schema migration)在服务启动时自动执行(默认 --automigrate=true),无需手工跑迁移。

6.3 降级

把旧版本二进制重新解压覆盖,再重启服务即完成降级。实测用 v0.40.4 二进制启动由 v0.40.5 初始化的数据目录(全新空库场景)可以正常拉起:

pocketbase version 0.40.4
2026/10/21 09:42:47 Server started at http://127.0.0.1:8096
├─ REST API:  http://127.0.0.1:8096/api/
└─ Dashboard: http://127.0.0.1:8096/_/

⚠️ 注意:跨 schema 迁移的降级不受支持——一旦新版本对数据库结构做了变更,旧版程序可能无法读取。降级前务必用 pb_data/backups/ 里的备份或管理台/API 手动创建的备份做兜底,并优先选择只回退一个补丁版本。

6.4 多版本并存

不同业务需要不同版本时,按目录隔离部署即可:每个版本独立目录(如 /opt/pocketbase-0.40.5、/opt/pocketbase-0.22.18),各自配独立的 systemd 单元(改 Description、WorkingDirectory、ExecStart 与端口 --http=0.0.0.0:8091 等避免冲突)。单一服务切换版本时改 ExecStart 指向不同目录的二进制后 systemctl daemon-reload && systemctl restart pocketbase。

七、方案对比与选择建议

维度方案 A:在线下载(推荐)方案 B:离线包传输pocketbase update 自更新
是否需联网服务器需访问 GitHub仅中转机需联网,服务器零外网服务器需访问 GitHub
来源官方 Releases + checksums 校验官方包人工拷贝,可先校验官方 Releases 自动拉取
版本控制任意指定版本任意指定版本只能到最新版
服务管理systemd 托管systemd 托管二进制热替换,需 systemd 重启生效
适用场景标准生产安装内网隔离/安审环境补丁版本快速跟进

关键差异与建议:能联网的服务器用方案 A首次安装;内网隔离环境用方案 B;日常小版本跟进优先用 pocketbase update(自带数据备份),网络不通时退回手动替换(6.2)。

八、配置说明

安装完成后,与运行行为相关的目录约定与关键配置如下。

目录结构(均位于 WorkingDirectory,即 /opt/pocketbase):

目录/文件作用是否随安装包自带
pocketbase主程序单二进制是
pb_data/数据目录:data.db 业务库、auxiliary.db 辅助库、backups/ 备份目录首次启动自动生成
pb_public/静态站点目录,存在即对外托管否,按需创建
pb_hooks/JSVM 钩子目录(*.pb.js)否,按需创建
pb_migrations/迁移文件目录否,按需生成

常用运行配置通过 serve 的命令行参数与数据目录约定完成(参数全量解释见《PocketBase 0.40.5 配置参数详解》):

  • 监听地址/端口:--http=0.0.0.0:8090(systemd 单元内修改后 systemctl daemon-reload && systemctl restart pocketbase 生效);
  • 数据目录改名:--dir /var/lib/pocketbase(需同步调整目录属主);
  • 静态站点:创建 pb_public/index.html 后重启即托管(默认 --indexFallback=true 时缺失路径回落到 index.html,适配 SPA)。

修改 systemd 单元后必须重载并重启:

systemctl daemon-reload
systemctl restart pocketbase
systemctl is-active pocketbase

实测输出:

active

九、常见问题(FAQ)

Q1:照旧教程下载 pocketbase_x.y.z_linux_amd64.tar.gz 报 404?

从 v0.40.x 起 Linux 发行包改为 zip 格式。改用 pocketbase_<版本>_linux_amd64.zip 并用 unzip 解压;资产清单可用第三节"查询最新稳定版"的命令实查。完整排障过程见该节排障实录。

Q2:服务正常但外网浏览器访问不了?

两个最常见原因:① serve 未绑外网网卡——默认只绑 127.0.0.1:8090,检查 systemd 单元 ExecStart 是否带 --http=0.0.0.0:8090,改后 systemctl daemon-reload && systemctl restart pocketbase;② 防火墙未放行——ufw allow 8090/tcp(见第二节)。本机可先用 curl -s http://127.0.0.1:8090/api/health 确认服务本身健康。

Q3:忘记超级用户密码怎么办?

CLI 直接重置(服务运行中执行即可,改完立即生效):

./pocketbase superuser update admin@example.com q1w2e3r4

实测输出:

Successfully changed superuser "admin@example.com" password!

若账号本身丢失,可用 superuser upsert 重建同邮箱账号,或 superuser delete 删除后重建。

Q4:systemctl start 后服务起不来?

先看日志定位:

journalctl -u pocketbase --no-pager -n 20

实测运行日志示例(节选):

Oct 21 09:29:52 pb-server systemd[1]: Started PocketBase service.
Oct 21 09:29:52 pb-server pocketbase[2822]: 2026/10/21 09:29:52 Server started at http://0.0.0.0:8090
Oct 21 09:29:52 pb-server pocketbase[2822]: ├─ REST API:  http://0.0.0.0:8090/api/
Oct 21 09:29:52 pb-server pocketbase[2822]: └─ Dashboard: http://0.0.0.0:8090/_/

常见根因:① 端口被占——手动前台启动可直接看到报错 listen tcp 127.0.0.1:8090: bind: address already in use(实测回显),用 ss -ltn | grep 8090 找到占用进程或改 --http 端口;② 数据目录权限不足——User= 与 --dir 目录属主要匹配;③ 二进制无执行位——chmod +x pocketbase。

Q5:下载 GitHub 发布包很慢或超时?

为下载命令配置代理后重试(第二节第 3 条的环境变量方式),或直接改走方案 B 离线传输;pocketbase update 卡住时同样改用 6.2 手动替换。

Q6:升级后想确认当前运行版本?

./pocketbase -v

实测输出:

pocketbase version 0.40.5

systemd 托管场景注意二进制替换后需 systemctl restart pocketbase 才切换到新版本进程。

十、卸载与清理

PocketBase 为单文件应用,卸载非常干净:

systemctl stop pocketbase
systemctl disable pocketbase

实测输出:

Removed "/etc/systemd/system/multi-user.target.wants/pocketbase.service".

删除服务单元并重载,再删除安装目录(含全部数据,先确认备份需求):

rm /etc/systemd/system/pocketbase.service
systemctl daemon-reload
rm -rf /opt/pocketbase

如曾放行防火墙,一并回收:

ufw delete allow 8090/tcp

实测输出:

Rule deleted
Rule deleted (v6)

十一、参考链接