Heroku
将 Nitro 应用部署到 Heroku。
预设: heroku
Read more in heroku.com.
#使用 Heroku CLI
创建一个新的 Heroku 应用。
heroku create myapp配置 Heroku 使用 nodejs 构建包。
heroku buildpacks:set heroku/nodejs配置你的应用。
heroku config:set NITRO_PRESET=heroku确保在 package.json 文件中有 start 和 build 命令。
"scripts": {
"build": "nitro build", // 如果使用 nuxt 则为 `nuxt build`
"start": "node .output/server/index.mjs"
}#使用 Nginx
将 Nitro 配置中的预设更改为 node_middleware
nitro.config.ts
import { defineConfig } from "nitro";
export default defineConfig({
preset: "node_middleware",
})或者,如果你使用的是 Nuxt:
nuxt.config.ts
export default defineNuxtConfig({
nitro: {
preset: "node_middleware",
},
})如构建包文档的现有应用部分所述,需要完成以下两个关键步骤才能正常运行:
- 在
/tmp/nginx.socket上监听套接字 - 在应用准备好接受连接时创建文件
/tmp/app-initialized
创建一个自定义应用运行器(例如,在项目根目录下创建 apprunner.mjs)。在此文件中,使用 node_middleware 预设生成的中间件创建服务器,然后按照构建包文档中的详细说明监听套接字:
import { createServer } from 'node:http'
import { middleware } from './.output/server/index.mjs'
const server = createServer(middleware)
server.listen('/tmp/nginx.socket') //遵循构建包文档要创建 /tmp/app-initialized 文件,请使用 Nitro 插件(例如,在项目根目录下创建 initServer.ts):
import fs from "node:fs"
import { definePlugin } from "nitro"
export default definePlugin((nitroApp) => {
if((process.env.NODE_ENV || 'development') != 'development') {
fs.openSync('/tmp/app-initialized', 'w')
}
})最后,在项目根目录下创建一个 Procfile。它会告知 Heroku 启动 nginx,并使用自定义的 apprunner.mjs 启动服务器:
Procfile
web: bin/start-nginx node apprunner.mjs附加内容:创建一个 config/nginx.conf.erb 文件来定制你的 nginx 配置。默认情况下,node_middleware 预设不会生成静态文件处理程序,因此你可以通过向服务器代码块中添加正确的 location 规则,让 nginx 提供静态文件。或者,将 serveStatic 设置为 true,强制预设生成静态文件处理程序。