【问题标题】:NodeJS on production server - permissions生产服务器上的 NodeJS - 权限
【发布时间】:2016-02-26 12:59:06
【问题描述】:

我想让node 和npm 可用于系统上的任何用户。

在我们的团队中,当有人从 git 更新代码时,他们会运行:sudo -u www-data git pull

所以无论是什么项目,我们总是通过www-data用户。

现在我们有了新的 Node 项目,需要做同样的事情。在我们的生产服务器上,我们不可能依赖一个用户来处理有关节点的所有事情 - 如果他明天离开怎么办?

所以我们没有使用 NVM,而是将 Node 作为 root 安装为 described here

一切正常,所有用户都可以看到node 和npm 可执行文件。当我们真正尝试使用它们时,问题就开始了。

你想做的是:

cd /var/www/node_project
sudo -u www-data git pull
sudo -u www-data npm install

最后一个命令失败,因为npm 正在尝试在我的主目录中写入lock 文件。所以:/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 ins 仍然会进入我的主文件夹?

【问题讨论】:

    标签: linux node.js git ubuntu


    【解决方案1】:

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

    在~/.npmrc中设置prefix = ~/.where_to_install

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

    顺便说一句,在您的情况下,www-data 的主目录是什么?

    【讨论】:

    • 但我不希望为每个用户安装全局包。我希望为所有人安装它们,目前正在运行,唯一的问题是全局包仍在尝试将某些内容写入用户本地目录和错误的用户。如果我以用户 user1 sudo -u www-data tsc 身份运行命令,则 tsc 应将所需的任何内容写入 www-data 主目录而不是 user1 主目录。 www-data 主目录为/var/www
    • hmm,user 用户的 id 与 www-data 相同?
    • 两个用户如何拥有相同的id?他们是两个不同的操作系统用户
    • 实际上,在类 UNIX 中它们可以。很奇怪,为什么sudo oneuser要对anotheruser做点什么...
    • 我检查了一下,只是为了确定。 www-data 的 ID 为 33 user1 的 ID 为 1003
    猜你喜欢
    • 1970-01-01
    • 2011-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-04
    • 2017-10-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多