craydent-deploy
v1.2.0
Published
craydent deploy helper
Downloads
4
Readme
Craydent Deploy 1.2.0
by Clark Inada
This standalone module is a deployment, continuous integration (CI), and log viewing platform for NodeJS written in node. This craydent-deploy can be used in conjunction with craydent-proxy and routes can be automatically added when the package.json of the app to be deployed has a configuration properly set. Craydent-deploy can add git projects and set up CI and allows you to view real-time logs on the server for the added projects. Craydent-deploy needs to creates a webserver and a websocket server and will require assignable ports.
Install
Recommended
$ npm install -g craydent-deploy
$ sudo cdeploy
Once installed and configured, the cdeploy command without arguments will restart the craydent-deploy server. It will also create the following directories:
- /var/craydent/config/ - stores config files for Craydent applications.
- /var/craydent/git/ - stores the original/current git repo files.
- /var/craydent/nodejs/ - stores all the nodejs file for each git repo.
- /var/craydent/log/ - stores the logs for each project.
- /var/craydent/backup/ - stores back up copies for each project.
- /var/craydent/key/ - stores ssh keys created and used by Craydent-deploy.
CLI
Version
$ sudo cdeploy version;
$ sudo cdeploy --version;
$ sudo cdeploy -v;
cdeploy version takes no arguments. This will output the current verion of Craydent Deploy.
Initialize
Usage with arguments (these are defaults or variables) to initialize
$ sudo cdeploy 'prod' 4900 4800 admin admin /var/craydent/key/master_id_rsa.pub '' '{{[email protected]:craydent/Craydent-Deploy.git or skip}}' '{{Craydent-Deploy}}' 'yes' 'yes' '{{http://www.example.com}}' '{{gituser}}' '{{gitpassword}}' '{{mongoURI}}' '{{amzaccessid:amzaccesssecret}}' '{{smtp}}' '{{senderemail}}'
$ sudo cdeploy -e 'prod' -s 4900 -h 4800 -u admin -p admin -k /var/craydent/key/master_id_rsa.pub -m '' -a '{{[email protected]:craydent/Craydent-Deploy.git or skip}}' -n '{{Craydent-Deploy}}' -w 'yes' -r 'yes' -f '{{http://www.example.com}}' -g '{{gituser}}' -i '{{gitpassword}}' -b '{{mongoURI}}' -z '{{amzaccessid:amzaccesssecret}}' -o '{{smtp}}' -d '{{senderemail}}'
$ sudo cdeploy --environment 'prod' --socketport 4900 --hostport 4800 --httpuser admin --httppassword admin --sshkey /var/craydent/key/master_id_rsa.pub --email '' --gitaddress '{{[email protected]:craydent/Craydent-Deploy.git or skip}}' --name '{{Craydent-Deploy}}' --use-webhook 'yes' --sshkey-exists 'yes' --fqdn '{{http://www.example.com}}' --gituser '{{gituser}}' --gitpassword '{{gitpassword}}' --mongo '{{mongoURI}}' --amazon '{{amzaccessid:amzaccesssecret}}' --smtp '{{smtp}}' --sender '{{senderemail}}'
cdeploy initialization can take 18 arguments. When arguments are missing, the CLI will ask a series of questions to obtain the missing arguments.
- env tier - dev, stg, prod or custom name (-e,--environment).
- socket port - port the websocket server will listen on (-s,--socketport).
- http port - port the webserver server will listen on (-h,--hostport).
- http auth username - username to login with to access the deploy UI (HTTP AUTH) (-u,--httpuser).
- http auth password - password to login with to access the deploy UI (HTTP AUTH) (-p,--httppassword).
- ssh key - path to ssh key or 'create' to create a new key (-k,--sshkey).
- email - email to send notifications (-m,--email).
- git url - first project to add from a git repo or 'skip' to skip this step (-a,--gitaddress).
- project name - name of the git project (-n,--name).
- yes/no to add webhooks - flag to enable webhook for continuous integration (-w,--use-webhook).
- yes/no if the ssh key is already registered in git - if yes, continuous integration will use the key. if no the key will be added to the git repo (-r,--sshkey-exists).
- the domain pointing to this server - the fully qualified domain name or IP for this server (-f,--fqdn).
- git username - username for the git user able to add webhooks and keys. (this is not stored and used one time) (-g,--gituser).
- git password - password for the git user able to add webhooks and keys. (this is not stored and used one time) (-i,--gitpassword).
- mongo - MongoDB connection string to be used for logging (-b,--mongo).
- aws credentials - Credentials for AWS SES which must be in the format "accessKeyId:secretAccessKey" (-z,--amazon).
- smtp - SMTP server url to be used to send emails (-o,--smtp).
- sender - Email of the the sender when sending emails via Craydent Deploy (-d,--sender).
Reset
$ sudo cdeploy reset
cdeploy reset takes no arguments. This will remove configuration/log files and reset the state to a freshly installed state.
Uninstall
$ sudo cdeploy uninstall
cdeploy uninstall takes no arguments. This will remove configuration/log files and and uninstalled the global module but leave all projects that were added.
Add Project
Usage with arguments (variables) to add projects
$ sudo cdeploy add '{{[email protected]:craydent/Craydent-Deploy.git}}' '{{Craydent-Deploy}}' 'yes' 'yes' '{{gituser}}' '{{gitpassword}}' /var/craydent/key/master_id_rsa.pub
$ sudo cdeploy add -a '{{[email protected]:craydent/Craydent-Deploy.git}}' -n '{{Craydent-Deploy}}' -w 'yes' -r 'yes' -g '{{gituser}}' -i '{{gitpassword}}' -k /var/craydent/key/master_id_rsa.pub
$ sudo cdeploy add --gitaddress '{{[email protected]:craydent/Craydent-Deploy.git}}' --name '{{Craydent-Deploy}}' --use-webhook 'yes' --use-sshkey 'yes' --gituser '{{gituser}}' --gitpassword '{{gitpassword}}' --sshkey /var/craydent/key/master_id_rsa.pub
cdeploy add can take 8 arguments. When arguments are missing, the CLI will ask a series of questions to obtain the missing arguments.
- git url - first project to add from a git repo (-a,--gitaddress).
- project name - name of the git project (-n,--name).
- yes/no to add webhooks - flag to enable webhook for continuous integration (-w,--use-webhook).
- yes/no if the ssh key is already registered in git - if yes, continuous integration will use the key. if no the key will be added to the git repo (-r,--use-sshkey).
- git username - username for the git user able to add webhooks and keys. (this is not stored and used one time) (-g,--gituser).
- git password - password for the git user able to add webhooks and keys. (this is not stored and used one time) (-i,--gitpassword).
- ssh key name to add as a deploy key. (default: is master_id_rsa created when Craydent Deploy was initialized) (-k,--sshkey).
Project Actions
Usage with arguments (variables) to manually run actions against projects Available actions:
- backup - Manually create a back up of the project
- build - Build will perform a backup, pull, npminstall, restart, and sync
- npminstall - Performs a fresh npm install on the project
- pull - Performs a git pull on the project
- pullrestart - Performs a pull and restart
- pullsync - Performs a pull and sync
- restart - Performs a stop and start
- rm - Removes a project from Craydent Deploy and all files (Backup is performed before removing and if there are Craydent Proxy routes, they will be removed as well).
- start - Performs a nohup node on the main NodeJS file
- stop - Kills the process of the project
- sync - Sync performs an rsync on the configured source to destination (typically used when your node application is a web application with a NodeJS backend)
$ sudo cdeploy backup '{{Project Name}}'
$ sudo cdeploy backup -n '{{Project Name}}'
$ sudo cdeploy backup --name '{{Project Name}}'
$ sudo cdeploy build '{{Project Name}}'
$ sudo cdeploy build -n '{{Project Name}}'
$ sudo cdeploy build --name '{{Project Name}}'
$ sudo cdeploy npminstall '{{Project Name}}'
$ sudo cdeploy npminstall -n '{{Project Name}}'
$ sudo cdeploy npminstall --name '{{Project Name}}'
$ sudo cdeploy pull '{{Project Name}}'
$ sudo cdeploy pull -n '{{Project Name}}'
$ sudo cdeploy pull --name '{{Project Name}}'
$ sudo cdeploy pullrestart '{{Project Name}}'
$ sudo cdeploy pullrestart -n '{{Project Name}}'
$ sudo cdeploy pullrestart --name '{{Project Name}}'
$ sudo cdeploy pullsync '{{Project Name}}'
$ sudo cdeploy pullsync -n '{{Project Name}}'
$ sudo cdeploy pullsync --name '{{Project Name}}'
$ sudo cdeploy restart '{{Project Name}}'
$ sudo cdeploy restart '{{Project Name}}'
$ sudo cdeploy restart --name '{{Project Name}}'
$ sudo cdeploy rm '{{Project Name}}'
$ sudo cdeploy rm -n '{{Project Name}}'
$ sudo cdeploy rm --name '{{Project Name}}'
$ sudo cdeploy start '{{Project Name}}'
$ sudo cdeploy start -n '{{Project Name}}'
$ sudo cdeploy start --name '{{Project Name}}'
$ sudo cdeploy stop '{{Project Name}}'
$ sudo cdeploy stop -n '{{Project Name}}'
$ sudo cdeploy stop --name '{{Project Name}}'
$ sudo cdeploy sync '{{Project Name}}'
$ sudo cdeploy sync -n '{{Project Name}}'
$ sudo cdeploy sync --name '{{Project Name}}'
cdeploy {{action}} requires 1 argument (project name). When argument is missing, the CLI will ask a for the project name (-n,--name).
REST equivalents
/backup/{{Project Name}}/{{passcode}
}
/build/{{Project Name}}/{{passcode}
}
/npm/{{command}}/{{Project Name}}/{{passcode}
}
/pull/{{Project Name}}/{{passcode}
}
/pull/{{command}}/{{Project Name}}/{{passcode}
}
/restart/{{Project Name}}/{{passcode}
}
/rm/{{Project Name}}/{{passcode}
}
/start/{{Project Name}}/{{passcode}
}
/stop/{{Project Name}}/{{passcode}
}
/sync/{{Project Name}}/{{passcode}
}
Enable auto start
$ sudo cdeploy autostart true {{Craydent-Deploy}}'
$ sudo cdeploy autostart -e -n {{Craydent-Deploy}}'
$ sudo cdeploy autostart --enable --name '{{Craydent-Deploy}}'
cdeploy autostart can take 2 arguments. When argument is missing, the CLI will ask questions to obtain the fields.
- enable - flag to enable or disable auto start. (-e,--enable)
- name - project name (-n,--name).
Disable auto start
$ sudo cdeploy autostart false {{Craydent-Deploy}}'
$ sudo cdeploy autostart -e false -n {{Craydent-Deploy}}'
$ sudo cdeploy autostart --enable false --name '{{Craydent-Deploy}}'
$ sudo cdeploy autostart --disable --name '{{Craydent-Deploy}}'
cdeploy autostart can take 2 arguments. When argument is missing, the CLI will ask questions to obtain the fields.
- enable - flag to enable or disable auto start. (-e,--disable)
- name - project name (-n,--name).
Set health check interval
$ sudo cdeploy setinterval 30000 {{Craydent-Deploy}}'
$ sudo cdeploy setinterval -c 30000 -n {{Craydent-Deploy}}'
$ sudo cdeploy setinterval --interval 30000 --name '{{Craydent-Deploy}}'
cdeploy setinterval can take 2 arguments. When argument is missing, the CLI will ask questions to obtain the fields.
- interval - Health check interval (default: 30000) (-c,--interval).
- name - project name (-n,--name).
Set up mongodb for logging and error emails
$ sudo cdeploy setmongo '{{mongoURI}}'
$ sudo cdeploy setmongo -b '{{mongoURI}}'
$ sudo cdeploy setmongo --mongo '{{mongoURI}}'
cdeploy adduser requires 1 argument (MongoDB URI). When argument is missing, the CLI will ask a for the MongoDB URI.
- mongo - MongoDB connection string to be used for logging (-b,--mongo).
Set up email on errors
$ sudo cdeploy setmailer '{{amazoncredentials}}' '{{smtp uri}}' '{{sender email}}' '{{mongoURI}}'
$ sudo cdeploy setmailer -z '{{amazoncredentials}}' -o '{{smtp uri}}' -d '{{sender email}}' -b '{{mongoURI}}'
$ sudo cdeploy setmailer --amazon '{{amazoncredentials}}' --smtp '{{smtp uri}}' --sender '{{sender email}}' --mongo '{{mongoURI}}'
cdeploy setmailer can take up to 4 arguments. When argument is missing, the CLI will ask questions to obtain the fields.
- amazon credentials - amazon access credentials in form form accessKeyId:secretAccessKey. (-z,--amazon)
- smtp uri - mail server transport uri string for logging.. (-o,--smtp)
- sender email - email address to use in the "from" when sending emails. (-d,--sender)
- mongo - MongoDB connection string to be used for logging (-b,--mongo).
Add HTTP User
$ sudo cdeploy adduser '{{username}}' '{{password}}' '{{access level}}'
$ sudo cdeploy adduser -u '{{username}}' -p '{{password}}' -l '{{access level}}'
$ sudo cdeploy adduser --user '{{username}}' --password '{{password}}' --access '{{access level}}'
cdeploy adduser can take up to 3 arguments.
- *username - username to add. (-u,--user)
- *password - password for the username. (-p,--password)
- access - access level for the username. (-l,--access)
REST equivalents
/admin/user/add/{{passcode}}/{{username}}/{{password}
}
Remove HTTP User
$ sudo cdeploy rmuser '{{username}}'
$ sudo cdeploy rmuser -u '{{username}}'
$ sudo cdeploy rmuser -user '{{username}}'
cdeploy rmuser takes 1 argument.
- *username - username to remove. (-u,--user)
REST equivalents
/admin/user/remove/{{passcode}}/{{username}}/{{password}}
Update HTTP User
$ sudo cdeploy updateuser '{{username}}' '{{password}}' '{{access level}}'
$ sudo cdeploy updateuser -u '{{username}}' -p '{{password}}' -l '{{access level}}'
$ sudo cdeploy updateuser --user '{{username}}' --password '{{password}}' --access '{{access level}}'
deploy updateuser can take up to 3 arguments.
- *username - username to add. (-u,--user)
- *password - password for the username. (-p,--password)
- access - access level for the username. (-l,--access)
REST equivalents
/admin/password/update/{{passcode}}/{{username}}/{{password}}
If craydent-proxy is installed and there are routes in the package.json of the added project, deploy will automatically add the routes to craydent-proxy. The package.json file must contain a property named "cproxy" and follow the route structure of craydent-proxy.
"cproxy":{
"routes": {
// these are the domains which the server be requested on
"sub.example.com": [{
// name is the identifier of the route and must be unique
"name": "unique name identifier"
// host is the destination to forward the request
"host": ["localhost"],
// port is the port to forward on the destination
"port": ["3000"],
// verbs are the allowable methods on the destination
"verbs": ["get", "post", "put", "delete"],
// refering domains allowed to use this route
"allow": ["*"],
// headers are used to overwrite the headers being passed iff it is passed
"headers": {},
// destination path prefix
"path": "/websocket/",
// request path for this route
"request_path": "/websocket/*"
// http authentication
"http_auth": false
"http_username": "user",
"http_password": "password"
}]
}
}
In addition, the actual configuration for the for the routes can be a reference to a different file.
"cproxy": { "$ref": "../routes.json#/routes_to_add" }
This will pull the json object from ../routes.json and use the routes_to_add property.
Download
Craydent-Deploy is released under the Dual licensed under the MIT or GPL Version 2 licenses.