在Linux上部署Node.js应用程序可以通过多种方式进行,以下是一些常见的部署实战技巧:
使用包管理器安装:
对于基于Debian的系统(如Ubuntu),可以使用以下命令:
sudo apt update
sudo apt install nodejs npm -y
对于基于Red Hat的系统(如CentOS),可以使用以下命令:
sudo yum install nodejs npm -y
或者,如果你希望安装特定版本的Node.js,可以使用NodeSource库:
curl -fsSL https://deb.nodesource.com/setup_14.x | sudo -E bash -
sudo apt-get install -y nodejs
使用NodeSource官方脚本:
这个方法最简单,适用于Ubuntu、Debian、CentOS等。
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt install -y nodejs
使用NVM(Node Version Manager):
NVM是一个Node.js的版本管理工具,可以方便地在不同版本的Node.js之间切换。
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
source ~/.bashrc
nvm install node
创建项目目录:
mkdir myNodeApp
cd myNodeApp
初始化项目:
npm init -y
上传项目到服务器:
可以使用Git或者FTP/SCP将项目文件上传到服务器。
使用PM2管理Node.js服务:
PM2是一个非常流行的进程管理工具,适合生产环境。
sudo npm install -g pm2
pm2 start app.js
pm2 status
pm2 startup
pm2 save
系统配置优化:
增加文件描述符限制:
ulimit -n 65535
调整内核参数:
echo "net.core.somaxconn = 65535" >> /etc/sysctl.conf
echo "net.ipv4.tcp_max_syn_backlog = 65535" >> /etc/sysctl.conf
echo "net.ipv4.ip_local_port_range = 1024 65535" >> /etc/sysctl.conf
sysctl -p
Node.js应用程序代码优化:
使用异步操作,减少内存使用,优化循环和递归,使用缓存。
使用性能分析工具:
Node.js内置的性能分析工具:
node --inspect-brk app.js
第三方性能分析工具:
使用集群模式:
利用多核CPU:
const cluster = require('cluster');
const http = require('http');
const numCPUs = require('os').cpus().length;
if (cluster.isMaster) {
console.log(`Master ${process.pid} is running`);
// Fork workers.
for (let i = 0; i < numCPUs; i++) {
cluster.fork();
}
cluster.on('exit', (worker, code, signal) => {
console.log(`worker ${worker.process.pid} died`);
});
} else {
// Workers can share any TCP connection
// In this case it is an HTTP server
http.createServer((req, res) => {
res.writeHead(200);
res.end('hello world
');
}).listen(8000);
console.log(Worker ${process.pid} started);
}
### 故障排查
- **查看错误日志**:
Node.js应用的错误通常记录在日志文件中,常见的位置是 `/var/log/node-app.log` 或者应用的自定义日志路径。
```bash
tail -f /var/log/node-app.log
使用调试工具:
Node.js内置调试工具:
node inspect app.js
第三方调试工具:如ndb或node-inspector。
代码审查:
检查未捕获的异常,确保所有可能的异常都被捕获和处理。
process.on('uncaughtException', (err) => {
console.error(err.message);
process.exit(1);
});
通过以上步骤和技巧,你可以在Linux上成功部署Node.js应用程序,并确保其高效稳定运行。