生产服务器上的NodeJS - 权限

5
我希望无论是哪个用户,都可以使用nodenpm。在我们的团队中,当有人从git更新代码时,会运行sudo -u www-data git pull,因此无论是什么项目,我们总是通过www-data用户来进行操作。现在我们有了一个新的Node项目,需要做同样的事情。在我们的生产服务器上,绝不会依赖于一个人处理有关node的所有事情-如果他明天离开了怎么办?所以我们没有使用NVM,而是像这里描述的那样将Node安装为root。一切正常,所有用户都可以看到nodenpm可执行文件。当我们尝试使用它们时问题就出现了。您想要做的是:
cd /var/www/node_project
sudo -u www-data git pull
sudo -u www-data npm install

这个命令最后失败了,因为 `npm` 尝试在我的主目录写入锁定文件。所以:/home/user/.npm 而不是全局某处或 /var/www/.npm ,这是 www-data 用户的主目录。
类似地,在安装

sudo npm install -g typings

然后运行 sudo -u www-data typings install 后,你会得到一个错误,因为它尝试写入 /home/user/.config/configstore/insight-typings.json

请问有人能详细说明如何正确地在服务器上安装节点吗?如果我运行 sudo -u www-data, 为什么 `npm` 仍然进入我的主文件夹?
1个回答

2

您可以为一些用户指定全局安装的目录:

~/.npmrc文件中设置prefix = ~/.where_to_install

然后将可执行文件的正确位置(如~/.npm/bin)添加到PATH变量中

顺便问一下,对于您的情况,www-data的主目录是什么?


但我不希望全局包被安装在每个用户的基础上。我希望它们被安装给所有正在工作的人,这目前是有效的,唯一的问题是全局包仍然试图将某些内容写入用户本地目录和错误的用户。如果我以用户user1身份运行命令sudo -u www-data tsc,tsc应该将其所需的任何内容写入www-data主目录而不是user1主目录。www-data主目录是/var/www - Tomas
嗯,user用户的id和www-data一样吗? - loadaverage
实际上,在类UNIX系统中是可以的。很奇怪,为什么“sudo oneuser”想要从“anotheruser”执行某些操作... - loadaverage
我检查了一下,只是为了确认。www-data的ID是33,user1的ID是1003。 - Tomas
我无法重现这个问题。但我认为您可能有一些特定的sudoers设置或用户ID问题。 - loadaverage
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接