Что такое переменные окружения? Как их задать в .env?

Переменные окружения — это пары ключ-значение, которые передаются процессу при запуске и используются для конфигурации. Файл .env обычно хранит такие значения в формате NAME=value, но Bash не загружает его автоматически: файл нужно явно импортировать или использовать инструмент, который его поддерживает.
Подробный ответ

Что такое переменные окружения

Переменные окружения — это значения, доступные процессу и его дочерним процессам. Их используют для настройки приложения без изменения исходного кода: адреса базы, режима запуска, URL внешних сервисов, порта или уровня логирования.

Как посмотреть переменные

env
printenv
printenv HOME
echo "$PATH"

Как задать переменную в shell

APP_ENV=development
export APP_ENV

export PORT=8000
APP_ENV=production python main.py

Переменная без export доступна только текущему shell. После export она передаётся дочерним процессам.

Файл .env

Файл .env обычно содержит конфигурацию в формате KEY=value.

APP_ENV=development
PORT=8000
DATABASE_URL=postgresql://app:password@localhost:5432/app_db
LOG_LEVEL=info

Как загрузить .env в Bash

set -a
source .env
set +a

echo "$APP_ENV"

Команда source .env выполняет содержимое файла в текущем shell. Перед загрузкой файла нужно убедиться, что ему можно доверять: source не просто читает значения, а исполняет shell-код.

.env в Docker Compose

Docker Compose может использовать .env для подстановки значений в compose-файл. Отдельно сервису можно передать env-файл через env_file.

services:
  web:
    image: my-app:latest
    env_file:
      - .env

Безопасность

Файл .env часто содержит секреты, поэтому его обычно добавляют в .gitignore. В production чувствительные значения лучше получать из secrets manager, защищённых переменных CI/CD или механизма секретов оркестратора.

Как ответить на собеседовании

Переменные окружения передают конфигурацию процессу без изменения кода. Я задаю их через export NAME=value или передаю при запуске команды. В .env использую формат KEY=value, но помню, что Bash не загружает такой файл автоматически и что секреты нельзя коммитить в репозиторий.

Оцени свой прогресс

Честно оцени своё понимание этого вопроса, чтобы мы могли построить твой учебный трек максимально эффективно.
Читать в блоге