Ответ
Минимальный жизнеспособный набор — это три изолированных окружения, каждое со своей целью и конфигурацией:
-
Development (локальное/Dev)
- Цель: Активная разработка и unit-тестирование.
- Конфигурация: Максимальный уровень логирования, отладочные инструменты (Xdebug, Telescope), могут использоваться «облегченные» или моковые сервисы (например, Mailhog вместо реального SMTP).
- Инструменты: Docker Compose, Laravel Valet/Homestead, XAMPP.
-
Staging/Pre-production
- Цель: Интеграционное тестирование, приемка фич QA-инженерами, проверка деплоя и финальная демонстрация продукта.
- Конфигурация: Максимально приближена к Production (та же версия ОС, СУБД, PHP), но с тестовыми данными. Включены мониторинг и логирование, но отладочный режим отключен.
- Ключевое отличие: Отдельная база данных и внешние сервисы (например, тестовый платежный шлюз).
-
Production
- Цель: Работа для реальных пользователей.
- Конфигурация: Оптимизирована для безопасности и производительности (OPcache, минимизированный уровень логирования, включенный кэш).
Расширенная схема (для mature-проектов):
- Testing/CI: Окружение, которое на каждый пул-реквест или коммит в main разворачивается автоматически в CI/CD (например, в GitLab) для прогона полного набора автотестов.
- Demo: Отдельный стенд с актуальной версией для демонстрации заказчику или менеджменту.
Пример различий в конфиге Laravel (.env):
# .env.local (Development)
APP_ENV=local
APP_DEBUG=true
LOG_LEVEL=debug
DB_DATABASE=myapp_dev
MAIL_MAILER=log
# .env.staging
APP_ENV=staging
APP_DEBUG=false
LOG_LEVEL=info
DB_DATABASE=myapp_staging
MAIL_MAILER=smtp # Но на тестовый адрес
SENTRY_DSN=https://... # Мониторинг ошибок включен
# .env.production
APP_ENV=production
APP_DEBUG=false
LOG_LEVEL=error # Только критические ошибки
DB_DATABASE=myapp_prod
MAIL_MAILER=smtp # Реальный SMTP
SENTRY_DSN=https://...
CACHE_DRIVER=redis # Продакшн-кэш