From 12factor.net:
I.Codebase. One codebase tracked in revision control, many deploys
II.Dependencies. Explicitly declare and isolate dependencies
III. Config. Store config in the environment
IV. Backing services. Treat backing services as attached resources
V. Build, release, run. Strictly separate build and run stages
VI. Processes. Execute the app as one or more stateless processes
VII. Port binding. Export services via port binding
VIII. Concurrency. Scale out via the process model
IX. Disposability. Maximize robustness with fast startup and graceful shutdown
X. Dev/prod parity. Keep development, staging, and production as similar as possible
XI. Logs. Treat logs as event streams
XII. Admin processes. Run admin/management tasks as one-off processes