---
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)**  
Выполняйте задачи администрирования/управления с помощью разовых процессов
