Как установить переменную окружения
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Установка переменных окружения
Установка переменных окружения — фундаментальная операция в 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
Безопасность и лучшие практики
- Никогда не храните секреты в коде или репозитории
- Используйте секретные менеджеры (HashiCorp Vault, AWS Secrets Manager, Azure Key Vault)
- Разделяйте конфигурацию по окружениям (dev, staging, production)
- Валидируйте переменные при запуске приложения
- Используйте .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 — отделение конфигурации от кода, что обеспечивает переносимость и безопасность приложений.