在Linux系統下管理Node.js應用程序的日志權限是確保系統安全性和穩定性的重要環節。以下是一些關鍵點和最佳實踐:
/var/log/[appname]/
目錄下。創建專用用戶和組
sudo groupadd nodeapp
sudo useradd -g nodeapp nodeapp -s /bin/false
創建日志目錄并設置權限
sudo mkdir -p /var/log/my-node-app
sudo chown nodeapp:nodeapp /var/log/my-node-app
sudo chmod 750 /var/log/my-node-app
日志文件權限設置 在Node.js應用中,確保日志文件創建時使用正確的權限:
const fs = require('fs');
const logStream = fs.createWriteStream('/var/log/my-node-app/app.log', {
flags: 'a', // 追加模式
mode: 0o640 // 設置權限為 -rw-r-----
});
使用logrotate管理日志
創建 /etc/logrotate.d/my-node-app
文件:
/var/log/my-node-app/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 640 nodeapp nodeapp
sharedscripts
postrotate
[ ! -f /var/run/my-node-app.pid ] || kill -USR1 `cat /var/run/my-node-app.pid`
endscript
}
使用PM2時的權限設置 如果使用PM2管理Node.js應用:
pm2 start app.js --uid nodeapp --gid nodeapp
并確保PM2日志目錄權限正確:
sudo chown -R nodeapp:nodeapp /home/nodeapp/.pm2
“EACCES: permission denied” 錯誤 解決方法:
sudo setfacl -R -m u:nodeapp:rwx /var/log/my-node-app
日志文件不輪轉 檢查:
SELinux相關問題 如果啟用了SELinux,可能需要調整上下文:
sudo semanage fcontext -a -t httpd_log_t "/var/log/my-node-app(/.*)?"
sudo restorecon -Rv /var/log/my-node-app
通過以上設置,可以確保 Node.js 應用日志既安全又可維護。