porter
is a platform built on AWS APIs to enable continuous delivery of
Docker containers to EC2.
Lots of useful documentation is built into porter itself.
Run porter help
, and most porter commands with no arguments for details on how
to call them.
- Features
- Project fit
- Getting started
- Configuration
- Deployment
- Infrastructure
- Misc
- Interactive command line interface (CLI) packaged as a statically linked binary
- Multi-region, multi-AZ, blue-green deployments
- Secrets management
- Works in EC2-Classic, Default VPC, and Custom VPCs
- Highly customizable
- Programmable deployment pipeline and EC2 host-level customizations to help with everything from testing to client side deployments
- Customizable AWS infrastructure by overriding any part of the default CloudFormation template
- Rapidly bootstrap an empty AWS account with
porter bootstrap
commands - Easily integrates with any CI/CD software
- Easy to adopt and unobtrusive
- Allows developers to provision a single-region stack using the same CloudFormation template used in other environments to verify feature and bug fixes without needing to integrate in a shared environment (e.g. QA2)
- Configurable deployment blackout windows
- Secure secret transport backed by S3 and SSE-KMS, or provide your own long-term secrets storage integration
Porter is a great fit for a lot of different projects, and not a great fit for others. Here's some examples of each
- Typical single-tenant N-tier services
- Projects practicing continuous delivery
- Dockerized, 12factor services
- Teams wanting to use AWS that don't have the resources to build a deployment pipeline but find CodePipeline, CodeDeploy, ECS, and ElasticBeanstalk too constraining.
- Mid-large companies / operations teams
- Possibly with a multiple AWS accounts
- Looking to provide a PaaS (
porter + CI/CD + automated onboarding == PaaS
) - Wanting to prevent "CI snowflakes": service-specific one-off logic baked into CI jobs. Porter's CI integration surface area is intentionally very small.
- Multi-region services
- Client applications (SPA, web-deployed clients) with a backend service
- Have OAuth2 flows?
porter create-stack
can help
- Have OAuth2 flows?
- Projects looking to vastly simplify host provisioning (burn your cookbooks)
- Mid-large projects consisting of many microservices, or projects needing the cost efficiency of clustering technologies (e.g. DCOS, Kubernetes)
- Projects that manually release software. Porter was born and bred to support a fully automated CD environment. That said it is possible to add manual verification steps to a porter deployment.
- Entirely stateless services (not even in-memory caching) - consider Lambda
- Projects needing cloud-agnostic or alternative infrastructure provisioning - consider Terraform
- Projects need cloud-agnosticism. Porter is tied to AWS.
To use this platform effectively the following is required
- Comfortable using a command line interface (CLI)
- Basic understanding of Docker such as what a
Dockerfile
contains, and thedocker build
anddocker run
commands - Basic understanding of HTTP, DNS, and SSH
To customize this platform or the infrastructure created, an excellent understanding of CloudFormation templates is required.
Download, rename, and chmod the latest release for your platform from the releases page
porter has two runtime dependencies: git and docker.
A working docker installation looks like this
[bcook:~]$ docker version
Client:
Version: 1.10.2
API version: 1.22
Go version: go1.5.3
Git commit: c3959b1
Built: Mon Feb 22 22:37:33 2016
OS/Arch: darwin/amd64
Server:
Version: 1.10.2
API version: 1.22
Go version: go1.5.3
Git commit: c3959b1
Built: Mon Feb 22 22:37:33 2016
OS/Arch: linux/amd64