Что такое переменная окружения (Environment Variable) в Linux/DevOps?

«Что такое переменная окружения (Environment Variable) в Linux/DevOps?» — вопрос из категории Linux, который задают на 24% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В DevOps переменные окружения (Environment Variables) — это ключевой механизм конфигурации приложений и инфраструктуры, позволяющий отделить код от конфигурации. Это динамические пары «ключ-значение», доступные процессам в операционной системе.

Почему они так важны в DevOps? Они обеспечивают безопасность, переносимость и гибкость, позволяя одной и той же сборке приложения (образу Docker) работать в разных средах (dev, staging, production) без изменений кода.

Практические примеры использования:

  1. Конфигурация приложения в контейнере 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

  2. Хранение секретов (ключей, паролей):

    # Никогда не храните секреты в коде! Используйте переменные.
    export DB_PASSWORD="s3cr3t_p@ss"
    export AWS_ACCESS_KEY_ID="AKIA..."

    В CI/CD (например, GitLab CI) секреты задаются в настройках пайплайна и инжектируются как переменные окружения.

  3. Конфигурация инфраструктуры как код (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.