# 部署 Node.js 应用：版本、依赖与运行用户

选择应用支持且仍受维护的 Node.js 版本。安装完成后，还需要把应用交给服务管理器，并设置反向代理和日志。

更新日期：2026-09-16

规范地址：https://stock.iftalking.com/guides/nodejs/

## 1. 按项目要求选择受支持版本

先看项目的 package.json 中 engines、README 和锁文件，选择仍受支持的 Node.js LTS。不要因为系统源能安装某个旧版本，就假设它满足现代应用要求；Current 也不一定是生产项目最合适的选择。

```bash
node --version
npm --version
command -v node
uname -m
```

安装方式可选官方二进制、可信版本管理器或应用官方容器。使用 Node.js 官方下载页给出的当前版本与架构，核对校验值；不同方式不要互相覆盖同一路径。

## 2. 下载项目并检查安装脚本

以普通部署用户获取代码，先查看 package.json 的 scripts 与依赖，确认项目来源。npm 安装可以执行生命周期脚本，因此不能把未知仓库当成纯文本下载后直接 root 安装。

有 package-lock.json 的项目通常使用：

```bash
npm ci
npm run
```

`npm ci` 按锁文件安装，锁文件与 package.json 不一致会失败，应在开发环境解决后提交，不要上线时随意删锁文件。使用 pnpm/yarn 的项目按它自己的锁文件和版本配置执行，不混用多套包管理器。

## 3. 构建与启动分开验证

```bash
npm run build
npm start
```

这些命令只有项目定义了对应 scripts 才适用。先阅读实际脚本，确认输出目录和监听端口。开发服务器的热更新模式通常不作为正式生产入口。

应用先监听本地地址，例如 `127.0.0.1:3000`，在服务器用 curl 检查健康接口，再由反向代理接 HTTPS。前端构建中的环境变量可能被打进浏览器包，不能把私有 API Key 放在公开前缀变量里。

## 4. 交给进程管理器持续运行

按[systemd 教程](https://stock.iftalking.com/guides/persistent-jobs/)设置专用用户、工作目录和实际 Node 路径。用版本管理器安装时，systemd 不会自动加载 `.bashrc`，应指向确定的可执行文件，或使用明确的启动包装脚本。

```bash
systemctl status myapp
journalctl -u myapp -n 50 --no-pager
curl -I http://127.0.0.1:3000/
```

WebSocket、流式响应和长任务需按应用要求设置反向代理，避免默认超时切断。端口占用时先查已有服务，不要杀掉所有 node 进程。

## 5. 更新时保留代码、依赖和数据的回退点

记录 Git 提交与 Node 版本，备份数据库、上传文件和环境配置，再构建新版本。依赖漏洞报告要结合实际可达路径和修复影响处理，不能盲目 `npm audit fix --force` 跨大版本升级。

上线后测试登录、API、静态文件和任务执行，观察日志与内存。回退代码不一定能回退数据库迁移，按应用发布说明处理。容器方案见[Compose 管理](https://stock.iftalking.com/guides/compose-management/)。


## 完成后检查

记录运行版本与锁文件。不要直接在生产机上无范围地升级所有依赖。

## 参考资料

- [nodejs.org · 项目文档](https://nodejs.org/en/download)
