envoy
v1.2.1
Published
Better Deployment with Node.js
Downloads
151
Readme
#Envoy Fast, simple deployment of static sites.
##Goals
- Correctness
- Speed
- Simplicity
##Supported Services
- S3
- FTP
##High-Level Calls
var envoy=require('envoy')
, ftpOptions = {
username: 'Fluffy'
, password: 'McChubbers'
, host: 'ftp.cheeseburger.com'
}
, s3Options = {
"bucket": "<BUCKET NAME>"
, "key": "<AWS ACCESS KEY>"
, "secret": "<AWS SECRET KEY>"
, "region": "<AWS REGION>" //us-west-1
}
, simpleWebsite = {
"index.html": '<h1>Welcome, Humans!</h1>'
}
, afterDeploy = function (err, log) {
if(err) {
console.err("Uh-oh: " + err);
}
else {
console.log("Website Deployed!");
console.log("Deployment log:");
for(var i=0, ii=log.length; i<ii; i++) {
console.log(log[i]);
}
}
};
// Deploying a local folder to S3
envoy.deployFolder('./my-website-folder', 's3', s3Options, afterDeploy);
// Deploying a collection of files to FTP
envoy.deployCollection(simpleWebsite, 'ftp', ftpOptions, afterDeploy);
##Low-Level Calls
You can perform lower level calls with the adapters directly.
var client = new require('./lib/adapters/ftp')
, opts = {username:'donkey', password:'kong'};
client.before(opts, function (err) {
client.put('some_file.txt', new Buffer('Some Data'), function (err) {
client.after( function (err) {
console.log("Done!");
} );
});
});
All adapters support three operations
- before
- put
- get
- destroy
- after
Certain adapters like FTP will support more operations unique to their operation
- mkdir
- rmdir
- list
Take a look at the tests for more.
##Notes
- We leave a
.envoy
file in the remote directory to speed up future deploys. Make sure your FTP server is configured to show dotfiles.
##Testing
You'll need a tests/secrets.json
file to run the tests with jake test
. See tests/secrets.example.json
for an example secrets.json
file. To test integration with different backends, you can have multiple secret files, name them secrets.somestring.json
and run the tests with jake testWith[somestring]
.
- FTP
- Ensure user has write permissions
- Server should be configured to show .dotfiles
- Server should not auto-rename uploaded files on conflict
- We are tested against pure-ftpd and vsftpd
- S3
- Enable static website hosting yourself
- We'll set
x-amz-acl = public-read
on uploaded objects