Ответ
12-Factor App — это набор принципов для построения облачно-нативных, масштабируемых и поддерживаемых приложений. Я руководствуюсь ими при проектировании микросервисов и настройке CI/CD-пайплайнов.
Наиболее критичные для DevOps факторы из моего опыта:
-
Конфигурация в окружении (III): Все конфиги (подключения к БД, API-ключи) хранятся в переменных окружения, а не в коде. Это позволяет использовать один и тот же образ для всех сред (dev, stage, prod).
# Задание конфигурации для Docker-контейнера docker run -e "DB_HOST=prod-db.internal" -e "API_KEY=$(vault read -field=key secret/api)" my-app:latest -
Привязка портов (VII): Сервис сам объявляет порт, на котором он работает (например,
:8080), а не полагается на веб-сервер контейнера. Это стандарт для Docker и Kubernetes. -
Равенство сред (X): Стремлюсь к максимальному сходству сред разработки и продакшена, используя одинаковые технологии (Docker, базы данных) и автоматизируя их развертывание через IaC (Terraform).
-
Логи как потоки событий (XI): Приложение не управляет файлами логов. Оно пишет события в
stdout/stderr. В Kubernetes эти потоки собираются агентами (например, Fluentd) и отправляются в централизованное хранилище вроде Loki или Elasticsearch.
Следование этим принципам упрощает оркестрацию, масштабирование и делает инфраструктуру более устойчивой.