Lzh on GitHub

Serverless Hosting

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

什么是无服务器托管?

无服务器托管允许你运行代码和应用程序,而无需直接管理服务器 - 你只需上传代码,云服务提供商会自动处理所有基础设施、扩展和维护,而你只需为实际使用的计算资源付费。

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

使用无服务器部署

该模块内置支持几个著名的无服务器平台。你可以轻松地将你的项目部署到这些平台。查看每个平台的指南:

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

1. 选择数据库服务

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

// 1. Create a PostgreSQL database
// 2. And add the `POSTGRES_URL` to the env variables
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 的预渲染指南,以了解更多关于优化你的无服务器应用程序的不同策略,它适用于所有无服务器平台。