node.js - 通过 Gitolite 和 post-receive hook 部署 Node 应用程序

标签 node.js unix deployment permissions gitolite

我正在尝试使用 Gitolite 为 Node 应用程序获得一个相当简单的部署过程。我已经在我的服务器上设置并运行了 Gitolite,并且我能够很好地插入它。

Gitolite 在名为 git 的用户下运行,我已经设置了一个 node 用户,希望用它来运行 Node 应用程序。

我的计划是将 Node 应用程序推送到 Gitolite,然后使用接收后 Hook 脚本将应用程序文件移动到应用程序所在的目录,在本例中为 /var/local/node-apps/my-node-app/。我像这样创建了 Node 应用程序文件夹:

sudo mkdir -p /var/local/node-apps/my-node-app
sudo chown node /var/local/node-apps/my-node-app

问题是我是一个 Unix 菜鸟,我对文件/文件夹权限一无所知。

/var/local/node-apps (以及 /var/local/node-apps/my-node-app)由 node 用户拥有,因此当 git 用户尝试 checkout 到此位置时,我会收到一堆权限被拒绝的错误。我在接收后使用的命令是:

GIT_WORK_TREE=/var/local/node-apps/my-node-app git checkout -f

我收到这样的错误:

remote: error: git checkout-index: unable to create file XXXX (Permission denied)
remote: fatal: cannot create directory at 'XXXX': Permission denied

解决这个问题的最佳方法是什么?我是否需要将 git 用户无密码 sudo 权限授予 su 作为 node 用户?或者可以通过更改组和文件夹权限以某种方式解决此问题?或者完全不同的方法?我迷路了!

谢谢!

最佳答案

使用 sudo 肯定可行,您在“post-receive hook permission denied “unable to create file” error ”中有一个示例,将 git 命令包装在脚本中。

Changed post-receive to:

sudo sh /usr/local/sbin/prgetsimpleappscom

Changed sudoers with visudo

git ALL = (root) NOPASSWD: /bin/sh /usr/local/sbin/prgetsimpleappscom

另一种方法是 cron 作业,作为 node 用户定期获取并拉入目标存储库(如果有新提交)。

关于node.js - 通过 Gitolite 和 post-receive hook 部署 Node 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12481197/

相关文章:

android - Android Gradle Build Variant Deploy

node.js - Jasmine Node 找不到规范模块

javascript - 如何在 puppeteer 中获取没有异步/等待的窗口的全局变量

unix - 为什么在 fcntl.h 中声明了 open,而在 unistd.h 中声明了 close?

linux - UNIX 和 LINUX 'commands' 之间有什么区别?命令上下文的差异

linux - 生成下百个 ip 地址的 Shell 脚本

javascript - NodeJS Redis session 不会通过浏览器重定向持续存在

node.js - 持续时间列类型作为自定义类型返回

java - 在 spring 中有条件地创建 bean

ruby-on-rails - 乘客认为我使用了错误的 ruby 版本?