首页 时政热点 科技头条 智能AI 安全攻防 数码硬件 开发者生态 汽车 游戏 社会热点 开源推荐 医疗健康 归档 标签 关于

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

2026-08-31 1 阅读 约8分钟阅读 ajayvk
分享:
字号:
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 特定的设置。在 OpenRun 服务器配置中部署 SQLite 应用程序定义 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 中的其他配置一起放在 apply 文件中: 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 会自动将恢复初始化容器和本机 Litestream sidecar(Kubernetes 1.29 或更高版本)添加到应用程序 pod。 sidecar 在应用程序容器之前启动并在应用程序容器之后终止,从而允许 Litestream 在有序关闭期间执行最终同步。具有 SQLite 绑定的应用程序作为具有重新创建更新策略的单个副本运行,从而防止多个应用程序 Pod 在更新期间写入同一 SQLite 卷。卷或节点丢失时会发生什么对于丢失的应用程序卷,从应用程序的角度来看,恢复是自动的。下次应用程序启动时,OpenRun 会看到空卷,运行还原容器以从副本中拉回数据库,然后针对还原的数据启动应用程序容器。副本由绑定键控,因此将相同的绑定附加到新应用程序也会将数据恢复到该应用程序的新卷中。对于完全节点丢失,在启用元数据复制的情况下,恢复过程是: 在新计算机上安装 OpenRun。使用相同的配置文件启动服务器。启动时,服务器发现其元数据数据库丢失,从副本恢复元数据和审计数据库,并完好无损地提供所有应用程序、绑定、服务、版本和审计历史记录。然后每个应用程序重新
这篇文章对您有帮助吗?

订阅66必读

每日精选科技资讯,直达你的邮箱