Skip to content

NuxSaaS 无厂商锁定(No Vendor Lock-In)

简介

NuxSaaS 的设计高度重视避免厂商锁定。这意味着你可以在不同的云服务商和环境之间部署、迁移和运行你的 SaaS 应用,而不会被某一家厂商的专有服务或 API 所束缚。本文档将解释 NuxSaaS 如何实现这一点,以及为什么这对你的项目灵活性和长期发展至关重要。

NuxSaaS 如何避免厂商锁定

1. 环境变量驱动的配置

  • 所有关键服务端点(数据库、缓存、邮件等)都通过环境变量进行配置,而不是硬编码在代码中。
  • 请参阅 .env.example 获取所有可配置变量的完整列表:
    • NUXT_NITRO_PRESET 用于在 Node.js 服务器和 Cloudflare Workers 之间切换
    • NUXT_CF_HYPERDRIVE_ID 用于数据库连接字符串,在使用 Cloudflare Workers 时必填
    • NUXT_DATABASE_URL 用于数据库连接字符串,在使用 Node.js 服务器时必填
    • NUXT_REDIS_URL 用于缓存后端,在使用 Node.js 服务器时必填

这种方式让你可以通过简单地更改环境变量来替换基础设施组件(例如,从本地 Postgres 切换到 Serverless Postgres,或从 Redis 切换到其他缓存),无需修改代码

2. 可插拔的数据库与缓存驱动

  • 文件 server/utils/drivers.ts 抽象了数据库和缓存的访问。
  • 数据库部分使用标准的 PostgreSQL 驱动(pg),并根据运行环境(Node.js 服务器或 Cloudflare Hyperdrive)动态选择连接字符串。
  • 缓存部分根据部署预设,使用 Redis(通过 ioredis)或键值存储抽象(hubKV)。

关键代码片段:

ts
const getDatabaseUrl = () => {
  if (runtimeConfig.preset == 'node-server') {
    return runtimeConfig.databaseUrl
  } else {
    return hyperdrive?.connectionString || runtimeConfig.databaseUrl
  }
}

这意味着你可以在自己的服务器或 Cloudflare Worker 上运行 NuxSaaS,而无需重写数据访问逻辑。

为什么避免厂商锁定很重要

  • 可移植性:你可以在任何云服务商、本地服务器,甚至本地开发和测试环境中部署 NuxSaaS。
  • 成本控制:当价格或服务质量发生变化时,可以轻松迁移到其他服务商。
  • 面向未来:如果某个厂商停止服务或更改 API,无需重写大量代码。
  • 合规性:通过选择数据存储和处理的位置和方式,满足数据本地化或监管要求。
  • 社区与生态:依赖开放标准和流行库,受益于社区支持,避免依赖单一厂商的产品路线。