← Назад к вопросам

Как установить переменную окружения

1.3 Junior🔥 181 комментариев
#Linux и администрирование

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Установка переменных окружения

Установка переменных окружения — фундаментальная операция в DevOps, позволяющая управлять конфигурацией приложений, скриптов и систем без изменения кода. Вот наиболее распространённые методы с примерами.

Временная установка в сессии оболочки

Для временной установки (действует только в текущей сессии терминала):

# В Linux/macOS (Bash/Zsh)
export DATABASE_URL="postgresql://user:pass@localhost:5432/db"

# В Windows Command Prompt
set DATABASE_URL=postgresql://user:pass@localhost:5432/db

# В Windows PowerShell
$env:DATABASE_URL="postgresql://user:pass@localhost:5432/db"

Постоянная установка для пользователя

Для перманентного хранения переменных в профиле пользователя:

# Добавить в ~/.bashrc, ~/.bash_profile или ~/.zshrc
echo 'export API_KEY="your_secret_key_here"' >> ~/.bashrc
source ~/.bashrc  # Применить изменения

# В Windows через Панель управления:
# Система → Дополнительные параметры → Переменные среды → Переменные пользователя

Установка в контейнерах Docker

В Docker-контейнерах переменные окружения — основной способ конфигурации:

# В Dockerfile
ENV NODE_ENV=production
ENV PORT=3000

# При запуске контейнера
docker run -e "DATABASE_HOST=db.example.com" -e "REDIS_URL=redis://cache" myapp:latest

# Через файл .env (требует docker-compose или --env-file)
docker run --env-file .env myapp:latest

В Docker Compose и оркестраторах

В docker-compose.yml:

services:
  webapp:
    image: nginx:latest
    environment:
      - APP_ENV=production
      - DEBUG=false
    env_file:
      - .env
      - .env.secrets

В Kubernetes манифестах:

apiVersion: v1
kind: Pod
metadata:
  name: myapp-pod
spec:
  containers:
  - name: app
    image: myapp:latest
    env:
    - name: LOG_LEVEL
      value: "info"
    - name: DB_PASSWORD
      valueFrom:
        secretKeyRef:
          name: db-secret
          key: password

В CI/CD пайплайнах

Пример для GitHub Actions:

jobs:
  deploy:
    runs-on: ubuntu-latest
    env:
      NODE_ENV: production
      REGISTRY: ghcr.io
    steps:
      - name: Set custom env
        run: echo "BRANCH_NAME=${GITHUB_REF##*/}" >> $GITHUB_ENV
      - name: Use the variable
        run: echo "Deploying from $BRANCH_NAME"

Пример для GitLab CI:

variables:
  POSTGRES_USER: "app_user"
  DEPLOY_ENV: "staging"

job:
  script:
    - echo "Using $POSTGRES_USER in $DEPLOY_ENV"

Программная установка в скриптах

# Python
import os
os.environ["API_ENDPOINT"] = "https://api.example.com"
# Или при запуске: API_ENDPOINT="https://..." python script.py

# Node.js
process.env.NODE_ENV = 'development';
// Запуск: NODE_ENV=production node app.js

Безопасность и лучшие практики

  1. Никогда не храните секреты в коде или репозитории
  2. Используйте секретные менеджеры (HashiCorp Vault, AWS Secrets Manager, Azure Key Vault)
  3. Разделяйте конфигурацию по окружениям (dev, staging, production)
  4. Валидируйте переменные при запуске приложения
  5. Используйте .env файлы с .gitignore для локальной разработки

Пример структуры .env файла:

# .env.example (шаблон)
DB_HOST=localhost
DB_PORT=5432
DB_NAME=
DB_USER=
DB_PASSWORD=

# .env (фактический, в .gitignore)
DB_HOST=db.prod.example.com
DB_PORT=5432
DB_NAME=production_db
DB_USER=admin
DB_PASSWORD=SuperSecret123!

Инструменты для управления переменными

  • direnv — автоматическая загрузка .env при входе в директорию
  • dotenv — библиотеки для загрузки .env в различных языках
  • envconsul — динамическое обновление переменных из Consul
  • 12-факторное приложение — методология, где конфигурация хранится в окружении

Выбор метода зависит от контекста: для локальной разработки достаточно .env файлов, для production — секретные менеджеры и оркестраторы с безопасной инжекцией переменных. Ключевой принцип DevOps — отделение конфигурации от кода, что обеспечивает переносимость и безопасность приложений.

Как установить переменную окружения | PrepBro