在阿里云服务器上部署nodejs项目
1. 在阿里云服务器上安装 Node.js, 有以下几种常用方法:
方法一:使用 NodeSource 仓库(推荐)
对于 Ubuntu/Debian 系统:
# 安装 curl(如果未安装)
sudo apt update
sudo apt install -y curl
# 添加 NodeSource 仓库(以 LTS 版本为例)
curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash -
# 安装 Node.js(包含 npm)
sudo apt-get install -y nodejs
# 验证安装
node --version
npm --version
对于 CentOS/RHEL 系统:
# 添加 NodeSource 仓库
curl -fsSL https://rpm.nodesource.com/setup_lts.x | sudo bash -
# 安装 Node.js
sudo yum install -y nodejs
# 验证安装
node --version
npm --version
方法二:使用 NVM(Node Version Manager)
NVM 可以管理多个 Node.js 版本,非常灵活:
# 安装 NVM
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash
# 重新加载 bashrc 或重新登录
source ~/.bashrc
# 安装最新的 LTS 版本
nvm install --lts
# 使用该版本
nvm use --lts
# 设置默认版本
nvm alias default node
# 验证安装
node --version
npm --version
方法三:使用包管理器直接安装
Ubuntu/Debian:
sudo apt update
sudo apt install -y nodejs npm
CentOS/RHEL:
sudo yum install -y nodejs npm
方法四:从源码编译安装(高级用户)
# 安装编译工具
sudo apt update
sudo apt install -y curl python3 make g++
# 下载源码(以 Node.js 18 为例)
cd /tmp
curl -O https://nodejs.org/dist/v18.17.0/node-v18.17.0.tar.gz
tar xzf node-v18.17.0.tar.gz
cd node-v18.17.0
# 编译安装
./configure
make -j$(nproc)
sudo make install
方法五:使用二进制包
# 下载二进制包
cd /tmp
wget https://nodejs.org/dist/v18.17.0/node-v18.17.0-linux-x64.tar.xz
# 解压
tar -xf node-v18.17.0-linux-x64.tar.xz
# 移动到系统目录
sudo mv node-v18.17.0-linux-x64 /usr/local/nodejs
# 创建软链接
sudo ln -sf /usr/local/nodejs/bin/node /usr/local/bin/node
sudo ln -sf /usr/local/nodejs/bin/npm /usr/local/bin/npm
sudo ln -sf /usr/local/nodejs/bin/npx /usr/local/bin/npx
安装后的配置
1. 配置 npm 全局安装路径(避免使用 sudo)
mkdir ~/.npm-global
npm config set prefix '~/.npm-global'
echo 'export PATH=~/.npm-global/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
2. 更新 npm 到最新版本
npm install -g npm@latest
3. 安装常用工具
# 安装 yarn
npm install -g yarn
# 安装 pm2(进程管理)
npm install -g pm2
# 安装 express-generator
npm install -g express-generator
验证安装
# 检查 Node.js 版本
node --version
# 检查 npm 版本
npm --version
# 检查安装位置
which node
which npm
4. 配置防火墙(如果需要)
# 如果 Node.js 应用需要监听端口,开放相应端口
sudo firewall-cmd --permanent --add-port=3000/tcp
sudo firewall-cmd --reload
推荐方案
-
新手推荐: 方法一(NodeSource 仓库)
-
开发推荐: 方法二(NVM),便于管理多个项目使用的不同 Node.js 版本
-
生产环境: 方法一或方法五,确保版本稳定
选择哪种方法取决于你的具体需求,如果是生产环境建议使用 LTS(长期支持)版本。
遇到的问题
我尝试在centOs系统下安装node22版本,发现安装失败。原因是 CentOS 系统版本较老(CentOS 7),glibc 版本是 2.17,而 Node.js 22 需要 glibc >= 2.28。
# 查看 CentOS 版本
cat /etc/redhat-release
# 输出:
CentOS Linux release 7.9.2009 (Core)
# 查看 glibc 版本
ldd --version
# 查看系统架构
uname -m
安装nodejs18也不行,所以我尝试选择用nvm安装nodejs 16版本
# 1. 安装 NVM
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash
# 2. 重新加载环境变量
source ~/.bashrc
# 3. 验证 NVM 安装
nvm --version
发现安装失败,原因是网络连接有问题,无法从 GitHub 下载 NVM 安装脚本。这是因为国内的服务器访问 GitHub 经常遇到网络问题。其他方法:
方法一:使用国内镜像安装 NVM
# 使用 gitee 镜像安装 NVM
curl -o- https://gitee.com/mirrors/nvm/raw/v0.39.0/install.sh | bash
# 或者使用 jsdelivr CDN
curl -o- https://cdn.jsdelivr.net/gh/nvm-sh/nvm@v0.39.0/install.sh | bash
方法二:手动下载安装 NVM
# 1. 手动创建 NVM 目录
mkdir -p ~/.nvm
# 2. 手动下载安装脚本(如果上面的镜像不行,可以本地创建)
cat > /tmp/install_nvm.sh << 'EOF'
#!/bin/bash
{
nvm_install_dir="$HOME/.nvm"
nvm_repo_url="https://gitee.com/mirrors/nvm.git"
git clone $nvm_repo_url "$nvm_install_dir"
cd "$nvm_install_dir"
git checkout v0.39.0
} > /dev/null 2>&1
echo "export NVM_DIR=\"$HOME/.nvm\"" >> ~/.bashrc
echo "[ -s \"\$NVM_DIR/nvm.sh\" ] && \\. \"\$NVM_DIR/nvm.sh\"" >> ~/.bashrc
echo "[ -s \"\$NVM_DIR/bash_completion\" ] && \\. \"\$NVM_DIR/bash_completion\"" >> ~/.bashrc
echo "NVM 安装完成,请重新登录或运行: source ~/.bashrc"
EOF
# 3. 运行安装脚本
bash /tmp/install_nvm.sh
# 4. 重新加载环境变量
source ~/.bashrc
方法三:直接下载 Node.js 二进制包(推荐,最稳定)
# 1. 下载 Node.js 16 二进制包(使用国内镜像)
cd /tmp
wget https://npmmirror.com/mirrors/node/v16.20.2/node-v16.20.2-linux-x64.tar.xz
# 如果上面的镜像不行,尝试这个:
# wget https://cdn.npmmirror.com/binaries/node/v16.20.2/node-v16.20.2-linux-x64.tar.xz
# 2. 解压
tar -xf node-v16.20.2-linux-x64.tar.xz
# 3. 移动到系统目录
sudo mv node-v16.20.2-linux-x64 /usr/local/nodejs
# 4. 创建软链接
sudo ln -sf /usr/local/nodejs/bin/node /usr/local/bin/node
sudo ln -sf /usr/local/nodejs/bin/npm /usr/local/bin/npm
sudo ln -sf /usr/local/nodejs/bin/npx /usr/local/bin/npx
# 5. 添加到环境变量
echo 'export PATH=/usr/local/nodejs/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
# 6. 验证安装
node --version
npm --version
方法四:使用 EPEL 仓库的旧版本 Node.js
# 1. 安装 EPEL 仓库
sudo yum install -y epel-release
# 2. 查看可用的 Node.js 版本
yum list available nodejs*
# 3. 安装 Node.js(EPEL 中的版本可能较旧,但稳定)
sudo yum install -y nodejs npm
# 4. 验证安装
node --version
npm --version
方法五:使用华为云镜像
# 使用华为云镜像安装 Node.js 16
cd /tmp
wget https://mirrors.huaweicloud.com/nodejs/v16.20.2/node-v16.20.2-linux-x64.tar.xz
# 后续步骤同方法三
tar -xf node-v16.20.2-linux-x64.tar.xz
sudo mv node-v16.20.2-linux-x64 /usr/local/nodejs
sudo ln -sf /usr/local/nodejs/bin/node /usr/local/bin/node
sudo ln -sf /usr/local/nodejs/bin/npm /usr/local/bin/npm
sudo ln -sf /usr/local/nodejs/bin/npx /usr/local/bin/npx
echo 'export PATH=/usr/local/nodejs/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
node --version
推荐操作顺序
-
首先尝试方法三(直接下载二进制包) - 最可靠,不受网络影响
-
如果方法三失败,尝试方法五(华为云镜像)
-
最后尝试方法四(EPEL 仓库)
最终我通过方法三成功安装了nodejs16版本
2. 将nodejs项目部署到阿里云服务器上
上传前的注意事项
为什么要删除 node_modules
主要原因:
- 文件数量巨大:node_modules 通常包含成千上万个文件,上传极其缓慢
- 平台兼容性问题:Windows 编译的依赖可能在 Linux 服务器上无法运行
- 版本冲突:本地开发环境与服务器环境可能存在差异
- 浪费磁盘空间:重复上传不必要的文件
本地清理
# 在本地项目目录执行清理(linux系统)
rm -rf node_modules
rm -rf dist
# 或者使用 npm 脚本清理(如果 package.json 中有定义)
npm run clean
# window环境,vscode编辑器中PowerShell专用清理命令
# 在项目目录打开 PowerShell
# 删除 node_modules 文件夹
Remove-Item -Recurse -Force node_modules
# 删除 dist 文件夹
Remove-Item -Recurse -Force dist
# 如果有 logs 文件夹也要删除
Remove-Item -Recurse -Force logs
上传项目文件
| 方式 | 适用场景 | 具体操作 |
|---|---|---|
| Git克隆 | 适合代码已在Git仓库,便于后续更新 | cd /home && git clone 你的项目地址 |
| FTP/SFTP工具 | 适合从本地直接上传,直观方便 | 使用FileZilla、Xftp等工具连接服务器后上传 |
| 宝塔面板 | 适合不熟悉命令行的用户 | 安装宝塔面板后,通过网页界面进行文件上传和管理 |
安装项目依赖
1. 进入项目目录:
cd /home/你的项目目录
2. 安装依赖:
如果你的服务器在国内,访问npm官方源可能较慢,可以考虑使用国内镜像源
# 使用npm官方源安装
npm install
# 或者使用淘宝镜像安装
npm install --registry=https://registry.npmmirror.com
构建项目
你的项目是TypeScript编写的,需要先编译为JavaScript才能运行
npm run build
这个命令会执行你在package.json中定义的build脚本,使用TypeScript编译器(tsc)将src目录下的.ts文件编译到dist目录。
启动项目
在服务器上运行Node.js项目,不建议直接使用node或npm start命令,因为这样启动的进程在终端关闭后会自动退出。建议使用进程管理工具。
使用PM2(推荐用于生产环境)
1.全局安装PM2
npm install -g pm2
2. 使用PM2启动项目:
你可以直接启动编译后的JavaScript文件:
pm2 start dist/app.js --name "bookmark-backend"
或者,如果你在package.json中配置了start脚本,也可以这样启动:
pm2 start npm --name "bookmark-backend" -- run start
3. 设置PM2开机自启
为了让应用在服务器重启后能自动运行,需要让PM2生成开机自启脚本:
pm2 startup
pm2 save
PM2常用命令
| 命令 | 说明 |
|---|---|
| pm2 list | 查看所有由PM2管理的应用状态 |
| pm2 logs bookmark-backend | 查看你的后端应用日志 |
| pm2 restart bookmark-backend | 重启应用 |
| pm2 stop bookmark-backend | 停止应用 |
| pm2 delete bookmark-backend | 从PM2列表中删除应用 |
使用nohup(临时测试)
如果只是想快速测试,可以使用nohup命令让进程在后台运行,即使退出终端也不会停止:
nohup node dist/app.js > nohup.log 2>&1 &
注意: 这种方式不适合生产环境,因为进程异常退出时无法自动重启。
重要提醒
-
检查环境变量:确保你的项目依赖的环境变量(如数据库连接信息、JWT密钥等)在服务器上已正确配置。你可以在服务器上创建一个.env文件,内容与你本地开发时的一致。
-
安全组配置:登录阿里云控制台,检查你的服务器安全组规则,确保已经放行了你的Node.js应用监听的端口(例如3000)
完成以上步骤后,你应该就能通过http://你的服务器IP:端口号访问你的服务了。
更多推荐
所有评论(0)