pocketbase在linux上无需安装,下载二进制文件并赋权即可运行;推荐从github releases下载对应架构版本,用systemd托管服务,指定--dir和--http参数,避免权限与配置生效问题。

PocketBase 在 Linux 上不需要“安装”,只需要下载可执行文件并赋予执行权限就能直接运行——它不写注册表、不改系统配置、不依赖 Node/Python/Java 环境,连 SQLite 都是内嵌的。
怎么下载和启动 PocketBase 服务
从 GitHub Releases 下载对应架构的预编译二进制文件是最稳妥的方式(避免源码构建的 Go 版本、CGO、交叉编译等干扰):
- 确认你的 CPU 架构:
uname -m。常见结果是x86_64(对应linux_amd64)或aarch64(对应linux_arm64) - 用
wget下载(以 v0.22.11 为例):wget https://github.com/pocketbase/pocketbase/releases/download/v0.22.11/pocketbase_0.22.11_linux_amd64.zip - 解压并赋权:
unzip pocketbase_0.22.11_linux_amd64.zip && chmod +x pocketbase - 首次运行:
./pocketbase serve,默认监听127.0.0.1:8090,后台自动创建pb_data/目录存数据库和配置
注意:不要用 sudo ./pocketbase serve —— 它不需要 root 权限,且以 root 运行会导致生成的 pb_data 目录权限异常,后续非 root 用户无法读写。
如何指定数据目录和端口(生产环境必配)
开发时默认行为够用,但上线必须显式控制数据位置和网络暴露方式,否则重启后数据可能丢失或服务不可达:
-
--dir必须指定绝对路径,例如:./pocketbase serve --dir=/var/lib/pocketbase;相对路径在 systemd 或后台运行时极易失效 -
--http控制监听地址,--http=0.0.0.0:8080才能让局域网其他设备访问;仅写--http=8080等价于127.0.0.1:8080,外网仍连不上 - SQLite 数据库文件就落在
--dir指定路径下的pb_data.db,备份只需拷走这个文件 +pb_data/整个目录 - 如果要绑定到 80 或 443 端口,Linux 默认禁止非 root 绑定低号端口,推荐用反向代理(Nginx)转发,而不是加
sudo
怎么让 PocketBase 后台常驻运行(systemd 方式)
直接前台运行 ./pocketbase serve 退出终端就停了,用 systemd 托管才是 Linux 生产环境标准做法:
- 创建服务文件:
/etc/systemd/system/pocketbase.service - 内容示例(注意替换
User和WorkingDirectory):[Unit] Description=PocketBase Server After=network.target [Service] Type=simple User=pbuser WorkingDirectory=/opt/pocketbase ExecStart=/opt/pocketbase/pocketbase serve --dir=/var/lib/pocketbase --http=0.0.0.0:8080 Restart=on-failure RestartSec=10 [Install] WantedBy=multi-user.target
- 关键点:
User必须是非 root 账户(如pbuser),且该用户对/var/lib/pocketbase有读写权限;WorkingDirectory是pocketbase二进制所在目录,不是数据目录 - 启用服务:
sudo systemctl daemon-reload && sudo systemctl enable --now pocketbase
别用 nohup 或 & 启动——没有进程管理、日志整合、崩溃自启能力,出问题只能手动查。
为什么改了配置却没生效?优先级和环境变量陷阱
PocketBase 的配置按「命令行参数 > 环境变量 > 内置默认值」覆盖,容易踩坑:
- 环境变量名全大写、带前缀:
POCKETBASE_DIR对应--dir,POCKETBASE_HTTP对应--http;写成PB_DIR或POCKETBASE_data_dir无效 - systemd 里设环境变量必须用
Environment=,不能只写export;例如在[Service]段加:Environment="POCKETBASE_HTTP=0.0.0.0:8080" -
--dir和POCKETBASE_DIR必须指向**已存在且权限正确**的目录,PocketBase 不会自动创建父级路径(比如/var/lib/pocketbase不存在就会静默失败) - 修改 systemd service 文件后,必须
sudo systemctl daemon-reload,否则systemctl restart仍用旧配置
最省事的做法:所有关键配置(--dir、--http)都写死在 ExecStart 里,不用环境变量——减少一层解析歧义。











