Node.js 部署
Hono 在 Node.js 中通过 @hono/node-server 运行。部署时重点关注端口、进程管理、优雅关闭、日志和反向代理。
启动入口
import { serve } from '@hono/node-server'
import { Hono } from 'hono'
const app = new Hono()
app.get('/health', (c) => c.json({ ok: true }))
const port = Number(process.env.PORT ?? '3000')
const server = serve({
fetch: app.fetch,
port,
})
console.log(`Server is running on http://localhost:${port}`)
优雅关闭
Node.js 中 serve() 返回底层 server 实例。收到退出信号时应主动关闭:
process.on('SIGINT', () => {
server.close()
process.exit(0)
})
process.on('SIGTERM', () => {
server.close((err) => {
if (err) {
console.error(err)
process.exit(1)
}
process.exit(0)
})
})
这能减少部署重启时的连接中断和未完成请求。
package.json 脚本
{
"scripts": {
"dev": "tsx watch src/index.ts",
"build": "tsc",
"start": "node dist/index.js"
}
}
生产环境不要直接用 watch 命令启动。
Docker 示例
FROM node:22-alpine AS deps
WORKDIR /app
COPY package.json pnpm-lock.yaml ./
RUN corepack enable && pnpm install --frozen-lockfile
FROM node:22-alpine AS build
WORKDIR /app
COPY --from=deps /app/node_modules ./node_modules
COPY . .
RUN corepack enable && pnpm build
FROM node:22-alpine AS runner
WORKDIR /app
ENV NODE_ENV=production
COPY package.json pnpm-lock.yaml ./
COPY --from=deps /app/node_modules ./node_modules
COPY --from=build /app/dist ./dist
EXPOSE 3000
CMD ["node", "dist/index.js"]
如果项目依赖原生模块,构建镜像和运行镜像的系统环境要保持兼容。
Nginx 反向代理
server {
listen 80;
server_name api.example.com;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
反向代理层可以处理 HTTPS、压缩、访问日志和限流。应用层仍然应该做好鉴权和输入验证。
部署检查清单
PORT、数据库连接、JWT 密钥等配置已通过环境变量提供。/health或/ready健康检查可用。- 进程收到
SIGTERM可以优雅退出。 - 日志包含请求方法、路径、状态码、耗时和错误信息。
- 反向代理正确传递
Host、X-Forwarded-*头。
相关内容
- Hono 是什么 介绍 Hono 的定位、核心特点、Web Standards 思路、多运行时能力,以及它与传统 Node.js Web 框架的差异。
- 安装和 Hello World 学习使用 create-hono 创建 Hono 项目,分别了解通用模板和 Node.js 模板的 Hello World 写法。
- 运行时选择 对比 Hono 在 Node.js、Cloudflare Workers、Bun、Deno 等运行时中的入口写法、部署方式和适用场景。
- 路由基础 学习 Hono 的 GET、POST、动态参数、通配符、路由分组和模块化路由写法。
- Context 详解 介绍 Hono Context 的 req、json、text、html、redirect、header、status、set、get 等常用 API。
- 中间件机制 学习 Hono 中间件的执行顺序、自定义中间件写法、路径匹配、next 调用和常见使用场景。