快速上手PocketBase:几分钟构建轻量级后端

本文详细介绍如何使用Go语言编写的开源后端框架PocketBase,包含安装配置、JavaScript扩展、SDK集成和云端部署等完整技术方案,助你快速构建功能完备的后端系统。

什么是PocketBase?

PocketBase是一个一体化后端解决方案,为现代Web或移动应用提供所需的一切功能,无需复杂的基础设施。它包含嵌入式SQLite数据库、实时订阅、文件和用户管理、简洁的管理面板以及REST风格的API。由于它从单个文件运行,你可以将其部署到几乎任何地方,从VPS到本地机器甚至树莓派。

它专为同时追求控制力和简洁性的开发者设计。你无需为身份验证、存储和API端点管理单独的服务器。PocketBase开箱即用地处理所有这些功能。你可以将其用作独立后端,或嵌入到Go应用程序中创建自定义解决方案。

为什么开发者喜爱PocketBase

PocketBase专注于速度和简洁性。你无需安装多个包或服务。下载后,只需一个命令即可启动。然后它会启动基于Web的管理面板。

数据库使用SQLite构建,这意味着数据默认本地存储,但你可以使用扩展将其与现有工作流或云存储连接。

另一个主要优势是其实时能力。数据库中的每个更改都可以通过WebSocket订阅即时广播到连接的客户端。这使其非常适合构建需要即时更新的应用程序,如聊天系统、仪表板和协作工具。

如何安装PocketBase

启动PocketBase只需不到一分钟。你可以从官方发布页面下载预构建的可执行文件。它支持所有主要平台,包括Windows、macOS和Linux。

下载后,解压存档并在终端中导航到该文件夹。运行以下命令:

1
./pocketbase serve

此命令启动本地服务器,并在http://127.0.0.1:8090/_/启动管理面板。从那里,你可以创建集合、添加用户、上传文件和管理数据。没有设置向导或依赖安装——一切都包含在单个二进制文件中。

如果你是Go开发者,也可以将PocketBase安装为Go模块,并直接在项目中使用它来构建自定义逻辑或扩展现有API。

将PocketBase用作Go框架

PocketBase可以作为Go框架使用,让你构建自己的后端逻辑,同时将所有内容保存在一个文件中。以下是一个简单示例,展示如何使用自定义路由扩展它。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
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 world!")
        })
        return se.Next()
    })
    if err := app.Start(); err != nil {
        log.Fatal(err)
    }
}

文件准备就绪后,运行以下命令:

1
2
go mod init myapp && go mod tidy
go run main.go serve

你现在将拥有一个工作的后端,同时提供PocketBase仪表板和自定义/hello端点。这使得PocketBase非常灵活,你可以将其用作即用型后端,或作为更复杂Go项目的一部分。

使用JavaScript扩展PocketBase

PocketBase包含一个内置的JavaScript引擎,让你无需修改或重新编译Go代码即可扩展其行为。这使得你可以直接在后端中添加自定义逻辑、验证、自动化和事件驱动的工作流。

你可以在pb_hooks文件夹内创建JavaScript文件,PocketBase将自动加载并运行它们。这些脚本可以监听记录创建、更新、身份验证等事件。

以下是一个简单示例,每当新用户注册时发送欢迎邮件。

在PocketBase目录中创建名为pb_hooks/user_email.js的文件:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/// <reference path="../pb_data/types.d.ts" />

onRecordAfterCreate("users", async (e) => {
    const user = e.record;

    console.log("New user registered:", user.email);

    // 示例:使用第三方API发送欢迎邮件
    const emailResponse = await $http.send({
        url: "https://api.example.com/send-email",
        method: "POST",
        body: JSON.stringify({
            to: user.email,
            subject: "Welcome to our app!",
            message: `Hi ${user.username}, thanks for signing up!`
        }),
        headers: {
            "Content-Type": "application/json"
        }
    });

    console.log("Email status:", emailResponse.status);
});

每当在users集合中创建新记录时,此脚本会自动运行。它获取用户的电子邮件,记录它,并使用PocketBase的内置HTTP客户端($http)调用外部电子邮件服务。

你可以使用相同的模式在保存前验证数据、触发webhook、阻止操作或更新相关记录。由于一切都在PocketBase内部运行,你不需要额外的服务器或函数来自动化后端逻辑。

