返回

文章详情

在Docker和Kubernetes上运行SQLite应用程序与Litestream

Hacker News2026年8月30日 18:05

OpenRun是一个开源、自托管的GitOps平台,用于在Docker、Podman或Kubernetes上部署Web应用和内部工具。它提供认证、授权、审计和RBAC功能,而无需对应用进行修改。OpenRun现在内置了对SQLite应用的Litestream支持。应用数据库会持续复制到AWS S3或与S3兼容的对象存储,如Cloudflare R2、MinIO和SeaweedFS。恢复是自动的:当OpenRun检测到一个空或重建的应用卷时,它会在启动应用之前从副本中恢复数据库。相同的设置可以在单节点上使用Docker/Podman以及在Kubernetes上使用,结果是应用开发人员可以正常使用SQLite,而无需安装Litestream、配置对象存储、修改他们的容器镜像或实现恢复逻辑。背景SQLite非常适合内部工具和小型Web应用:数据库是基于文件的,读取速度快,没有单独的数据库服务器进行操作。Litestream持续将SQLite的更改复制到对象存储,提供耐用的外部备份和时间点恢复。然而,如果没有平台集成,您仍然需要在应用旁边部署Litestream,配置副本,并在启动期间处理数据库恢复。OpenRun将这些操作工作转移到平台中。Litestream设置只需在服务器配置中定义一次,而OpenRun管理应用容器外的复制和恢复。应用镜像保持不变,新的SQLite应用可以在没有任何Litestream特定设置的情况下使用复制。部署SQLite应用在OpenRun服务器配置中定义Litestream一次: openrun.toml [litestream.mainbackup] bucket = "openrun-backups" region = "us-east-1" access_key_id = '{{secret_from "env" "LITESTREAM_KEY_ID"}}' secret_access_key = '{{secret_from "env" "LITESTREAM_KEY"}}' 然后创建一个引用它的SQLite服务并将应用绑定到该服务: openrun service create sqlite/main --is-default --config litestream_config=mainbackup openrun app create --bind sqlite --approve github.com/example/notes-app /notes 相同的应用可以声明性地定义。将定义放在Git中的其他配置旁边的应用文件中: apps.star app("/notes", "github.com/example/notes-app", bindings = ["sqlite"]) openrun apply --promote github.com/example/config/apps.star openrun apply的工作方式类似于Kubernetes apply:它创建新应用,更新配置发生变化的应用,并保留其余不变。所有应用管理,包括SQLite绑定,都可以通过GitOps进行。这就是整个设置。该应用获得一个挂载到/data的持久卷,并通过注入环境变量(SQLITE_DB_PATH,SQLITE_DIR)找到其数据库。每个应用在该目录中创建的*.db文件都会被复制,包括在运行时创建的文件。默认情况下,变化通常在大约一秒内被复制(sync_interval是可配置的)。单节点在Docker和Podman上,OpenRun在每个应用伴随的容器中运行Litestream,该容器共享应用的数据卷。在应用容器在一个空卷上启动之前,恢复容器拉取任何复制的数据库。当应用在闲置时缩减到零时,Litestream容器执行最终同步并停止。服务器自己的元数据也可以以相同的方式复制。Litestream作为Go库嵌入在OpenRun二进制中,因此在服务器配置中设置metadata.litestream_config可以在没有额外Litestream进程的情况下复制元数据和审计数据库。Kubernetes当OpenRun部署到Kubernetes集群时,相同的应用配置工作。绑定的卷变成PersistentVolumeClaim,OpenRun会自动向应用Pod添加一个恢复初始化容器以及一个本地Litestream侧车(Kubernetes 1.29或更新版本)。侧车在应用容器之前启动,并在应用容器之后终止,使Litestream能够在有序关闭期间执行最终的同步。具有SQLite绑定的应用作为单个副本以Recreate更新策略运行,防止多个应用Pod在更新期间写入相同的SQLite卷。当卷或节点丢失时会发生什么对于丢失的应用卷,恢复在应用的角度是自动的。下次应用启动时,OpenRun看到空卷,运行恢复容器从副本中拉回数据库,然后启动应用容器以恢复的数据。副本是通过绑定来键入的,因此将相同的绑定附加到一个新应用会将数据恢复到该应用的新卷中。对于完全的节点丢失,在启用元数据复制的情况下,恢复程序是:在新机器上安装OpenRun。使用相同的配置文件启动服务器。在启动时,服务器发现其元数据库丢失,从副本中恢复元数据和审计数据库,并完整启动所有应用、绑定、服务、版本和审计历史。每个应用随即恢复。

赞助内容

NordVPN Next-gen Antivirus

本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。

请我喝杯咖啡