# WEB

# 🧱 Приложение 12 факторов: современный подход к разработке

**12-Factor App** — это методология создания облачно-ориентированных приложений. Она помогает делать проекты масштабируемыми, устойчивыми к сбоям и легко развёртываемыми. Вот краткое описание каждого из 12 факторов.

[![image.png](https://lavelin.ru/uploads/images/gallery/2025-07/scaled-1680-/tN3image.png)](https://lavelin.ru/uploads/images/gallery/2025-07/tN3image.png)

---

### 1. 🧬 Кодовая база (Codebase)

Одна кодовая база в системе контроля версий (например, Git), и множество развёртываний — staging, production и т. д.

[![image.png](https://lavelin.ru/uploads/images/gallery/2025-07/scaled-1680-/LHLimage.png)](https://lavelin.ru/uploads/images/gallery/2025-07/LHLimage.png)

---

### 2. 📦 Зависимости (Dependencies)

Все внешние библиотеки должны быть **явно указаны** (в `package.json`, `requirements.txt` и т. д.) и **изолированы от системы**.

[![image.png](https://lavelin.ru/uploads/images/gallery/2025-07/scaled-1680-/GzDimage.png)](https://lavelin.ru/uploads/images/gallery/2025-07/GzDimage.png)

---

### 3. ⚙️ Конфигурация (Config)

Конфигурация (пароли, API-ключи, адреса БД) должна храниться **в переменных окружения**, а не в коде.

[![image.png](https://lavelin.ru/uploads/images/gallery/2025-07/scaled-1680-/hV7image.png)](https://lavelin.ru/uploads/images/gallery/2025-07/hV7image.png)

---

### 4. 🔌 Сторонние службы (Backing Services)

Базы данных, кеши, очереди и другие внешние сервисы — это **сменные ресурсы**, подключаемые через переменные окружения.

[![image.png](https://lavelin.ru/uploads/images/gallery/2025-07/scaled-1680-/tFTimage.png)](https://lavelin.ru/uploads/images/gallery/2025-07/tFTimage.png)

---

### 5. 🛠️ Сборка, релиз, запуск (Build, Release, Run)

Приложение разворачивается поэтапно:

1. **Сборка** — компиляция, установка зависимостей.
2. **Релиз** — добавление конфигурации.
3. **Запуск** — выполнение приложения.

[![image.png](https://lavelin.ru/uploads/images/gallery/2025-07/scaled-1680-/USDimage.png)](https://lavelin.ru/uploads/images/gallery/2025-07/USDimage.png)

---

### 6. 🧼 Процессы (Processes)

Приложение работает как набор **статeless-процессов**. Нельзя хранить данные в оперативной памяти между запросами.

[![image.png](https://lavelin.ru/uploads/images/gallery/2025-07/scaled-1680-/C5Yimage.png)](https://lavelin.ru/uploads/images/gallery/2025-07/C5Yimage.png)

---

### 7. 🔉 Привязка портов (Port Binding)

Приложение **само открывает порт** (например, через встроенный веб-сервер) и обслуживает входящие запросы.

[![image.png](https://lavelin.ru/uploads/images/gallery/2025-07/scaled-1680-/Txyimage.png)](https://lavelin.ru/uploads/images/gallery/2025-07/Txyimage.png)

---

### 8. 🧵 Параллелизм (Concurrency)

Разделяй задачи: запускай отдельные процессы для обработки HTTP-запросов, фоновых задач, очередей и т. д.

[![image.png](https://lavelin.ru/uploads/images/gallery/2025-07/scaled-1680-/3wVimage.png)](https://lavelin.ru/uploads/images/gallery/2025-07/3wVimage.png)

---

### 9. 🚀 Устойчивость к сбоям (Disposability)

Приложение должно **быстро запускаться и завершаться**, быть готовым к рестартам в любой момент.

[![image.png](https://lavelin.ru/uploads/images/gallery/2025-07/scaled-1680-/xnZimage.png)](https://lavelin.ru/uploads/images/gallery/2025-07/xnZimage.png)

---

### 10. ⚖️ Dev/Prod Parity

Старайся максимально приблизить окружения разработки, тестирования и продакшена — это снижает баги.

[![image.png](https://lavelin.ru/uploads/images/gallery/2025-07/scaled-1680-/jYBimage.png)](https://lavelin.ru/uploads/images/gallery/2025-07/jYBimage.png)

---

### 11. 📄 Логирование (Logs)

Приложение не управляет логами. Оно **пишет всё в stdout**, а уже хостинг-платформа занимается сбором и анализом.

[![image.png](https://lavelin.ru/uploads/images/gallery/2025-07/scaled-1680-/nhximage.png)](https://lavelin.ru/uploads/images/gallery/2025-07/nhximage.png)

---

### 12. 🧪 Админ-процессы (Admin Processes)

Одноразовые задачи (миграции, отладка) должны выполняться в том же окружении, что и основное приложение.

[![image.png](https://lavelin.ru/uploads/images/gallery/2025-07/scaled-1680-/DEOimage.png)](https://lavelin.ru/uploads/images/gallery/2025-07/DEOimage.png)

---

## 📌 Вывод

Методология 12 факторов помогает писать приложения, которые:

- легко масштабируются и сопровождаются,
- устойчивы к сбоям,
- не зависят от инфраструктуры.

💡 **Хочешь развивать облачные приложения — начни с этих принципов.**