在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應用程序,并確保其高效穩定運行。