Ответ
В DevOps переменные окружения (Environment Variables) — это ключевой механизм конфигурации приложений и инфраструктуры, позволяющий отделить код от конфигурации. Это динамические пары «ключ-значение», доступные процессам в операционной системе.
Почему они так важны в DevOps? Они обеспечивают безопасность, переносимость и гибкость, позволяя одной и той же сборке приложения (образу Docker) работать в разных средах (dev, staging, production) без изменений кода.
Практические примеры использования:
-
Конфигурация приложения в контейнере Docker:
FROM python:3.11 COPY . /app WORKDIR /app # Используем переменную для порта ENV APP_PORT=8080 CMD ["python", "app.py"]Запуск с переопределением:
docker run -e APP_PORT=9090 my-app -
Хранение секретов (ключей, паролей):
# Никогда не храните секреты в коде! Используйте переменные. export DB_PASSWORD="s3cr3t_p@ss" export AWS_ACCESS_KEY_ID="AKIA..."В CI/CD (например, GitLab CI) секреты задаются в настройках пайплайна и инжектируются как переменные окружения.
-
Конфигурация инфраструктуры как код (Terraform):
export TF_VAR_region="us-east-1" export TF_VAR_instance_count=3 terraform apply
Типы и управление в Linux:
- Локальные (сессионные): Существуют только в текущей сессии оболочки.
export MY_VAR="value" - Пользовательские: Загружаются из
~/.bashrcили~/.profile. - Системные (глобальные): Определены для всех пользователей (например, в
/etc/environment). - Просмотр и установка:
# Показать все переменные env # Показать конкретную echo $PATH # Установить временную переменную для одного процесса DEBUG=true python script.py
Лучшие практики в DevOps:
- Используйте
.envфайлы для локальной разработки (и добавьте их в.gitignore). - Для секретов используйте специализированные хранилища (HashiCorp Vault, AWS Secrets Manager, Azure Key Vault), которые инжектируют значения в переменные окружения во время запуска.
- Чётко разделяйте переменные по средам с помощью префиксов или разных файлов конфигурации в CI/CD.