我在AWS上有一个EC2实例,使用NodeJS运行HTTPS服务器。
我正在从/etc/rc.local
启动我的NodeJS服务器,因此它会在每次启动时自动启动。
我有两个问题:
是否有更好的方法可以在不使用sudo path/to/node myScript.js
的情况下启动在端口443上侦听的https服务器?如果我以root身份运行此流程,我会有什么风险?
我在哪里可以看到我的日志?从shell运行脚本时,我看到进程的日志,但现在从rc.local
运行时,如何访问服务器的输出?
谢谢!
答案 0 :(得分:4)
绝对使用sudo启动应用程序不是一个好习惯。您不应该使用root凭据运行公共可访问的服务。如果您的应用程序存在缺陷,并且有人发现此问题,则可能会在计算机中访问更多服务。
您的应用程序应该在非特权端口(例如5000)中启动,然后将nginx或apache作为反向代理,将内部流量转发到在端口5000上运行的应用程序.pm2建议类似于好吧:http://pm2.keymetrics.io/docs/tutorials/pm2-nginx-production-setup。在线搜索,您将能够找到有关如何在https上运行配置nginx以及如何将所有流量从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`
你不是在你的应用程序中使用记录器吗?我建议选择一个(有很多可用的像bunyan,winston等)并用记录器替换你的所有console.logs
。然后,您可以在应用程序中明确定义将保存日志的位置,您可以拥有不同的日志级别和更多功能。
答案 1 :(得分:2)
不是直接的答案,更多的是经验丰富的回报。
我们在AWS上的生产中使用了大量使用过的nodejs应用程序,而非docker设置(现在;))。
我们有一个专门用来运行节点应用程序的用户,我想如果你用root用户启动你的节点进程,它就具有超级用户访问权限,这不是一件安全的事情。
要运行应用程序,我们使用pm2作为进程管理器,它允许在失败时重启节点进程(并且它会),并缩放工作者数量以匹配您的核心数量EC2实例。您还可以使用./path/to/node ./node_modules/.bin/pm2 logs
访问所有工作人员的日志,并可以将其发送到您想要的任何内容(从ELK到hipchat)。
My2cents。