Ответ
В DevOps переменные окружения — ключевой способ конфигурации приложений. Их постоянное хранение и управление должно быть безопасным и воспроизводимым.
1. Файлы в домашнем каталоге (для пользовательских настроек):
~/.bashrc,~/.zshrc— выполняются при запуске интерактивной оболочки.# Добавить в ~/.bashrc export EDITOR=vim export PATH="$PATH:$HOME/bin"~/.profileили~/.bash_profile— выполняются при логине. После редактирования выполнитеsource ~/.bashrc.
2. Системные файлы конфигурации (для глобальных настроек):
/etc/environment— системные переменные (толькоKEY=value, безexport)./etc/profile.d/— каталог для скриптов, выполняемых при входе всех пользователей. Создайте файлmyapp.sh:# /etc/profile.d/myapp.sh export APP_HOME=/opt/myapp
3. Файлы .env (для проектов) — НЕ коммитить в Git!:
# .env файл
DB_HOST=localhost
DB_PORT=5432
SECRET_KEY=$(openssl rand -hex 32) # Генерация на этапе деплоя
Загрузить в сессию: set -a; source .env; set +a или использовать инструменты вроде direnv.
4. Использование секретов и внешних хранилищ (Production-подход):
- HashiCorp Vault:
# Получение секрета из Vault export DB_PASSWORD=$(vault kv get -field=password secret/myapp/db) - Облачные хранилища (AWS SSM Parameter Store, GCP Secret Manager):
# AWS CLI export API_KEY=$(aws ssm get-parameter --name "/prod/api-key" --with-decryption --query "Parameter.Value" --output text) - Orchestrator secrets (Docker Swarm, Kubernetes):
# Kubernetes Secret, смонтированный как env env: - name: PASSWORD valueFrom: secretKeyRef: name: app-secret key: db-password
5. Инфраструктура как код (IaC): В Terraform или CloudFormation переменные определяются в конфигурации и передаются в инстансы через user-data или системы управления.
Рекомендация: Никогда не храните секреты (пароли, ключи) в plain text в файлах, которые попадают в репозиторий. Используйте dedicated secret management tools.