--- title: "12factor" date: 2024-10-12T17:06:54+03:00 draft: true tags: [tutorual, development] --- Оригинал: https://12factor.net/ru/ # Введение В наши дни программное обеспечение обычно распространяется в виде сервисов, называемых веб-приложения (`web apps`) или software-as-a-service (`SaaS`). Приложение двенадцати факторов — это методология для создания SaaS-приложений, которые: * Используют **декларативный** формат для описания процесса установки и настройки, что сводит к минимуму затраты времени и ресурсов для новых разработчиков, подключённых к проекту; * Имеют **соглашение** с операционной системой, предполагающее **максимальную переносимость** между средами выполнения; * Подходят для **развёртывания** на современных **облачных платформах**, устраняя необходимость в серверах и системном администрировании; * **Сводят к минимуму расхождения** между средой разработки и средой выполнения, что позволяет использовать непрерывное развёртывание (`continuous deployment`) для максимальной гибкости; * И могут **масштабироваться** без существенных изменений в инструментах, архитектуре и практике разработки. Методология двенадцати факторов может быть применена для приложений, написанных на любом языке программирования и использующих любые комбинации сторонних служб (backing services) (базы данных, очереди сообщений, кэш-памяти, и т.д.). ## Предпосылки Участники, внёсшие вклад в этот документ, были непосредственно вовлечены в разработку и развёртывание сотен приложений и косвенно были свидетелями разработки, выполнения и масштабирования сотен тысяч приложений во время нашей работы над платформой [Heroku](http://www.heroku.com/). В этом документе обобщается весь наш опыт использования и наблюдения за самыми разнообразными SaaS-приложениями в дикой природе. Документ является объединением трёх идеальных подходов к разработке приложений: уделение особого внимания динамике органического роста приложения с течением времени, динамике сотрудничества разработчиков, работающих над кодовой базой приложения, и [устранение последствий эрозии программного обеспечения](http://blog.heroku.com/archives/2011/6/28/the_new_heroku_4_erosion_resistance_explicit_contracts/). Наша мотивация заключается в повышении осведомлённости о некоторых системных проблемах, которые мы встретили в практике разработки современных приложений, а также для того, чтобы предоставить общие основные понятия для обсуждения этих проблем и предложить набор общих концептуальных решений этих проблем с сопутствующей терминологией. Формат навеян книгами Мартина Фаулера (`Martin Fowler`) [Patterns of Enterprise Application Architecture](http://books.google.com/books/about/Patterns_of_enterprise_application_archi.html?id=FyWZt5DdvFkC) и [Refactoring](http://books.google.com/books/about/Refactoring.html?id=1MsETFPD3I0C). ## Кому следует читать этот документ? Разработчикам, которые создают `SaaS`-приложения. `Ops` инженерам, выполняющим развёртывание и управление такими приложениями. # Двенадцать факторов **[I. Кодовая база](https://12factor.net/ru/codebase)** Одна кодовая база, отслеживаемая в системе контроля версий, – множество развёртываний **[II. Зависимости](https://12factor.net/ru/dependencies)** Явно объявляйте и изолируйте зависимости **[III. Конфигурация](https://12factor.net/ru/config)** Сохраняйте конфигурацию в среде выполнения **[IV. Сторонние службы (Backing Services)](https://12factor.net/ru/backing-services)** Считайте сторонние службы (backing services) подключаемыми ресурсами **[V. Сборка, релиз, выполнение](https://12factor.net/ru/build-release-run)** Строго разделяйте стадии сборки и выполнения **[VI. Процессы](https://12factor.net/ru/processes)** Запускайте приложение как один или несколько процессов не сохраняющих внутреннее состояние (stateless) **[VII. Привязка портов (Port binding)](https://12factor.net/ru/port-binding)** Экспортируйте сервисы через привязку портов **[VIII. Параллелизм](https://12factor.net/ru/concurrency)** Масштабируйте приложение с помощью процессов **[IX. Утилизируемость (Disposability)](https://12factor.net/ru/disposability)** Максимизируйте надёжность с помощью быстрого запуска и корректного завершения работы **[X. Паритет разработки/работы приложения](https://12factor.net/ru/dev-prod-parity)** Держите окружения разработки, промежуточного развёртывания (staging) и рабочего развёртывания (production) максимально похожими **[XI. Журналирование (Logs)](https://12factor.net/ru/logs)** Рассматривайте журнал как поток событий **[XII. Задачи администрирования](https://12factor.net/ru/admin-processes)** Выполняйте задачи администрирования/управления с помощью разовых процессов