Node项目部署到阿里云服务器

一、服务器基础准备

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权限,有效降低了安全风险。

  1. 安装分布式版本管理系统Git。

    Alibaba Cloud Linux 3/2、CentOS 7.x

    bash 复制代码
    sudo yum install git -y
  2. 使用Git将NVM的源码克隆到本地的~/.nvm目录下,并检查最新版本。

    bash 复制代码
    git clone https://gitee.com/mirrors/nvm.git ~/.nvm && cd ~/.nvm && git checkout `git describe --abbrev=0 --tags`
  3. 依次运行以下命令,配置NVM的环境变量。

    bash 复制代码
    sudo sh -c 'echo ". ~/.nvm/nvm.sh" >> /etc/profile'
    source /etc/profile
  4. 运行以下命令,修改npm镜像源为阿里云镜像,以加快Node.js下载速度。

    bash 复制代码
    export NVM_NODEJS_ORG_MIRROR=https://npmmirror.com/mirrors/node
  5. 运行以下命令,查看Node.js版本。

    bash 复制代码
    nvm list-remote
  6. 安装多个Node.js版本。

    Alibaba Cloud Linux 2 和 CentOS 7.x 仅支持 Node.js 17.x 及以下版本,例如需要安装 v17.9.1,则执行nvm install v17.9.1。

    bash 复制代码
    nvm install v17.9.1
  7. 查看已安装的Node.js版本。

    bash 复制代码
    nvm ls

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

  8. 切换版本

    您可以使用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. 上传项目代码

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解析控制台添加子域名解析:

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进程管理实现稳定运行。

相关推荐
CHNE_TAO_EMSM38 分钟前
Android studio 打开文件时自动下载源码
前端·javascript·android studio
一孤程1 小时前
Airtest自动化测试第五篇:小程序与Web测试——跨平台自动化全覆盖
前端·自动化测试·小程序·自动化·测试·airtest
IT_陈寒1 小时前
SpringBoot自动配置不是你以为的那样的智能
前端·人工智能·后端
yume_sibai2 小时前
大屏数据可视化 - 边框红绿呼吸灯实现详解
前端·信息可视化·typescript
Hyyy3 小时前
很多Desktop都在上的Computer Use是什么
前端·llm
慢功夫3 小时前
开篇:VS Code 为什么不是一个普通 React App
前端·visual studio code
你挚爱的强哥3 小时前
Vue2 实现 1.5s 十连击监听(连续点击若干次),封装通用可复用点击检测工具,不用 data!Vue 封装通用连击监听方法,支持自定义时长与点击次数
前端·javascript·vue.js
程序员张33 小时前
SpringBoot集成BCrypt密码加密库
java·spring boot·后端
CaffeinePro3 小时前
FastAPI数据库集成SQLAlchemy异步ORM全方案
后端·fastapi
小旭Coding3 小时前
凌晨告警轰炸!Go 服务协程只增不减,内存持续暴涨直至 OOM
后端