craydent-deploy

1.2.0 • Public • Published

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 '' '{{git@github.com: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 '{{git@github.com: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 '{{git@github.com: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.

  1. env tier - dev, stg, prod or custom name (-e,--environment).
  2. socket port - port the websocket server will listen on (-s,--socketport).
  3. http port - port the webserver server will listen on (-h,--hostport).
  4. http auth username - username to login with to access the deploy UI (HTTP AUTH) (-u,--httpuser).
  5. http auth password - password to login with to access the deploy UI (HTTP AUTH) (-p,--httppassword).
  6. ssh key - path to ssh key or 'create' to create a new key (-k,--sshkey).
  7. email - email to send notifications (-m,--email).
  8. git url - first project to add from a git repo or 'skip' to skip this step (-a,--gitaddress).
  9. project name - name of the git project (-n,--name).
  10. yes/no to add webhooks - flag to enable webhook for continuous integration (-w,--use-webhook).
  11. 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).
  12. the domain pointing to this server - the fully qualified domain name or IP for this server (-f,--fqdn).
  13. git username - username for the git user able to add webhooks and keys. (this is not stored and used one time) (-g,--gituser).
  14. git password - password for the git user able to add webhooks and keys. (this is not stored and used one time) (-i,--gitpassword).
  15. mongo - MongoDB connection string to be used for logging (-b,--mongo).
  16. aws credentials - Credentials for AWS SES which must be in the format "accessKeyId:secretAccessKey" (-z,--amazon).
  17. smtp - SMTP server url to be used to send emails (-o,--smtp).
  18. 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 '{{git@github.com:craydent/Craydent-Deploy.git}}' '{{Craydent-Deploy}}' 'yes' 'yes' '{{gituser}}' '{{gitpassword}}' /var/craydent/key/master_id_rsa.pub
 
$ sudo cdeploy add -a '{{git@github.com: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 '{{git@github.com: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.

  1. git url - first project to add from a git repo (-a,--gitaddress).
  2. project name - name of the git project (-n,--name).
  3. yes/no to add webhooks - flag to enable webhook for continuous integration (-w,--use-webhook).
  4. 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).
  5. git username - username for the git user able to add webhooks and keys. (this is not stored and used one time) (-g,--gituser).
  6. git password - password for the git user able to add webhooks and keys. (this is not stored and used one time) (-i,--gitpassword).
  7. 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.

  1. enable - flag to enable or disable auto start. (-e,--enable)
  2. 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.

  1. enable - flag to enable or disable auto start. (-e,--disable)
  2. 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.

  1. interval - Health check interval (default: 30000) (-c,--interval).
  2. 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.

  1. 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.

  1. amazon credentials - amazon access credentials in form form accessKeyId:secretAccessKey. (-z,--amazon)
  2. smtp uri - mail server transport uri string for logging.. (-o,--smtp)
  3. sender email - email address to use in the "from" when sending emails. (-d,--sender)
  4. 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.

  1. *username - username to add. (-u,--user)
  2. *password - password for the username. (-p,--password)
  3. 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.

  1. *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.

  1. *username - username to add. (-u,--user)
  2. *password - password for the username. (-p,--password)
  3. 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.

Readme

Keywords

Package Sidebar

Install

npm i craydent-deploy

Weekly Downloads

1

Version

1.2.0

License

MIT

Last publish

Collaborators

  • craql
  • cinada
  • craydent