1. 首页 > 技术教程 > 正文

Node.js 部署:前端项目运行环境安装与 PM2 进程管理

Node.js 部署:前端项目运行环境安装与 PM2 进程管理

前端项目打包后扔到服务器上,SSH 一关进程就挂了?别慌,这是没装运行环境和进程管理工具。本文教你从零搭建 Node.js 环境,再用 PM2 把项目稳稳跑起来,连重启都不用操心。主机选的 Linux 教程一向讲实战,这次也不例外。

Node.js 部署:前端项目运行环境安装与 PM2 进程管理的图片

安装 Node.js 运行环境:先搞定基础依赖

Node.js 是前端项目跑起来的前提,版本选 LTS(长期支持)最稳,别追新,容易踩坑。

用 nvm 管理 Node.js 版本

nvm 是 Node Version Manager 的缩写,装一个就能随意切换版本,省得以后升级项目时还得重装。

下载 nvm 安装脚本

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash

加载 nvm 到当前会话

source ~/.bashrc

验证是否安装成功

nvm –version

装完 nvm 后,直接装 Node.js 的 LTS 版:

查看可用 LTS 版本

nvm ls-remote –lts

安装 18.x LTS(推荐,稳定且支持到 2025年)

nvm install 18

设置默认版本

nvm alias default 18

**老鸟叮嘱**:别用系统包管理器(如 apt install nodejs)直接装,版本太老,后续 npm 安装依赖会报错。用 nvm 装完记得跑 `node -v` 和 `npm -v` 确认版本号。

常见报错:nvm command not found

万一报错,大概率是环境变量没加载。检查 `~/.bashrc` 或 `~/.zshrc` 末尾有没有 nvm 配置行,没有就手动加:

export NVM_DIR=”$HOME/.nvm”
[ -s “$NVM_DIR/nvm.sh” ] && . “$NVM_DIR/nvm.sh”

然后 `source ~/.bashrc` 重载一下。

部署前端项目:从打包到启动

项目代码在本地开发完,打包成静态文件或 Node.js 服务端代码,再传到服务器。这里以常见的 Vue/React 项目为例。

上传项目文件到服务器

用 scp 或 rsync 把打包后的 dist 目录(或 server 目录)传到服务器:

本地执行,把本地 dist 目录上传到服务器 /var/www/myapp

scp -r dist/ root@你的服务器IP:/var/www/myapp

安装项目依赖并启动

进到项目目录,装依赖:

cd /var/www/myapp

安装生产依赖,不装 devDependencies

npm install –production

如果是纯静态项目(只有 index.html 和 js/css),直接用 nginx 托管,不需要 Node.js 进程。但如果是 SSR(服务端渲染)或 API 服务,就得用 Node.js 跑起来。

启动项目(临时测试用)

node server.js

按 Ctrl+C 停掉,进程就没了,所以下面要上 PM2

PM2 进程管理:让项目永不掉线

PM2 是 Node.js 的进程守护工具,能自动重启,还能监控资源。装它:

全局安装 pm2

npm install -g pm2

验证

pm2 –version

用 PM2 启动项目

以 `server.js` 为例:

启动项目,并命名为 myapp

pm2 start server.js –name myapp

查看运行状态

pm2 list

保存当前进程列表,开机自启

pm2 save
pm2 startup

**老鸟叮嘱**:`pm2 startup` 命令会生成一条 systemd 配置命令,复制粘贴执行一遍,否则重启服务器后 PM2 不会自动启动。

常用 PM2 命令速查

重启项目

pm2 restart myapp

停止项目

pm2 stop myapp

查看日志(实时输出)

pm2 logs myapp

查看资源占用

pm2 monit

常见报错:PM2 启动后端口占用

如果启动报“EADDRINUSE”,说明端口被别的进程占了。先查谁在用:

查 3000 端口

lsof -i :3000

杀掉占用进程

kill -9 PID

或者改项目配置里的端口号,比如从 3000 改成 3001。

老鸟叮嘱:别忽略系统防火墙

很多新手在 VPS 上装了 Node.js 和 PM2,项目也跑起来了,但浏览器就是访问不了。十有八九是防火墙没放行端口。Linux 上用 ufw 或 firewalld 管理防火墙:

放行 3000 端口

ufw allow 3000

或 firewalld 版

firewall-cmd –zone=public –add-port=3000/tcp –permanent
firewall-cmd –reload

如果用的是云服务器,还得去控制台的安全组里放行端口。这一步忘了,PM2 跑得再好也白搭。

FAQ:Node.js 部署常见问题

Linux SSH 连不上怎么办?

先检查网络通不通:`ping 服务器IP`。通的话,看 SSH 服务有没有启动:`systemctl status sshd`。没启动就 `systemctl start sshd`。还不行,查防火墙是否放行了 22 端口。

PM2 启动后进程一直重启(restart次数飙升)?

通常是代码有 bug。跑 `pm2 logs myapp` 看报错日志,常见原因是端口被占、数据库连不上、环境变量缺失。修好后重启。

前端项目打包后可以直接用 Node.js 运行吗?

纯静态项目(只有 HTML/CSS/JS)不需要 Node.js,用 nginx 或 Apache 托管就行。只有 SSR 或 API 服务才需要 Node.js 运行环境。

BBR 开启后为什么速度没有明显提升?

BBR 优化的是 TCP 拥塞控制,对长连接、大文件下载有效。如果你的项目是短连接(如 API 请求),提升不明显。可以配合 nginx 反向代理和缓存优化。

npm install 报权限错误怎么办?

别用 sudo 装依赖,容易出权限问题。推荐用 nvm 管理 Node.js 版本,这样 npm 全局安装路径在用户目录下,不会报权限。如果已经报错,删除 node_modules 目录,换成普通用户重装。

PM2 开机自启不生效?

`pm2 startup` 后,检查 systemd 服务是否启用:`systemctl status pm2-root`。没启用就 `systemctl enable pm2-root`。另外,确保 `pm2 save` 保存了当前进程列表。

转载请注明出处:https://www.zhujixuan.com/jishujiaocheng/9464.html 商家投稿邮箱:zhujixuanblog@qq.com