node-deploy v0.2.0
node-deploy
node-deploy is a tool for deploying a node web app to an upstart+nginx machine automatically.
Installation
npm
npm install -g node-deployGitHub
npm install -g https://github.com/martinrue/node-deploy/tarball/masterPrerequisites
The remote machine must have git, nginx, node and npm installed before deployments can be made to it. The machine should also be configured for remote access via ssh.
Usage
usage: nd [init | deploy | remove] -b <branch> -d <directory>- Run
nd initto generate the deploy config files. You need to commit and push these files before deploying. - Run
nd deployto begin a deployment. - Run
nd removeto stop and remove the app from the server.
Options
-b <branch>
node-deploy will deploy from the master branch. Use -b <branch> to deploy a different branch. The new branch will be deployed over the same application – it's just a means of deploying from an alternative branch.
####-d <directory>
Config files are stored in the deploy directory unless you specify a custom directory via -d <directory>. Example: nd deploy -d deployconfigs
##Example
First run nd init and answer the questions. It will try to guess some settings for you – if you're happy with the guess, just hit enter to accept it:
node v0.10.8 in ~/Desktop/app on master
→ nd init
app url: martinrue.com
app name (app): martinrue.com
app start command (node blog.js):
upstream port (4001):
app path on server (/var/www):
nginx sites-enabled path (/etc/nginx/sites-enabled):
git clone URL (git@github.com:martinrue/delme.git):
server SSH address: root@192.168.2.4Second, commit and push the newly created config files:
node v0.10.8 in ~/Desktop/app on master
→ git add -A
node v0.10.8 in ~/Desktop/app on master
→ git commit -m "add deploy config"
[master 9a0def5] add deploy config
3 files changed, 30 insertions(+)
create mode 100644 deploy/deploy.json
create mode 100644 deploy/martinrue.com
create mode 100644 deploy/martinrue.com.conf
node v0.10.8 in ~/Desktop/app on master with unpushed
→ git push
Counting objects: 7, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (6/6), done.
Writing objects: 100% (6/6), 912 bytes | 0 bytes/s, done.
Total 6 (delta 1), reused 0 (delta 0)
To git@github.com:martinrue/martinrue.git
b973149..9a0def5 master -> masterAnd finally, deploy:
node v0.10.8 in ~/Desktop/app on master
→ nd deploy
deploying master to root@192.168.2.4:/var/www/martinrue.comQuestions
After running nd init, you'll be asked a series of questions. Here's what each answer is used for:
####app url
This is the public URL your app will be served from.
Example: martinrue.com
####app name
Specifies the name of the app directory and the nginx/upstart config files.
Example: martinrue.com
####app start command
The command used to start the application on the server.
Example: node app.js
####upstream port
The port the node app listens on. This is needed to properly link the node process with the upstream nginx server.
Example: 1234
####app path on server
The directory the app will be cloned into and run from on the server.
Example: /var/www
####nginx sites-enabled path
The path of the nginx sites-enabled directory. The nginx config file will be copied here.
Example: /etc/nginx/sites-enabled
####git clone URL
The URL of the repo. The repo is cloned on the first deploy and then pulled from thereafter.
Example: git@github.com:martinrue/martinrue.com.git
####server SSH address
The SSH user + host address of the server. You can specify a non-22 SSH port number by using a : after the hostname.
Example: root@yourserver.com:3022
Notes
Following a successful deploy,
ndwill wait a further 15 seconds (to account for the configured respawn limits of upstart) to verify the app process is still alive and well.As a shorthand, the
nd init,nd deploy,nd removecommands can also be referred to by their first letter, i.e.nd i,nd dandnd rrespectively.If no errors are reported, the command was successful. The appropriate zero or non-zero error code is returned to allow
ndto be invoked by third party tools.It's assumed that all files in the
sites-enablednginx directory are valid config files, i.e. that yournginx.confincludes them using something like thisinclude /etc/nginx/sites-enabled/*;.
License
MIT