Deploying Node Apps via Gitolite and post-receive

2019-08-10 19:36发布

问题:

I'm trying to get a fairly simple deploy process going for a Node app using Gitolite. I have Gitolite setup and working on my server, and I'm able to push to it fine.

Gitolite is running under a user called git, and I've setup a node user that I'm hoping to use to run the Node app.

My plan is to push the Node app to Gitolite, and then use a post-receive hook script to move the app files to the directory where the app lives, in this case /var/local/node-apps/my-node-app/. I created the Node app folder like this:

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

The problem is that I'm a Unix noob and I haven't got my head round file/folder permissions and wotnot.

/var/local/node-apps (and also /var/local/node-apps/my-node-app) is owned by the node user, so when the git user tries to checkout to this location I get a bunch of permission denied errors. The command I'm using in the post-receive is:

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

And I get errors like this:

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

What's the best way to resolve this? Do I need to grant the git user password-less sudo rights to su as the node user? Or can this be somehow fixed by changing groups and folder permissions? Or a different approach entirely? I'm lost!

Thanks!

回答1:

Using sudo would certainly work, you have one example at "post-receive hook permission denied “unable to create file” error", wrapping the git commands in a script.

Changed post-receive to:

sudo sh /usr/local/sbin/prgetsimpleappscom

Changed sudoers with visudo

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

The other approach would be a cron job as node user regularly fetching and (if there are new commit) pulling in the destination repo.