Ответ
Окружение (environment) — это изолированный набор инфраструктуры, конфигураций и данных, в котором выполняется приложение. Разные окружения используются на различных этапах жизненного цикла ПО для изоляции изменений и снижения рисков.
Типичный набор окружений (pipeline):
- Development (Dev): Локальные машины разработчиков. Используется для написания и первичной отладки кода. Конфигурации максимально простые (например, локальная БД).
- Testing/QA: Выделенный сервер для тестировщиков. Максимально повторяет продакшен, но с тестовыми данными. Здесь запускаются автоматизированные и ручные тесты.
- Staging/Pre-production: Почти полная копия продакшена. Используется для финальной проверки сборки (smoke-тесты, проверка интеграций) перед выпуском. Часто содержит копию или анонимизированные данные из production.
- Production (Prod): Боевое окружение, с которым работают реальные пользователи. Отличается максимальной стабильностью, мониторингом и отказоустойчивостью.
Практика управления конфигурацией: Настройки, отличающиеся между окружениями (URL API, ключи доступа, параметры БД), выносятся в переменные окружения или конфигурационные файлы.
# Пример в Python (использование переменных окружения)
import os
database_url = os.getenv('DATABASE_URL', 'sqlite:///local.db') # Значение по умолчанию для Dev
api_key = os.getenv('API_KEY') # Ключ, который задаётся только на Prod/Staging
# Пример конфигурационного файла (config.yaml для разных сред)
development:
log_level: DEBUG
cache_enabled: false
production:
log_level: WARNING
cache_enabled: true
Ключевые принципы:
- Идемпотентность: Развёртывание в любое окружение должно давать одинаковый результат.
- Изоляция данных: Продакшен-данные никогда не должны попадать в Dev/Test из соображений безопасности (GDPR, PCI DSS) и целостности тестов.
- Соответствие конфигураций: Staging должен максимально точно копировать Prod, чтобы избежать проблем "работало на стейджинге, сломалось в проде".