По дороге — YAML-ад, конфликты портов, падения пайплайнов и неожиданные различия macOS vs Linux.
🧱 Что строилось
PHP 8.2 (FPM) — backend-сервисы
Nginx — reverse proxy / API Gateway
MySQL + Redis — данные
Docker Compose — оркестрация
GitHub Actions — CI/CD
Prometheus + Grafana — мониторинг
Жёстко зафиксированные порты:
9000 / 9001 / 8081 / 3000 / 9090💥 Что сломалось первым
Docker Compose:
services must be a mapping → YAML не прощает отступыКонфликты портов → без документации сервисы воюют
GitHub Actions:
.env.example есть локально, но не в GitCRLF vs LF → пайплайн падает из-за line endings
🔧 Что в итоге сработало
Переменные окружения + дефолты по портам
Healthchecks на уровне Docker и CI
Fallback-логика для
.env в CIОтдельный скрипт проверки живости сервисов
Мониторинг не «потом», а сразу
🧠 Ключевые выводы
Infrastructure as Code ≠ магия — тестируется и ревьюится как код
CI/CD — это быстрый фидбек, а не просто «зелёная галочка»
Порты — ограниченный ресурс, их нужно резервировать заранее
12-Factor App работает и для DevOps, не только для приложений
Наблюдаемость важнее героизма при падении продакшена
🚀 Прод
Zero-downtime deploy
Масштабирование сервисов
Бэкапы перед обновлением
Автоматическая проверка состояния
Это не история про «идеальный стек».
Это история про боль → дисциплину → устойчивую систему.
💬 А как вы решаете конфликты портов?
👉 Ссылка на статью
Библиотека пхпшника