PocketBase 轻量后端搭建教程
PocketBase 是一个用 Go 语言编写的开源后端,只需一个可执行文件就能运行,内置 SQLite 数据库、用户认证、文件存储、实时订阅和管理面板。对于个人项目、原型开发或中小型应用来说,PocketBase 是一个极其简洁高效的后端选择。本文将介绍如何在搬瓦工 VPS 上部署 PocketBase。
一、系统要求
- 操作系统:任何 Linux 发行版(Ubuntu、Debian、CentOS 等)。
- 内存:512MB 即可运行,1GB 更佳。
- 磁盘:PocketBase 本身不到 50MB,数据空间取决于应用需求。
- 架构:x86_64(搬瓦工所有方案均支持)。
PocketBase 是单文件二进制程序,不需要安装 Docker 或其他依赖,部署极其简单。
二、下载安装
创建项目目录并下载 PocketBase:
mkdir -p /opt/pocketbase
cd /opt/pocketbase
# 下载最新版本(请替换为实际最新版本号)
wget https://github.com/pocketbase/pocketbase/releases/download/v0.22.0/pocketbase_0.22.0_linux_amd64.zip
unzip pocketbase_0.22.0_linux_amd64.zip
chmod +x pocketbase
rm pocketbase_0.22.0_linux_amd64.zip
三、首次启动
直接运行 PocketBase:
./pocketbase serve --http="0.0.0.0:8090"
PocketBase 会自动创建数据库文件和必要的目录结构。访问 http://your-server-ip:8090/_/ 进入管理面板,首次访问需要创建管理员账户。
四、配置 Systemd 服务
为了让 PocketBase 在后台运行并开机自启,创建 systemd 服务:
cat > /etc/systemd/system/pocketbase.service <<'EOF'
[Unit]
Description=PocketBase Backend
After=network.target
[Service]
Type=simple
User=root
WorkingDirectory=/opt/pocketbase
ExecStart=/opt/pocketbase/pocketbase serve --http="0.0.0.0:8090"
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable pocketbase
systemctl start pocketbase
查看服务状态:
systemctl status pocketbase
五、Docker 部署(可选)
如果你更喜欢 Docker 方式部署,也可以使用 Docker:
mkdir -p /opt/pocketbase/pb_data
cat > /opt/pocketbase/docker-compose.yml <<'EOF'
version: '3.8'
services:
pocketbase:
image: ghcr.io/muchobien/pocketbase:latest
restart: always
ports:
- "8090:8090"
volumes:
- /opt/pocketbase/pb_data:/pb/pb_data
- /opt/pocketbase/pb_public:/pb/pb_public
EOF
cd /opt/pocketbase
docker compose up -d
六、配置 Nginx 反向代理
apt install nginx certbot python3-certbot-nginx -y
cat > /etc/nginx/sites-available/pocketbase <<'EOF'
server {
listen 80;
server_name pb.yourdomain.com;
client_max_body_size 50M;
location / {
proxy_pass http://127.0.0.1:8090;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
EOF
ln -s /etc/nginx/sites-available/pocketbase /etc/nginx/sites-enabled/
nginx -t && systemctl reload nginx
certbot --nginx -d pb.yourdomain.com
七、数据集合管理
PocketBase 通过"集合"(Collection)来组织数据,类似于数据库中的表。在管理面板中可以方便地创建和管理集合:
- Base 集合:标准的数据表,用于存储业务数据。
- Auth 集合:内置用户认证功能的集合,包含邮箱、密码等字段。
- View 集合:基于 SQL 查询的只读视图。
每个集合支持的字段类型包括:Text、Number、Bool、Email、URL、Date、Select、Relation、File 等。
八、API 使用
PocketBase 自动为每个集合生成 CRUD API。以 JavaScript SDK 为例:
# 安装 SDK
npm install pocketbase
import PocketBase from 'pocketbase';
const pb = new PocketBase('https://pb.yourdomain.com');
// 用户认证
await pb.collection('users').authWithPassword('user@example.com', 'password');
// 查询数据
const records = await pb.collection('posts').getList(1, 20, {
sort: '-created',
filter: 'status = "published"'
});
// 创建数据
const record = await pb.collection('posts').create({
title: 'Hello World',
content: 'My first post',
status: 'published'
});
// 实时订阅
pb.collection('posts').subscribe('*', function (e) {
console.log(e.action, e.record);
});
九、数据备份
PocketBase 使用 SQLite 数据库,所有数据存储在 pb_data 目录中。备份非常简单:
# 备份数据库和上传文件
tar -czf /opt/pocketbase/backup_$(date +%Y%m%d).tar.gz /opt/pocketbase/pb_data/
PocketBase 还提供了内置的备份 API,可以通过管理面板或 API 创建备份快照。
设置自动备份:
cat > /opt/pocketbase/backup.sh <<'EOF'
#!/bin/bash
BACKUP_DIR="/opt/pocketbase/backups"
mkdir -p $BACKUP_DIR
DATE=$(date +%Y%m%d_%H%M%S)
tar -czf $BACKUP_DIR/pb_backup_$DATE.tar.gz /opt/pocketbase/pb_data/
find $BACKUP_DIR -name "*.tar.gz" -mtime +7 -delete
EOF
chmod +x /opt/pocketbase/backup.sh
echo "0 3 * * * /opt/pocketbase/backup.sh" | crontab -
十、升级 PocketBase
cd /opt/pocketbase
systemctl stop pocketbase
# 备份当前版本
cp pocketbase pocketbase.bak
# 下载新版本
wget https://github.com/pocketbase/pocketbase/releases/download/vX.X.X/pocketbase_X.X.X_linux_amd64.zip
unzip -o pocketbase_X.X.X_linux_amd64.zip
chmod +x pocketbase
systemctl start pocketbase
PocketBase 会自动执行数据库迁移。
十一、常见问题
端口被占用
如果 8090 端口被占用,可以更改启动端口:
./pocketbase serve --http="0.0.0.0:8091"
文件上传失败
检查 pb_data/storage 目录的权限,确保 PocketBase 进程有写入权限。同时检查 Nginx 的 client_max_body_size 配置。
总结
PocketBase 是目前最轻量的自托管后端方案之一,单文件部署、零依赖、资源占用极低,非常适合在搬瓦工 VPS 上运行。即使是最低配的 512MB 内存方案也能流畅运行 PocketBase。更多后端部署教程请参考:Appwrite 部署、Supabase 部署、Directus 部署。选购搬瓦工 VPS 请参考全部方案,购买时使用优惠码 NODESEEK2026 可享受 6.77% 的循环折扣。