这使得它对不熟悉Go但仍希望向后端添加动态逻辑的团队非常友好。你可以在官方文档的"使用JavaScript扩展"部分找到更多详细信息。

使用SDK与PocketBase交互

为了更轻松地与后端通信,PocketBase为JavaScript和Dart提供官方SDK。JavaScript SDK适用于基于浏览器或Node.js的项目,而Dart SDK则适用于使用Flutter构建的移动应用。两个SDK都提供了连接、验证用户和执行CRUD操作的简便方法,无需手动编写HTTP请求。

例如,在JavaScript中,你可以这样连接和获取数据:

1
2
3
4
5
import PocketBase from 'pocketbase'

const pb = new PocketBase('http://127.0.0.1:8090')
const records = await pb.collection('posts').getList(1, 20)
console.log(records)

这种简洁性让你可以专注于构建前端,而PocketBase处理身份验证、数据库操作和实时更新。

使用Sevalla自托管PocketBase

当你准备好超越测试阶段时,PocketBase为你提供两个选项。你可以使用自己的基础设施自托管它,或使用他们在Pocketbase.io上的托管云版本。

自托管让你拥有完全控制权,通常被希望将敏感数据保存在内部的技術团队首选。

你可以选择任何云提供商,如AWS、DigitalOcean等来设置Pocketbase。但我将使用Sevalla。

Sevalla是一个PaaS提供商,专为开发者和开发团队设计,以最高效的方式不断发布功能和更新。它为你的项目提供应用程序托管、数据库、对象存储和静态站点托管。

我使用Sevalla有两个原因:

  • 每个平台都会为创建云资源向你收费。Sevalla为我们提供50美元的信用额度,因此在此示例中我们不会产生任何成本。
  • Sevalla有一个Umami模板,因此简化了你安装所需每个资源的手动安装和设置。

登录Sevalla并点击Templates。你可以看到PocketBase作为其中一个模板。

点击"PocketBase"模板。你将看到配置应用程序所需的资源。点击"Deploy Template":

你可以看到资源正在配置中。部署完成后,转到PocketBase应用程序并点击"Visit app"。

你将看到404消息。在URL中添加_,你将看到登录仪表板。

要首次登录,你将需要超级用户登录。要创建该用户,请返回应用程序并点击"Logs"。你将看到一个以https://0.0.0.0开头的URL。

将0.0.0.0替换为你的新云URL,并将完整路径复制粘贴到浏览器中。你将看到为PocketBase部署创建超级用户的选项。

创建超级用户后,你可以再次转到/_并使用用户名和密码登录。你现在应该看到PocketBase仪表板。

你现在在云上运行了一个生产级的Pocketbase服务器。你可以使用它来设置数据库表,并使用JavaScript或其他SDK与Pocketbase交互。

安全性和开源性质

PocketBase是开源的,并在MIT许可下发布,这意味着你可以在个人或商业项目中自由使用它。如果你发现错误或安全问题,可以向维护者报告,他们会及时解决。

该项目的透明开发和活跃社区使其成为初创公司、独立开发者和爱好者的可靠选择,他们更喜欢拥有自己的基础设施。

由于它仍在积极开发中,1.0版本之前不保证向后兼容性。但它已经足够稳定,适用于中小型应用程序。

何时使用PocketBase

PocketBase非常适合需要简单后端且维护成本低的项目。它非常适合原型、小型SaaS产品、独立应用、内部工具和教育项目。

无需设置包含PostgreSQL、Node.js和nginx的复杂技术栈,你可以立即启动后端并专注于产品。

如果你的项目后来发展成更大的规模,在这种情况下,你可以迁移到更复杂的设置,或继续使用PocketBase作为特定功能(如身份验证或实时数据同步)的轻量级服务。

结论

PocketBase重新带来了快速开发的乐趣,无需复杂的设置。只需一个可执行文件,你就可以获得一个支持身份验证、实时更新、文件上传和管理面板的后端。它是开源、快速且可定制的,使其成为希望快速行动而不放弃控制的开发者的绝佳选择。

无论你是在构建个人应用、初创公司MVP还是内部仪表板,PocketBase都能让你在几分钟内设置完整的后端。你可以从小处着手,根据需要扩展它,并将其部署到任何地方——同时保持工作流程简单高效。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计