存储配置
概述
OpenZeppelin Relayer 支持两种存储后端,用于持久化配置数据和交易状态。存储后端的选择会影响配置的管理方式、数据持久化和性能特征。
存储类型决定了你的配置更改如何持久化,以及基于文件和基于 API 的配置如何交互。为你的部署需求选择正确的存储类型。
欢迎社区贡献:欢迎来自开源社区的额外存储后端(例如 PostgreSQL、MongoDB 或其他数据库)的贡献。该存储系统被设计为可扩展的,可以很容易地添加新的存储实现。
存储类型
内存存储
内存存储将所有配置和交易数据保存在应用程序的内存中。
使用场景
开发和测试环境
临时部署
单实例部署
不需要跨重启的数据持久化时
特点
快速性能:无数据访问的网络开销
无外部依赖:不需要 Redis 或其他外部服务
无持久化:当容器重启时,所有数据都会丢失
单实例:不能在多个 relayer 实例之间共享
配置同步行为
每次启动时,都会加载来自
config.json的配置API 更改不会同步回
config.json文件所有基于 API 的配置更改都会在重启时丢失
基于文件的配置始终在启动时优先
## 启用内存存储 REPOSITORY_STORAGE_TYPE=in-memoryRedis 存储
Redis 存储将所有配置和交易数据持久化在 Redis 数据库中。
使用场景
生产环境部署
多实例部署
需要数据持久化时
可扩展的环境
当基于 API 的配置更改应该持久化时
特点
持久化:数据在容器重启后仍然存在
网络依赖:需要 Redis 连接
加密:支持静态加密来保护敏感数据
配置同步行为
来自
config.json的配置仅在第一次启动时加载到 Redis 中后续启动使用存储在 Redis 中的配置
API 更改会被持久化并在重启后仍然存在
可以通过设置
RESET_STORAGE_ON_START=true来使基于文件的配置覆盖 Redis
## 启用 Redis 存储 REPOSITORY_STORAGE_TYPE=redis REDIS_URL=redis://localhost:6379 STORAGE_ENCRYPTION_KEY=your-encryption-key-here配置参考
核心存储设置
| 环境变量 | 默认值 | 接受的值 | 描述 |
|---|---|---|---|
REPOSITORY_STORAGE_TYPE | in-memory | in-memory, redis | 用于存储配置和交易数据的存储后端类型。 |
RESET_STORAGE_ON_START | false | true, false | 当为 true 时,启动时清除存储中的所有数据,并从配置文件重新加载。用于强制基于文件的配置覆盖存储的数据。 |
TRANSACTION_EXPIRATION_HOURS | 4 | number | 事务处于最终状态后自动从存储中删除以防止存储膨胀的小时数。 |
Redis 特有设置
| 环境变量 | 默认值 | 接受的值 | 描述 |
|---|---|---|---|
REDIS_URL | redis://localhost:6379 | Redis 连接字符串 | Redis 实例的完整连接 URL。支持 Redis、Redis Sentinel 和 Redis Cluster 配置。 |
REDIS_CONNECTION_TIMEOUT_MS | 10000 | number (毫秒) | 连接到 Redis 超时前等待的最大时间。 |
REDIS_KEY_PREFIX | oz-relayer | string | 添加到所有 Redis 键的前缀。当与其他应用程序共享 Redis 时,对于命名空间很有用。 |
STORAGE_ENCRYPTION_KEY | `` | string (base64) | 用于在 Redis 中静态加密敏感数据的加密密钥。使用 cargo run --example generate_encryption_key 生成。 |
安全注意事项
Redis 安全
在生产中使用 Redis 存储时:<br>- 使用静态加密:始终设置 STORAGE_ENCRYPTION_KEY<br> <br>- 保护 Redis 访问:使用 Redis AUTH、TLS 和网络安全<br> <br>- 网络隔离:在私有网络中部署 Redis<br> <br>- 定期备份:实施 Redis 备份策略<br> <br>- 监控访问:记录和监控 Redis 访问模式 |
静态加密
当提供 STORAGE_ENCRYPTION_KEY 时,敏感配置数据在存储到 Redis 之前会被加密。
加密的数据包括: - 签名者私钥和密码 - Webhook 签名密钥 - API 密钥(当存储在配置中时) - 其他敏感配置值
生成加密密钥:
## 生成安全加密密钥 cargo run --example generate_encryption_key ## 使用 OpenSSL 的替代方法 openssl rand -base64 32交易存储管理
自动清理
交易在达到其最终状态后会自动从存储中删除,以防止存储膨胀:
## 配置交易保留期(默认:4 小时) TRANSACTION_EXPIRATION_HOURS=8最终交易状态:
confirmed- 交易在区块链上确认failed- 交易失败,不会重试cancelled- 交易被用户取消expired: - 交易已过期
- 原文链接: docs.openzeppelin.com/re...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~