部署

无服务器托管

如何在各种无服务器平台上部署 Nuxt Content。

什么是无服务器托管?

无服务器托管让你无需直接管理服务器即可运行代码和应用 —— 你只需上传代码,云服务提供商会自动处理所有基础设施、扩展和维护,只按你实际使用的计算资源收费。

在无服务器环境中,每个用户请求都会触发一个新的 Nuxt 服务器实例,这意味着每次都是从头开始启动。 这种“无状态”特性意味着你不能将数据存储在服务器内存中,也不能使用基于文件的数据库如 SQLite。因此,我们需要使用外部数据库服务(如 D1、Turso 或 PostgreSQL)来持久化数据,独立于你的服务器实例。

使用无服务器部署

该模块内置支持多个知名无服务器平台,你可以轻松将项目部署到它们上。查看各个平台的指南:

如果你想部署到其他平台,可以按照下面的步骤进行。

1. 选择数据库服务

在部署项目之前,你需要选择一个数据库服务:

// 1. 创建一个 PostgreSQL 数据库
// 2. 将 `POSTGRES_URL` 添加到环境变量中
export default defineNuxtConfig({
  content: {
    database: {
      type: 'postgres',
      url: process.env.POSTGRES_URL
    }
  }
})

2. 部署你的项目

Nuxt Content 使用 Nuxt 部署预设来调整不同托管平台的构建流程。

以下无服务器平台支持零配置:

你只需将构建命令设置为:

Terminal
nuxi build

生成的输出将兼容所选平台。

链接的数据库将在服务器启动时于服务器端加载。浏览器端将加载一个 WASM SQLite 数据库,用于客户端导航和操作。
如果你想部署到 AWS Lambda,需确保你的 sqlite 文件存放在 /tmp 中,因为这是唯一可写的目录。
export default defineNuxtConfig({
  modules: ['@nuxt/content'],
  content: {
    database: {
      type: 'sqlite',
      filename: '/tmp/contents.sqlite'
    }
  }
})

3. 通过预渲染优化

由于每个请求都会触发一个新的 Nuxt 服务器实例,如果不预渲染部分页面,将影响你的无服务器应用性能。

为了优化你的无服务器应用,你可以使用 routeRules 选项预渲染页面:

nuxt.config.ts
export default defineNuxtConfig({
  routeRules: {
    '/': { prerender: true }
  }
})
我们推荐查看 NuxtHub 的预渲染指南,了解更多优化无服务器应用的不同策略,该指南适用于所有无服务器平台。