首先确保Debian系统包为最新版本,避免依赖冲突:
sudo apt update && sudo apt upgrade -y
通过NodeSource仓库安装指定版本的Node.js(以16.x为例,可根据需求替换为14.x、18.x等):
# 导入NodeSource库的GPG密钥并添加仓库
curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash -
# 安装Node.js(包含npm)
sudo apt install -y nodejs
# 验证安装
node -v # 查看Node.js版本
npm -v # 查看npm版本
scp或SFTP上传至服务器:# 本地操作(示例)
mkdir my-nodejs-app && cd my-nodejs-app
npm init -y
npm install express body-parser # 安装依赖
# 创建app.js(示例代码)
echo "const express = require('express'); const app = express(); const port = 3000; app.get('/', (req, res) => res.send('Hello World')); app.listen(port, () => console.log(\`App running on port \${port}\`));" > app.js
# 上传至服务器(替换为你的服务器IP和用户名)
scp -r my-nodejs-app username@your_server_ip:/home/username/
cd /home/username/my-nodejs-app
在项目目录下运行以下命令,安装package.json中定义的依赖:
npm install
PM2是Node.js进程管理工具,可实现后台运行、自动重启、日志管理等功能:
# 全局安装PM2
sudo npm install pm2 -g
# 启动应用(--name指定应用名称)
pm2 start app.js --name "my-node-app"
# 设置开机自启动(避免服务器重启后应用停止)
pm2 startup
# 保存当前进程列表(确保重启后恢复)
pm2 save
# 常用命令:查看状态(pm2 status)、查看日志(pm2 logs)、重启应用(pm2 restart my-node-app)
Nginx可作为反向代理,处理HTTP请求转发、SSL卸载及静态文件服务,提升应用性能与安全性:
# 安装Nginx
sudo apt install nginx -y
# 配置反向代理(编辑默认站点配置)
sudo nano /etc/nginx/sites-available/default
在配置文件中修改server块(替换your_domain_or_ip为你的域名或公网IP):
server {
listen 80;
server_name your_domain_or_ip;
location / {
proxy_pass http://localhost:3000; # 转发至Node.js应用的端口
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;
}
}
保存后测试Nginx配置并重启:
sudo nginx -t # 测试配置语法
sudo systemctl reload nginx # 重启Nginx
若服务器启用了ufw防火墙,需开放HTTP(80)和HTTPS(443)端口:
sudo ufw allow 'Nginx Full' # 允许Nginx的全部流量(包括80/443端口)
sudo ufw enable # 启用防火墙(若未启用)
使用Let’s Encrypt为站点配置免费SSL证书,实现HTTPS加密:
# 安装Certbot及Nginx插件
sudo apt install certbot python3-certbot-nginx -y
# 获取证书并自动配置Nginx
sudo certbot --nginx -d your_domain.com # 替换为你的域名
# 按提示完成验证(通常需修改DNS记录或输入邮箱)
证书会自动续期,无需手动操作。
通过以上步骤,你的Node.js项目已在Debian系统上完成部署,可通过http://your_domain_or_ip(或HTTPS)访问。