PocketBase是一个开源的 Go 后端,包括:
- 具有实时订阅功能的嵌入式数据库(SQLite)
- 内置文件和用户管理
- 便捷的管理仪表板用户界面
- 和简单的REST-ish API
有关文档和示例,请访问https://pocketbase.io/docs。
警告
请记住,PocketBase 仍处于积极开发中,因此在达到 v1.0.0 之前无法保证完全向后兼容。
与 API 交互的最简单方法是使用官方 SDK 客户端之一:
- JavaScript - pocketbase/js-sdk(浏览器和节点)
- Dart - pocketbase/dart-sdk(网页、移动、桌面)
您可以从发布页面下载适合您平台的预构建可执行文件。下载后,解压存档并./pocketbase serve在解压的目录中运行。
预构建的可执行文件基于该examples/base/main.go文件,并默认启用 JS VM 插件,允许使用 JavaScript 扩展 PocketBase(有关更多详细信息,请参阅使用 JavaScript 扩展)。
PocketBase 作为常规 Go 库包分发,允许您构建自己的自定义应用程序特定的业务逻辑,并且最后仍具有单个可移植的可执行文件。
这是一个简单的例子:
-
安装 Go 1.21+ (如果你还没有安装)
-
main.go创建一个新的项目目录,其中包含以下文件:package main
import ( "log" "net/http"
<span class="pl-s">"github.com/labstack/echo/v5"</span> <span class="pl-s">"github.com/pocketbase/pocketbase"</span> <span class="pl-s">"github.com/pocketbase/pocketbase/apis"</span> <span class="pl-s">"github.com/pocketbase/pocketbase/core"</span>)
func main() { app := pocketbase.New()
<span class="pl-s1">app</span>.<span class="pl-en">OnBeforeServe</span>().<span class="pl-en">Add</span>(<span class="pl-k">func</span>(<span class="pl-s1">e</span> <span class="pl-c1">*</span>core.<span class="pl-smi">ServeEvent</span>) <span class="pl-smi">error</span> { <span class="pl-c">// add new "GET /hello" route to the app router (echo)</span> <span class="pl-s1">e</span>.<span class="pl-c1">Router</span>.<span class="pl-en">AddRoute</span>(echo.<span class="pl-smi">Route</span>{ <span class="pl-s1">Method</span>: <span class="pl-s1">http</span>.<span class="pl-c1">MethodGet</span>, <span class="pl-s1">Path</span>: <span class="pl-s">"/hello"</span>, <span class="pl-s1">Handler</span>: <span class="pl-k">func</span>(<span class="pl-s1">c</span> echo.<span class="pl-smi">Context</span>) <span class="pl-smi">error</span> { <span class="pl-k">return</span> <span class="pl-s1">c</span>.<span class="pl-en">String</span>(<span class="pl-c1">200</span>, <span class="pl-s">"Hello world!"</span>) }, <span class="pl-s1">Middlewares</span>: []echo.<span class="pl-smi">MiddlewareFunc</span>{ <span class="pl-s1">apis</span>.<span class="pl-en">ActivityLogger</span>(<span class="pl-s1">app</span>), }, }) <span class="pl-k">return</span> <span class="pl-c1">nil</span> }) <span class="pl-k">if</span> <span class="pl-s1">err</span> <span class="pl-c1">:=</span> <span class="pl-s1">app</span>.<span class="pl-en">Start</span>(); <span class="pl-s1">err</span> <span class="pl-c1">!=</span> <span class="pl-c1">nil</span> { <span class="pl-s1">log</span>.<span class="pl-en">Fatal</span>(<span class="pl-s1">err</span>) }}
<clipboard-copy aria-label="Copy" class="ClipboardButton btn btn-invisible js-clipboard-copy m-2 p-0 d-flex flex-justify-center flex-items-center" data-copy-feedback="Copied!" data-tooltip-direction="w" value="package mainimport ( "log" "net/http"
"github.com/labstack/echo/v5" "github.com/pocketbase/pocketbase" "github.com/pocketbase/pocketbase/apis" "github.com/pocketbase/pocketbase/core")
func main() { app := pocketbase.New()
app.OnBeforeServe().Add(func(e *core.ServeEvent) error { // add new "GET /hello" route to the app router (echo) e.Router.AddRoute(echo.Route{ Method: http.MethodGet, Path: "/hello", Handler: func(c echo.Context) error { return c.String(200, "Hello world!") }, Middlewares: []echo.MiddlewareFunc{ apis.ActivityLogger(app), }, }) return nil }) if err := app.Start(); err != nil { log.Fatal(err) }}" tabindex="0" role="button">
-
要初始化依赖项,请运行
go mod init myapp && go mod tidy。 -
要启动应用程序,请运行
go run main.go serve。 -
要构建静态链接的可执行文件,您可以运行
CGO_ENABLED=0 go build,然后使用 启动创建的可执行文件./myapp serve。
笔记
PocketBase 嵌入 SQLite,但不需要 CGO。
如果启用了 CGO(又名CGO_ENABLED=1),它将使用mattn/go-sqlite3驱动程序,否则 - modernc.org/sqlite。仅当您确实需要以复杂的交叉编译为代价来压缩读/写查询性能时才启用 CGO。
更多详细信息请参阅使用 Go 进行扩展。
要构建最小的独立可执行文件(例如发布页面中的预构建文件),您只需在目录go build内运行即可examples/base:
- 安装 Go 1.21+ (如果你还没有安装)
- 克隆/下载 repo
- 导航
examples/base - 运行
GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build(https://go.dev/doc/install/source#environment) - 通过运行来启动创建的可执行文件
./base serve。
请注意,纯 Go SQLite 驱动程序目前支持的构建目标包括:
darwin amd64
darwin arm64
freebsd amd64
freebsd arm64
linux 386
linux amd64
linux arm
linux arm64
linux ppc64le
linux riscv64
linux s390x
windows amd64
windows arm64
PocketBase 附带了单元测试和集成测试的混合包。要运行它们,请使用标准go test命令:
go test ./...另请查看测试指南来了解如何编写您自己的自定义应用程序测试。
如果您发现 PocketBase 中存在安全漏洞,请发送电子邮件至pocketbase.io 的支持部门。
所有报告都会得到及时处理,并且您会得到相应的补偿。
PocketBase 是免费的开源项目,遵循MIT 许可证。您可以自由地使用它做任何您想做的事情,甚至可以将其作为付费服务提供。
您可以通过以下方式帮助其继续发展:
非常欢迎针对新的 OAuth2 提供商的 PR、错误修复、代码优化和文档改进。
但请不要在未事先讨论实施细节的情况下创建新功能的 PR。PocketBase 有一个路线图,我尝试按特定顺序处理问题,但此类 PR 经常会突然出现,并通过繁琐的来回沟通扭曲所有初始规划。
如果我关闭了您的 PR,即使它执行良好且经过了测试,也不要生气。这并不意味着它永远不会被合并。以后,当需要处理问题时,我们总是可以参考它和/或采用您的实现的一部分(不用担心,您会在发行说明中获得认可)。