use*_*046 5 imagemagick amazon-ec2 amazon-web-services node.js amazon-elastic-beanstalk
我正在尝试配置我们的Node.js应用程序以与Amazon Elastic Beanstalk一起部署.
实际上我在.ebextensions中做了一些配置文件来启用Websockets,为几个模块做yum安装并安装我们需要的一些自定义软件.
到目前为止,App部署正常运行,所有配置的软件都由Beanstalk安装.
我遇到的问题是nodejs用户运行节点应用程序,没有权限执行我们的beanstalk自定义配置安装的命令行工具.
更具体一点:
该应用程序支持用户文件上传,上传的文件保存到实例上的某个临时文件夹(其工作方式应该如此).
然后应用程序执行命令行执行将上传的文件转换为自定义文件格式,执行类似/ home/ec2-user/converter/bin转换文件名输出文件名的内容.
此时我收到此错误:{[错误:生成EACCES]代码:'EACCES',错误号:'EACCES',系统调用:'spawn'}
总体而言,该应用程序需要多个命令行工具才能使此类转换任务正确运行 实际上他们都有同样的问题.即使是由yum安装的工具,例如Imagemagick,也不会被应用程序执行.
手动,通过使用ec2-user帐户,我能够执行所有这些,所有文件都在适当的系统路径上,并且它们工作正常.所以所有安装似乎都正常.
我已经尝试手动授予用户nodejs的权限,并确实chmod了文件,但这似乎没有任何效果.
最大的问题是..如何向nodejs用户授予所需权限,或者如何使用已定义的用户执行node.js?
我相信nodejs用户没有使用 shell 的权限:
[ec2-user@host ~]$ cat /etc/passwd
....
nodejs:x:497:497::/tmp:/sbin/nologin
Run Code Online (Sandbox Code Playgroud)
我也尝试过:
[ec2-user@host ~]$ pwd
/home/ec2-user
[ec2-user@host ~]$ cat test.js
#!/opt/elasticbeanstalk/node-install/node-v0.10.31-linux-x64/bin/node
require('child_process').exec('/usr/bin/whoami', function (err, data) {
console.log(data);
});
[ec2-user@host ~]$ ls -l
total 4
-rwxrwxrwx 1 ec2-user ec2-user 169 Nov 3 21:49 test.js
[ec2-user@host ~]$ sudo -u nodejs /home/ec2-user/test.js
sudo: unable to execute /home/ec2-user/test.js: Permission denied
Run Code Online (Sandbox Code Playgroud)
我会说这是有效的,我对此感到困惑(也许有人可以插话澄清):
$ sudo -u nodejs /usr/bin/whoami
nodejs
Run Code Online (Sandbox Code Playgroud)
然而,作为一个外部观察者,Beanstalk 似乎不太适合您。一般来说,Beanstalk 是一种不干涉的完全托管抽象,其设计和乱搞文件系统权限和用户权限就超出了这些界限。
顺便说一句,也许您想考虑转向 OpsWorks。来自http://aws.amazon.com/opsworks/faqs/:
问:AWS OpsWorks 与 AWS Elastic Beanstalk 有何不同?
AWS OpsWorks 和 AWS Elastic Beanstalk 都专注于运营,但方向截然不同。AWS Elastic Beanstalk 力求自动提供关键操作活动,以便开发人员能够最大限度地提高开发时间并最大限度地减少操作时间。相比之下,AWS OpsWorks 为需要高度生产力和运营控制的 IT 管理员和具有运维思维的开发人员提供集成体验。
| 归档时间: |
|
| 查看次数: |
2164 次 |
| 最近记录: |