-
Codebase – use version control, one codebase tracked in revision control for many deployments.
-
Dependencies – use a package manager and don’t commit dependencies in the codebase repository.
-
Config – store the config in Environment Variable, if you have to repackage your application, you’re doing it wrong.
-
Backing Services – a deploy of the twelve-factor app should be able to swap out a local MySQL database with one managed by a third party (such as Amazon RDS) without any changes to the app’s code.
-
Build, Release, Run – the twelve-factor app uses strict separation between the build, release, and run stages. Every release should always have a unique release ID and releases should allow rollback.
-
Processes – execute the app as one or more stateless processes, the Twelve-factor processes are stateless and share-nothing.
-
Port Binding – export services via port binding, The twelve-factor app is completely self-contained.
-
Concurrency – scale out via the process model. Each process should be individually scaled, with Factor 6 (Stateless), it is easy to scale the services.
-
Disposability – maximize robustness with fast startup and graceful shutdown, we can achieve this with containers.
-
Dev/Prod Parity – Keep development, staging, and production as similar as possible, the twelve-factor app is designed for continuous deployment by keeping the gap between development and production small.
-
Logs – treat logs as event streams, a twelve-factor app never concerns itself with routing or storage of its output stream.
-
Admin Processes – run admin/management tasks as one-off processes.
The 12-factor App methodology is technology and language agnostic but satisfied by Containers, Microservices, and CI/CD Pipelines with a focus on DevOps. You can access more information on The 12-factor App at https://12factor.net/.
References::
https://developers.redhat.com/blog/2017/06/22/12-factors-to-cloud-success/