1. Node.js 安装与管理:选择可靠方式并灵活切换版本
在Debian上安装Node.js时,优先通过NodeSource存储库获取最新稳定版本(支持自定义版本选择),或使用**NVM(Node Version Manager)**管理多版本(适合需要切换版本的开发场景)。例如,使用NodeSource安装Node.js 16.x的步骤为:
curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash - sudo apt-get install -y nodejs 若使用NVM,需先安装NVM(curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash),再通过nvm install 16.14.0安装指定版本,并用nvm use切换。这种方式能避免系统包管理器的版本滞后问题,确保应用运行在所需版本上。
2. 安全配置:降低应用运行风险
sudo -u <普通用户>切换至非root用户),减少潜在的安全威胁。npm audit或snyk扫描项目依赖,及时修复已知漏洞;通过npm update更新到最新稳定版本。helmet中间件,自动设置Content-Security-Policy、X-Content-Type-Options等安全头,防止XSS、点击劫持等攻击。express-rate-limit等中间件,限制单个IP的请求频率(如每分钟60次),防御DDoS攻击。https模块或反向代理(如Nginx)强制加密数据传输。3. 进程管理:保障应用稳定运行
使用PM2作为进程管理器,实现应用守护、负载均衡和日志管理。例如,启动应用并设置集群模式(充分利用多核CPU):
pm2 start app.js --name "my-app" --instances max --instances max会根据CPU核心数自动创建多个进程。PM2还支持查看日志(pm2 logs)、重启应用(pm2 restart)和监控资源(pm2 monit),确保应用在后台稳定运行。
4. 性能优化:提升应用响应速度
async/await或Promise处理I/O操作(如数据库查询、文件读写),避免阻塞事件循环。例如,用fs.promises.readFile()替代fs.readFileSync()。cluster模块或PM2集群模式,让应用在多个CPU核心上运行,提高并发处理能力。示例代码:const cluster = require('cluster'); const os = require('os'); if (cluster.isMaster) { for (let i = 0; i < os.cpus().length; i++) cluster.fork(); } else { require('./app.js'); // 启动应用 } SELECT *)、使用连接池(如pg-pool for PostgreSQL),减少数据库访问开销。stream模块(如fs.createReadStream()读取文件、res.write()分段发送响应),降低内存占用。5. 监控与日志:实现可观测性
info、error),并通过winston-daily-rotate-file插件实现日志轮替(按天分割),避免日志文件过大。对于分布式系统,可使用ELK Stack(Elasticsearch+Logstash+Kibana)集中管理日志,便于问题排查。6. 系统配置:优化底层环境
sudo apt update && sudo apt upgrade -y,确保Debian系统和内核为最新版本,修复安全漏洞。ulimit -n 65535;永久设置:编辑/etc/security/limits.conf,添加:* soft nofile 65535 * hard nofile 65535 /etc/sysctl.conf,调整网络参数(如net.core.somaxconn = 65535、net.ipv4.tcp_max_syn_backlog = 65535),提高网络吞吐量;运行sudo sysctl -p使设置生效。7. 部署优化:减轻服务器负担
server { listen 80; server_name example.com; location /static/ { alias /var/www/static/; } location / { proxy_pass http://localhost:3000; # 转发至Node.js应用 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } 这种方式能减少Node.js服务器的负载,提高静态文件访问速度。