Skip to content

Instantly share code, notes, and snippets.

@distracteddev
Created November 22, 2012 22:14
Show Gist options
  • Select an option

  • Save distracteddev/4133121 to your computer and use it in GitHub Desktop.

Select an option

Save distracteddev/4133121 to your computer and use it in GitHub Desktop.
Seam.io Description

Seam Purpose

Deploy your Node.js applications in multiple environments (prod, staging, dev) to any VPS that you control without any user interaction. Seam is the invisible stitching between your Node.js applications and the real world.

Seam's Workflow and Requirements

Seam uses git post-recieve webhooks to deploy your applications while integrating seamlessly with your current git workflow. For example, if you push to a project's master branch, Seam will create/sync your repo, install dependencies via npm, and launch your script at a specified port. It then updates the proxy table and uses Nodejitsu's battle-hardened node-http-proxy to route traffic to your newly deployed webapp. It determines which domains/subdomains to forward to the newly deployed app based on the the domains/subdomains properties of the repo's package.json. If no option is specified, it simply uses the name of the git repo as the subdomain.

This workflow is best described by a couple of examples: -- I push the master branch of my Soapbox repo to my seam server living at distracteddev.com, Soapbox now is now living at soapbox.distracteddev.com -- I push the staging branch of my Soapbox repo... This version of Soapbox is now living at soapbox-staging.distracteddev.com -- I push the development branch of my Soapbox repo... This version of Soapbox is now living at soapbox-dev.distracteddev.com

-- I push the master branch of my Soapbox repo which has the following lines in it's package.json.

domains: [
  'zeus.ly'
]

master will accept requests from zeus.ly staging will accept requests from staging.zeus.ly dev will accept requests from dev.zeus.ly

Note: If these conventions are not to your liking, you can define a domainMap:

// branch->domain pairs
domainMap: {
  master: 'zeus.ly',
  staging: 'hopefully-this-works.zeus.ly'
  dev: 'shit-is-broken-here.zeus.ly'

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