一、服务器基础准备
1. 服务器配置
- 购买云服务器(阿里云)
- 选择适合的操作系统(CentOS 7.9)
- 开放安全组端口:
22(SSH)、80(HTTP)、443(HTTPS)、你的应用端口(如3000)
2. 本地项目准备
- 确保项目在本地运行正常
- 清理
node_modules和测试文件
二、环境安装与配置
1. 安装Node.js
在Linux上部署Node.js,本文选择使用NVM(Node Version Manager)。与包管理器安装相比,NVM不受系统仓库版本限制,确保获取最新Node.js版本;与下载预编译二进制包相比,NVM省去了繁琐的环境变量配置;与从源代码编译安装相比,NVM大大缩短了安装时间,且对用户编译技能无要求。更重要的是,NVM支持多版本管理,方便切换,且安装的Node.js位于用户家目录,无需sudo权限,有效降低了安全风险。
-
安装分布式版本管理系统Git。
Alibaba Cloud Linux 3/2、CentOS 7.x
bashsudo yum install git -y -
使用Git将NVM的源码克隆到本地的~/.nvm目录下,并检查最新版本。
bashgit clone https://gitee.com/mirrors/nvm.git ~/.nvm && cd ~/.nvm && git checkout `git describe --abbrev=0 --tags` -
依次运行以下命令,配置NVM的环境变量。
bashsudo sh -c 'echo ". ~/.nvm/nvm.sh" >> /etc/profile' source /etc/profile -
运行以下命令,修改npm镜像源为阿里云镜像,以加快Node.js下载速度。
bashexport NVM_NODEJS_ORG_MIRROR=https://npmmirror.com/mirrors/node -
运行以下命令,查看Node.js版本。
bashnvm list-remote -
安装多个Node.js版本。
Alibaba Cloud Linux 2 和 CentOS 7.x 仅支持 Node.js 17.x 及以下版本,例如需要安装 v17.9.1,则执行nvm install v17.9.1。
bashnvm install v17.9.1

-
查看已安装的Node.js版本。
bashnvm ls返回结果如下所示,表示当前已安装v22.11.0、v23.3.0两个版本,正在使用的是v22.11.0版本。

-
切换版本
您可以使用nvm use <版本号>命令切换Node.js的版本。 例如,切换至Node.js v23.3.0版本的命令为nvm use v23.3.0。
2. 安装PM2(进程管理)
bash
sudo npm install -g pm2
3. 安装Nginx(反向代理)
bash
sudo yum install -y nginx
# 启动Nginx
sudo systemctl start nginx
sudo systemctl enable nginx #开机自动启动
三、部署Node.js项目
假设有两个项目:
- 项目1:端口3000,子域名api1.example.com
- 项目2:端口4000,子域名api2.example.com
1. 上传项目代码
bash
# 创建项目目录
mkdir -p /var/www/api1 /var/www/api2
# 上传代码(使用git)
cd /var/www/api1
git clone your-repo-url
npm install
cd /var/www/api2
git clone your-second-repo-url
npm install
2. 使用PM2启动项目
bash
# 启动项目1
cd /var/www/api1
pm2 start app.js --name "api1" -i max --watch
# 启动项目2
cd /var/www/api2
pm2 start app.js --name "api2" -i max --watch
# 保存PM2配置
pm2 save
# 设置PM2开机启动
pm2 startup
# 执行输出的命令(会显示类似下面的命令)
# sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup centos -u root --hp /root
四、配置子域名和Nginx反向代理
1. 域名解析准备
在阿里云DNS解析控制台添加子域名解析:
- api1.example.com → 服务器IP
- api2.example.com → 服务器IP
2. 配置Nginx反向代理
为项目1创建配置 (api1.example.com)
nginx
server {
listen 80;
server_name api1.example.com;
location / {
proxy_pass http://localhost:3000; # 假设项目1运行在3000端口
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
为项目2创建配置 (api2.example.com)
nginx
server {
listen 80;
server_name api2.example.com;
location / {
proxy_pass http://localhost:4000; # 假设项目2运行在4000端口
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
3. 测试并重启Nginx
bash
nginx -t
systemctl restart nginx
五、维护与监控
1. PM2常用命令
bash
pm2 list # 查看所有应用
pm2 restart api1 # 重启特定应用
pm2 stop api2 # 停止应用
pm2 delete api1 # 删除应用
2. Nginx常用命令
bash
systemctl restart nginx # 重启Nginx
nginx -t # 测试配置
journalctl -u nginx # 查看Nginx系统日志
3. 查看服务器资源
bash
top
htop
df -h
free -m
通过以上步骤,你可以在CentOS 7.9服务器上部署多个Node.js项目,并通过不同的子域名访问它们。每个项目都运行在独立的端口上,通过Nginx反向代理和PM2进程管理实现稳定运行。