PocketBase:一个文件搞定后端,61K Star的开源神器
目录
PocketBase:一个文件搞定后端,61K Star的开源神器

写在前面
你有没有遇到过这种场景:想做个小程序、搞个内部工具、或者写个个人博客的后端,结果光是搭建环境就折腾半天?MySQL装一个,Redis配一个,Node.js或者Python再搞一套……还没写一行业务代码,光是基础设施就把人搞崩溃了。
今天介绍一个让我直呼”真香”的开源项目——PocketBase。它用Go语言写的,GitHub上已经拿了61K+ Star,最新版本v0.40.4刚在9月12日发布。最骚的是:整个后端就一个可执行文件,下载下来直接跑,10秒钟启动一个完整的后端服务。

PocketBase到底是什么?
简单说,PocketBase是一个开源自托管后端,它把以下所有东西打包进了一个12MB的二进制文件里:
- 嵌入式数据库(SQLite)——不用单独装MySQL/PostgreSQL
- 实时订阅——WebSocket支持,数据变了自动推送到前端
- 用户认证——内置邮箱/密码、OAuth2登录,不用自己写
- 文件存储——上传、管理文件,支持本地和S3
- REST API——自动生成CRUD接口,开箱即用
- 管理面板——漂亮的Web后台,数据管理可视化
你可以把它理解为”一个人的Firebase”。不需要云服务、不需要额外依赖、不需要Docker(虽然Docker也能用),下载一个文件就能跑。
10秒快速上手
方式一:直接下载运行(推荐新手)
去GitHub Releases下载对应系统的版本,解压后一条命令启动:
# 下载(以Linux x64为例)
wget https://github.com/pocketbase/pocketbase/releases/download/v0.40.4/pocketbase_0.40.4_linux_amd64.zip
# 解压
unzip pocketbase_0.40.4_linux_amd64.zip
# 启动!
./pocketbase serve
启动后访问 http://127.0.0.1:8090/_/ 就能看到管理面板。第一次会提示你创建管理员账号。
方式二:Docker部署
如果你习惯用Docker,一行命令搞定:
docker run -d --name pocketbase -p 8090:8090 -v /path/to/data:/pb/pb_data ghcr.io/muchobien/pocketbase:latest
挂载pb_data目录是为了持久化数据,容器删了数据还在。

核心功能实操
1. 创建数据表(Collection)
在管理面板里点”Collections”,可以可视化创建数据表。比如创建一个”文章”表:
- 新建Collection → 命名为
posts - 添加字段:
title(文本)、content(富文本)、status(下拉选项) - 保存后,API自动生成
2. 调用API
创建完Collection后,PocketBase自动生成RESTful API:
# 获取所有文章
curl http://localhost:8090/api/collections/posts/records
# 创建新文章
curl -X POST http://localhost:8090/api/collections/posts/records \
-H "Content-Type: application/json" \
-d '{"title":"Hello PocketBase","content":"这是我的第一篇文章","status":"published"}'
# 查询(支持过滤、排序、分页)
curl "http://localhost:8090/api/collections/posts/records?filter=status='published'&sort=-created"
3. 实时订阅
前端通过WebSocket订阅数据变化,比如在React/Vue里:
// 监听posts表的变化
const unsubscribe = await pb.collection('posts').subscribe('*', (e) => {
console.log('数据变了:', e.action, e.record)
})
有人新增、修改或删除了posts表里的数据,所有订阅者都会实时收到通知。做聊天室、协作编辑、实时仪表盘都很方便。
4. 用户认证
PocketBase内置了完整的用户认证系统:
# 注册
curl -X POST http://localhost:8090/api/collections/users/records \
-d '{"email":"test@example.com","password":"12345678"}'
# 登录
curl -X POST http://localhost:8090/api/collections/users/auth-with-password \
-d '{"email":"test@example.com","password":"12345678"}'
# 返回token,后续请求带上 Authorization: Bearer token
还支持Google、GitHub、Discord等OAuth2登录,管理面板里一键配置。
适用场景
| 场景 | 为什么选PocketBase |
| 个人项目/原型 | 零配置启动,5分钟跑通全栈 |
| 内部工具 | 自托管、数据不出内网、权限可控 |
| 小型SaaS | 用户认证+API+文件管理全内置 |
| IoT/边缘设备 | 单文件部署,资源占用极低 |
| 学习/教学 | 一个文件理解完整后端架构 |
和同类工具对比
| 特性 | PocketBase | Firebase | Supabase | Strapi |
| 部署方式 | 单文件/Docker | 云服务 | Docker/云 | Docker/Node |
| 数据库 | SQLite(嵌入) | Firestore | PostgreSQL | SQLite/MySQL/PG |
| 依赖 | 无 | 无(云服务) | PostgreSQL等 | Node.js + DB |
| 实时订阅 | WebSocket | 有 | 有 | 需插件 |
| 成本 | 免费开源 | 免费额度+付费 | 免费额度+付费 | 免费开源 |
进阶玩法
PocketBase不只是一个”开箱即用”的工具,它还是一个Go框架。你可以用Go语言扩展它:
package main
import (
"log"
"github.com/pocketbase/pocketbase"
"github.com/pocketbase/pocketbase/core"
)
func main() {
app := pocketbase.New()
// 注册自定义路由
app.OnServe().BindFunc(func(se *core.ServeEvent) error {
se.Router.GET("/hello", func(re *core.RequestEvent) error {
return re.String(200, "Hello from PocketBase!")
})
return se.Next()
})
if err := app.Start(); err != nil {
log.Fatal(err)
}
}
这意味着你可以把PocketBase当作一个轻量级Go Web框架来用,自定义路由、中间件、后台任务,想怎么扩展都行。
注意事项
虽然PocketBase很香,但也有一些需要注意的点:
- SQLite的并发限制:SQLite是单写多读的,高并发写入场景(比如日活上万的App)可能扛不住
- 未达v1.0:官方明确说还没到稳定版,升级时可能需要手动迁移
- 不适合核心业务:官方建议不要用于生产关键应用,更适合原型和内部工具
- 备份很重要:SQLite文件就是全部数据,记得定期备份
pb_data目录
下载地址
夸克网盘下载(Linux/Windows/macOS版本都打包好了):
https://pan.quark.cn/s/7c9a41e3a1fc
GitHub仓库:https://github.com/pocketbase/pocketbase
官方文档:https://pocketbase.io/docs/
关注公众号:「实用软技」,在公众号窗口里回复关键字「软件」即可免费获取更多软件
