1. 更新系统包
首先确保Debian系统包是最新的,避免因旧版本依赖导致安装问题:
sudo apt update && sudo apt upgrade -y
2. 安装Node.js与npm
生产环境建议使用NodeSource仓库安装特定版本的Node.js(如18.x,需根据项目需求选择),以获取长期支持(LTS)版本和更好的性能:
# 添加NodeSource仓库(以18.x为例)
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
# 安装Node.js和npm
sudo apt install -y nodejs
# 验证安装
node -v # 应输出v18.x.x
npm -v # 应输出对应版本
3. 部署应用代码
将本地JS应用代码上传至服务器(如通过scp、rsync或Git克隆):
# 示例:通过scp上传本地项目到服务器~/my-js-app目录
scp -r ./local-js-app/* user@your_server_ip:~/my-js-app
cd ~/my-js-app
4. 安装项目依赖
进入项目目录,通过npm install安装package.json中定义的所有生产依赖(排除devDependencies):
npm install --production
5. 使用PM2管理进程
PM2是Node.js进程管理工具,可实现后台运行、自动重启、日志管理等功能,是生产环境的必备工具:
# 全局安装PM2
sudo npm install -g pm2
# 启动应用(假设入口文件为app.js)
pm2 start app.js --name "my-js-app"
# 保存当前进程列表,确保服务器重启后自动恢复
pm2 save
# 设置PM2开机自启动
pm2 startup
6. 配置Nginx反向代理
Nginx可作为反向代理,提供HTTPS支持、负载均衡、静态文件缓存等功能,提升应用性能和安全性:
# 安装Nginx
sudo apt install -y nginx
# 配置反向代理(编辑默认站点配置)
sudo nano /etc/nginx/sites-available/default
在配置文件中替换为以下内容(根据项目调整server_name和proxy_pass):
server {
listen 80;
server_name your_domain_or_ip; # 替换为域名或公网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 restart nginx
7. 配置防火墙
允许HTTP(80)和HTTPS(443)流量通过防火墙(若使用ufw):
sudo ufw allow 'Nginx Full'
sudo ufw enable # 启用防火墙(若未启用)
8. 可选:配置HTTPS(推荐)
使用Let’s Encrypt免费获取SSL证书,加密数据传输:
# 安装Certbot和Nginx插件
sudo apt install -y certbot python3-certbot-nginx
# 获取证书并自动配置Nginx
sudo certbot --nginx -d your_domain.com -d www.your_domain.com # 替换为域名
# 按提示完成验证,证书会自动安装到/etc/letsencrypt/live/your_domain.com/
证书有效期为90天,可通过以下命令自动续期:
sudo certbot renew --dry-run # 测试续期
sudo certbot renew # 实际续期
9. 可选:Docker容器化部署(高级)
若项目需要环境一致性,可使用Docker容器化部署:
# 创建Dockerfile(在项目根目录)
cat > Dockerfile <<EOF
FROM node:18-alpine
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install --production
COPY . .
EXPOSE 3000
CMD ["node", "app.js"]
EOF
# 构建镜像
docker build -t my-js-app .
# 运行容器(映射端口、设置重启策略)
docker run -d --name my-js-app -p 3000:3000 --restart always my-js-app
注意事项
apt默认仓库的旧版本。--name参数需唯一,便于管理多个应用。proxy_pass需指向Node.js应用的实际监听端口(如3000、8080等)。