腾讯云 Ubuntu 服务器 Node.js 环境完整安装配置教程
本文将详细讲解在腾讯云 Ubuntu 服务器(适配 18.04/20.04/22.04 LTS 版本)上,通过 NodeSource 源安装 Node.js + 配置 cnpm + 解决 80 端口监听权限问题的完整流程,兼顾实用性和生产环境适配性。
一、前期准备
-
登录腾讯云服务器 :通过 SSH 工具(Xshell/Finalshell/终端)登录 Ubuntu 服务器,推荐使用普通用户登录(若当前为 root,可创建普通用户:
useradd -m ubuntu && passwd ubuntu,并赋予 sudo 权限:usermod -aG sudo ubuntu)。 -
更新系统软件源 :腾讯云内网源速度较快,先更新源确保安装顺利:
bashsudo apt update -y && sudo apt upgrade -y -
安装基础依赖 :确保系统具备 curl 工具(用于下载安装脚本):
bashsudo apt install -y curl
二、通过 NodeSource 安装 Node.js & npm
NodeSource 源提供了最新稳定版 Node.js,相比 Ubuntu 官方源版本更新,步骤如下:
步骤 1:下载并执行 NodeSource 安装脚本
以安装 Node.js 22.x(最新 LTS 版,长期支持)为例,执行以下命令:
bash
# 下载并运行 NodeSource 22.x 安装脚本,自动配置软件源
curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash -
- 若需安装其他版本(如 20.x),将命令中的
setup_22.x替换为setup_20.x即可。 - 脚本执行完成后,会自动向系统添加 NodeSource 软件源配置。
步骤 2:安装 Node.js 和 npm
bash
# 安装 Node.js(内置 npm,无需单独安装)
sudo apt install -y nodejs
步骤 3:验证安装是否成功
bash
# 查看 Node.js 版本(应输出 v22.x.x 格式)
node -v
# 查看 npm 版本(应输出对应配套版本,如 10.x.x)
npm -v
若均能输出版本号,说明 Node.js 和 npm 安装成功。
三、配置 cnpm(淘宝镜像加速)
由于国内网络环境限制,npm 官方源下载依赖较慢,推荐安装 cnpm(npm 淘宝镜像镜像),步骤如下:
步骤 1:全局安装 cnpm
bash
# 全局安装 cnpm,-g 表示全局生效
sudo npm i cnpm -g --registry=https://registry.npm.taobao.org
--registry=https://registry.npm.taobao.org临时指定淘宝镜像源,确保安装速度。
步骤 2:验证 cnpm 安装
bash
# 查看 cnpm 版本
cnpm -v
输出版本号即表示 cnpm 安装成功,后续可通过 cnpm install 依赖名 替代 npm install 依赖名,大幅提升依赖下载速度。
可选:配置 npm 永久使用淘宝镜像
若不想使用 cnpm,也可直接将 npm 源永久改为淘宝镜像:
bash
# 配置 npm 永久镜像源
npm config set registry https://registry.npm.taobao.org
# 验证配置是否生效
npm config get registry
输出 https://registry.npm.taobao.org 即表示配置成功。
四、解决 Node.js 监听 80 端口失败问题
80 端口是 HTTP 协议默认端口,属于系统「特权端口」(1-1023 端口均为特权端口),普通用户运行的 Node.js 进程默认无权限监听,以下提供两种解决方案(推荐方案 2)。
方案 1:给 Node 进程赋予 CAP_NET_BIND_SERVICE 权限(简单快捷,适合测试/小型服务)
该方案无需 root 运行 Node.js,仅给 node 二进制文件赋予监听特权端口的权限,步骤如下:
步骤 1:添加端口监听权限
bash
# 给 node 二进制文件添加 CAP_NET_BIND_SERVICE 权限
sudo setcap 'cap_net_bind_service=+ep' $(which node)
# 验证权限是否添加成功(无报错即生效)
$(which node) -v
$(which node)会自动获取 node 二进制文件的绝对路径,无需手动查找。
步骤 2:修改 Node.js 服务代码,监听 80 端口
打开你的 Node.js 服务入口文件(如 index.js),将监听端口改为 80:
javascript
// 示例:Express 服务监听 80 端口
const express = require('express');
const app = express();
// 路由示例
app.get('/', (req, res) => {
res.send('Hello World! 服务运行在 80 端口');
});
// 监听 80 端口
app.listen(80, () => {
console.log('服务已启动,访问地址:http://localhost 或 http://服务器公网IP');
});
步骤 3:启动服务并验证
bash
# 进入服务目录
cd ~/你的服务目录
# 启动 Node.js 服务
node index.js
# 另开一个终端,验证 80 端口访问
curl http://localhost
若返回 Hello World! 服务运行在 80 端口,说明 80 端口监听成功。
方案 2:Nginx 反向代理(推荐,生产环境标配)
该方案让 Node.js 服务监听非特权端口(如 3000、8080),通过 Nginx 反向代理将 80 端口的请求转发到 Node.js 服务,安全稳定且便于后续扩展(如负载均衡)。
步骤 1:安装 Nginx
bash
# 安装 Nginx
sudo apt install -y nginx
# 验证 Nginx 安装(查看版本)
nginx -v
# 启动 Nginx 并设置开机自启
sudo systemctl start nginx
sudo systemctl enable nginx
- 腾讯云服务器默认防火墙(ufw)若开启,需允许 80 端口:
sudo ufw allow 80/tcp。 - 此时通过浏览器访问服务器公网 IP,能看到 Nginx 默认页面,说明 Nginx 启动成功。
步骤 2:修改 Node.js 服务代码,监听非特权端口
将服务监听端口改为 3000(非特权端口,无需特殊权限):
javascript
// 示例:Express 服务监听 3000 端口
const express = require('express');
const app = express();
app.get('/', (req, res) => {
res.send('Hello World! Node 服务运行在 3000 端口');
});
// 监听 3000 端口
app.listen(3000, () => {
console.log('Node 服务已启动,监听 3000 端口');
});
启动 Node.js 服务:
bash
# 启动服务(可使用 pm2 后台运行,见下文补充)
node index.js
步骤 3:配置 Nginx 反向代理
bash
# 编辑 Nginx 默认站点配置文件
sudo vim /etc/nginx/sites-available/default
按 i 进入编辑模式,将配置内容替换为以下内容:
nginx
server {
listen 80 default_server;
listen [::]:80 default_server;
# 服务器域名(无域名可填服务器公网 IP 或 _)
server_name _;
# 反向代理配置:将 80 端口请求转发到 Node 服务的 3000 端口
location / {
proxy_pass http://localhost:3000; # 对应 Node 服务的监听端口
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; # 传递客户端真实 IP
}
}
编辑完成后,按 Esc,输入 :wq 保存并退出。
步骤 4:验证 Nginx 配置并重启
bash
# 验证配置是否有误(无报错即正常)
sudo nginx -t
# 重启 Nginx 使配置生效
sudo systemctl restart nginx
步骤 5:验证 80 端口访问
bash
# 服务器本地验证
curl http://localhost
# 外部浏览器验证:访问 http://服务器公网 IP
若返回 Hello World! Node 服务运行在 3000 端口,说明反向代理配置成功,无需 Node.js 直接监听 80 端口即可通过 80 端口访问服务。
五、补充:Node.js 服务后台长期运行(pm2 进程管理)
直接用 node index.js 启动服务,关闭终端后服务会中断,推荐使用 pm2 进程管理工具实现后台长期运行。
步骤 1:安装 pm2
bash
# 全局安装 pm2(cnpm 或 npm 均可)
cnpm install -g pm2
# 或 npm install -g pm2
步骤 2:用 pm2 启动 Node.js 服务
bash
# 进入服务目录
cd ~/你的服务目录
# 启动服务,--name 给服务命名(便于管理)
pm2 start index.js --name "node-app"
# 查看服务状态
pm2 status
# 查看服务日志
pm2 logs node-app
# 设置 pm2 开机自启
pm2 startup
pm2 save # 保存当前进程列表
步骤 3:pm2 常用命令
bash
# 重启服务
pm2 restart node-app
# 停止服务
pm2 stop node-app
# 删除服务
pm2 delete node-app
# 查看所有进程
pm2 list
六、腾讯云专属配置补充
- 安全组配置:登录腾讯云控制台 → 云服务器 → 安全组 → 配置规则,添加「入方向」规则,允许 80 端口(HTTP)、3000 端口(Node 服务,可选)的访问(来源设为 0.0.0.0/0 或指定 IP)。
- 内网源优化:腾讯云 Ubuntu 服务器默认已配置内网软件源,无需额外修改,若下载缓慢可在控制台更换「镜像市场」的优化镜像。
- 权限问题:避免用 root 用户直接运行 Node.js 服务,普通用户配合 pm2 或 Nginx 即可满足生产需求,提升安全性。
总结
- 腾讯云 Ubuntu 安装 Node.js 优先选择 NodeSource 源,步骤为「执行安装脚本→安装 nodejs→验证版本」,确保获取最新稳定版。
- 国内环境推荐配置 cnpm 或 npm 淘宝镜像,解决依赖下载缓慢问题。
- Node.js 监听 80 端口的两种方案:测试环境用
setcap赋予权限,生产环境优先用 Nginx 反向代理,安全且易扩展。 - pm2 是 Node.js 服务后台运行的必备工具,可实现开机自启、日志管理等功能,保障服务稳定运行。
- 腾讯云环境需额外配置安全组开放对应端口,确保外部能正常访问服务。