Metodologia publicada pelo pessoal do Heroku em 2011 para aplicações que rodam como serviço na nuvem. Mais de uma década depois, continua sendo a base do que esperamos de uma aplicação em container.
| # | Fator | O que diz | Na prática |
|---|---|---|---|
| I | Base de código | Uma base de código versionada, muitos deploys | O mesmo repositório gera dev, homologação e produção |
| II | Dependências | Declare e isole as dependências | go.mod, pom.xml, package.json; nada instalado “na mão” no servidor |
| III | Configurações | Guarde a configuração no ambiente | URL do banco e chaves em variáveis de ambiente, não no código |
| IV | Serviços de apoio | Trate serviços de apoio como recursos anexados | Trocar o banco local por um gerenciado muda só a configuração |
| V | Build, release, run | Separe estritamente os estágios | Imagem gerada uma vez e promovida entre ambientes |
| VI | Processos | Rode como processos sem estado | Sessão no Redis, não na memória da instância |
| VII | Vínculo de porta | Exporte serviços por uma porta | A aplicação sobe o próprio servidor HTTP na porta configurada |
| VIII | Concorrência | Escale com mais processos | Mais réplicas em vez de uma máquina maior |
| IX | Descartabilidade | Inicie rápido e desligue com elegância | Tratar SIGTERM, terminar o que está em andamento e sair |
| X | Paridade dev/prod | Ambientes o mais parecidos possível | O mesmo Postgres em dev (via container) e em produção |
| XI | Logs | Trate logs como fluxo de eventos | Escrever em stdout e deixar a plataforma coletar |
| XII | Processos de admin | Tarefas administrativas como processos pontuais | Migrations rodando como job, com o mesmo código da aplicação |
Muitos desses fatores são o que torna uma aplicação boa de rodar em containers.
- Veja mais em: The Twelve-Factor App