Yon*_*ner 2 logging amazon-ec2 node.js
我在 AWS 上有一个 EC2 实例,使用 NodeJS 运行 HTTPS 服务器。我正在从 启动我的 NodeJS 服务器/etc/rc.local,所以它会在每次启动时自动启动。
我有两个问题:
有没有更好的方法来启动 https 服务器侦听端口 443 而不使用sudo path/to/node myScript.js?如果我以 root 身份运行这个进程,我会有什么风险?
我在哪里可以看到我的日志?当从 shell 运行脚本时,我看到了进程的日志,但是现在当它从 运行时rc.local,我如何访问服务器的输出?
谢谢!
使用 sudo 启动应用程序绝对不是一个好习惯。您不应使用 root 凭据运行可公开访问的服务。如果您的应用程序存在缺陷并且有人发现了这一点,那么访问机器中的更多服务就有危险。
您的应用程序应该在非特权端口(例如 5000)中启动,然后使用 nginx 或 apache 作为反向代理,将内部的流量转发到在端口 5000 上运行的应用程序。pm2 也建议类似的内容:http ://pm2.keymetrics.io/docs/tutorials/pm2-nginx-production-setup. 在线搜索您将能够找到有关如何配置 nginx 以在 https 上运行以及如何将所有流量从 http 转发到 https 的教程。您的应用程序不应该知道 ssl 证书等。请记住,pm2 模块应该安装在您的项目本地,并且您必须利用 package.json。在那里,您可以定义一个任务,该任务将使用本地 pm2 模块在生产环境中启动您的应用程序。优点是不用全局安装pm2模块,不会再用权限和超级用户搞乱。
我不认为日志会保存在某个地方,直到您告诉它在 rc.local 脚本中发生。你如何在那里产生进程?类似的东西应该将标准输出重定向到一个文件:
node path/to/node myScript.js 2> /var/log/my-app.rc.local.log # send stderr from rc.local to a log file`
Run Code Online (Sandbox Code Playgroud)
但是,您不在应用程序中使用记录器吗?我建议选择一个(有很多可用的,如 bunyan、winston 等)并console.logs用记录器替换所有的。然后,您可以在应用程序中明确定义日志的保存位置,通常可以拥有不同的日志级别和更多功能。
不是一个直接的答案,更多的是这里的经验小回报。
我们在 AWS 上的生产环境中有一个大量使用的 Nodejs 应用程序,采用非 Docker 设置(目前;))。
我们有一个专门运行节点应用程序的用户,我想如果您使用 root 启动节点进程,它就具有 root 访问权限,这不是一个安全的事情。
为了运行该应用程序,我们使用pm2作为进程管理器,它允许在失败时重新启动节点进程(并且它会),并调整工作线程数量以匹配 EC2 实例的核心数量。您还可以使用 访问所有工作人员的日志./path/to/node ./node_modules/.bin/pm2 logs,并可以将其发送到您想要的任何地方(从 ELK 到 slack)。
我的2分。
| 归档时间: |
|
| 查看次数: |
4630 次 |
| 最近记录: |