Skip to content

yuanxiaoming8899/pocketbase

 
 

Repository files navigation

PocketBase - 1 个文件中的开源后端

建造 最新版本 Go 包文档

PocketBase是一个开源的 Go 后端,包括:

  • 具有实时订阅功能的嵌入式数据库(SQLite
  • 内置文件和用户管理
  • 便捷的管理仪表板用户界面
  • 和简单的REST-ish API

有关文档和示例,请访问https://pocketbase.io/docs

警告

请记住,PocketBase 仍处于积极开发中,因此在达到 v1.0.0 之前无法保证完全向后兼容。

API SDK 客户端

与 API 交互的最简单方法是使用官方 SDK 客户端之一:

概述

作为独立应用程序使用

您可以从发布页面下载适合您平台的预构建可执行文件。下载后,解压存档并./pocketbase serve在解压的目录中运行。

预构建的可执行文件基于该examples/base/main.go文件,并默认启用 JS VM 插件,允许使用 JavaScript 扩展 PocketBase(有关更多详细信息,请参阅使用 JavaScript 扩展)。

用作 Go 框架/工具包

PocketBase 作为常规 Go 库包分发,允许您构建自己的自定义应用程序特定的业务逻辑,并且最后仍具有单个可移植的可执行文件。

这是一个简单的例子:

  1. 安装 Go 1.21+ (如果你还没有安装)

  2. 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 main

    import ( "log" "net/http"

    &quot;github.com/labstack/echo/v5&quot;
    &quot;github.com/pocketbase/pocketbase&quot;
    &quot;github.com/pocketbase/pocketbase/apis&quot;
    &quot;github.com/pocketbase/pocketbase/core&quot;
    

    )

    func main() { app := pocketbase.New()

    app.OnBeforeServe().Add(func(e *core.ServeEvent) error {
        // add new &quot;GET /hello&quot; route to the app router (echo)
        e.Router.AddRoute(echo.Route{
            Method: http.MethodGet,
            Path:   &quot;/hello&quot;,
            Handler: func(c echo.Context) error {
                return c.String(200, &quot;Hello world!&quot;)
            },
            Middlewares: []echo.MiddlewareFunc{
                apis.ActivityLogger(app),
            },
        })
    
        return nil
    })
    
    if err := app.Start(); err != nil {
        log.Fatal(err)
    }
    

    }" tabindex="0" role="button">

  3. 要初始化依赖项,请运行go mod init myapp && go mod tidy

  4. 要启动应用程序,请运行go run main.go serve

  5. 要构建静态链接的可执行文件,您可以运行CGO_ENABLED=0 go build,然后使用 启动创建的可执行文件./myapp serve

笔记

PocketBase 嵌入 SQLite,但不需要 CGO。

如果启用了 CGO(又名CGO_ENABLED=1),它将使用mattn/go-sqlite3驱动程序,否则 - modernc.org/sqlite。仅当您确实需要以复杂的交叉编译为代价来压缩读/写查询性能时才启用 CGO。

更多详细信息请参阅使用 Go 进行扩展

构建并运行 repo main.go 示例

要构建最小的独立可执行文件(例如发布页面中的预构建文件),您只需在目录go build内运行即可examples/base

  1. 安装 Go 1.21+ (如果你还没有安装)
  2. 克隆/下载 repo
  3. 导航examples/base
  4. 运行GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go buildhttps://go.dev/doc/install/source#environment
  5. 通过运行来启动创建的可执行文件./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,即使它执行良好且经过了测试,也不要生气。这并不意味着它永远不会被合并。以后,当需要处理问题时,我们总是可以参考它和/或采用您的实现的一部分(不用担心,您会在发行说明中获得认可)。

About

1 个文件中的开源实时后端

Resources

License

Contributing

Security policy

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Go 65.8%
  • Svelte 19.2%
  • SCSS 7.6%
  • CSS 4.2%
  • JavaScript 3.1%
  • HTML 0.1%