Skip to content

Instantly share code, notes, and snippets.

@tlrobinson
Last active December 7, 2022 08:15
Show Gist options
  • Star 58 You must be signed in to star a gist
  • Fork 12 You must be signed in to fork a gist
  • Save tlrobinson/8035884 to your computer and use it in GitHub Desktop.
Save tlrobinson/8035884 to your computer and use it in GitHub Desktop.
Super simple git post-receive hook for Node.js + nvm + npm + node-foreman + init (Ubuntu) deployment
#!/usr/bin/env bash
set -u
set -e
export GIT_WORK_TREE="/var/www/example.com"
export NODE_VERSION="0.10"
echo "--> Checking out..."
git checkout -f
echo "--> Selecting Node version $NODE_VERSION"
. $HOME/.nvm/nvm.sh
nvm use $NODE_VERSION
echo "--> Installing libraries..."
cd "$GIT_WORK_TREE"
npm install
echo "--> Exporting Foreman files..."
node_modules/.bin/nf export -o /etc/init
echo "--> Restarting..."
stop foreman
start foreman
@tlrobinson
Copy link
Author

On the remote server

mkdir -p /var/www/example.com
mkdir example.git && cd example.git
git init --bare
cat > hooks/post-receive
chmod +x hooks/post-receive

Copy the hook in. Put to the repo

Based on http://toroid.org/ams/git-website-howto

@yyx990803
Copy link

Checkout https://github.com/yyx990803/pod which handles these for you, plus using pm2 for process monitoring.

@narqo
Copy link

narqo commented Jan 4, 2014

Why use bare-repo with separate working tree instead of direct clone into www directory?

@jmcbee
Copy link

jmcbee commented Nov 24, 2014

@narqo ermeged, why not try using a bare and a non-bare repo and tell us why we use a bare repo.

@jasonnathan
Copy link

@fbm-static rofl!

@ralyodio
Copy link

I get nvm: command not found in my post-receive hook

it works fine from ssh login

@Ridder90
Copy link

Thanks for this! Unfortunatly i get nvm and npm not found.

@williamjingo
Copy link

Just incase anyone is still getting the npm not found.
after the exit immediately if a command exits with a non-zero status. set -e
add

export NVM_DIR="$HOME/.nvm"
. "$NVM_DIR/nvm.sh"

then you can go a head and set your variables.
export..
I hope this helps

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment