在 Debian 上部署与管理 JS 应用的实用指南
一 环境准备
- 更新系统并安装基础工具:
- sudo apt update && sudo apt upgrade -y
- 安装 Node.js 与 npm(两种常用方式,二选一或并存):
- 使用 APT 官方仓库:sudo apt install -y nodejs npm
- 使用 NodeSource 仓库(可指定版本,例如 20.x):
- curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
- sudo apt install -y nodejs
- 验证安装:node -v 与 npm -v 显示版本号
- 如需多版本并存与切换,使用 NVM(可选):
- curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
- source ~/.bashrc
- nvm install 20
- nvm use 20
- 建议以非 root用户部署应用,后续用 systemd 或 PM2 以指定用户运行。
二 部署与运行
- 准备代码与依赖:
- 将代码放置到如 /opt/myapp,进入目录:cd /opt/myapp
- 安装依赖:npm ci --only=production(或 npm install)
- 直接运行(仅用于验证):node app.js(生产环境不建议直接前台运行)
- 使用 PM2 守护进程(推荐):
- 全局安装:sudo npm install -g pm2
- 启动应用:pm2 start app.js --name myapp
- 使用配置文件(支持多环境、集群等):
- 新建 ecosystem.config.js:
- module.exports = { apps: [{ name: ‘myapp’, script: ‘app.js’, instances: ‘max’, exec_mode: ‘cluster’, env: { NODE_ENV: ‘production’ } }] }
- 启动:pm2 start ecosystem.config.js --env production
- 常用命令:pm2 list、pm2 logs、pm2 restart myapp、pm2 monit
- 设置开机自启与持久化:
- PM2 托管:pm2 startup(按提示执行) && pm2 save
- 或采用 systemd 服务(适合系统级托管,示例):
- 新建 /etc/systemd/system/myapp.service:
- [Unit] Description=My Node.js App; After=network.target
- [Service] Type=simple; User=www-data; WorkingDirectory=/opt/myapp; ExecStart=/usr/bin/node /opt/myapp/app.js; Restart=on-failure; Environment=NODE_ENV=production
- [Install] WantedBy=multi-user.target
- 启用:sudo systemctl daemon-reload && sudo systemctl enable --now myapp
- 查看:sudo systemctl status myapp
三 反向代理与网络
- 安装 Nginx:sudo apt install -y nginx
- 配置反向代理(/etc/nginx/sites-available/default 或 /etc/nginx/conf.d/myapp.conf):
- server {
listen 80;
server_name your_domain_or_ip;
location / {
proxy_pass http://127.0.0.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;
}
}
- 校验与生效:sudo nginx -t && sudo systemctl reload nginx
- 防火墙放行(如使用 UFW):sudo ufw allow ‘Nginx Full’
- 可选:启用 HTTPS/TLS(Certbot 等)以加密传输
四 日志监控与运维
- PM2 内置日志与监控:
- 实时日志:pm2 logs
- 监控面板:pm2 monit
- 日志轮转与保留(示例):
- pm2 set pm2:log-date-format “YYYY-MM-DD HH:mm Z”
- pm2 set pm2:max-size 10M
- pm2 set pm2:retain 7d
- 集中式日志(可选,适合多实例/多服务):
- 部署 ELK Stack(Elasticsearch、Logstash、Kibana),Logstash 采集 Node.js 日志(如文件或 stdout),在 Kibana 中可视化分析
- 常规维护:
- 版本发布:拉取新代码 → npm ci --only=production → pm2 restart myapp(或 systemctl restart myapp)
- 回滚:切换代码版本 → 重启应用
- 备份:定期备份代码、配置与环境变量(不要把 .env 提交到代码库)