Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Environment Variables (env) — конфигурация вне кода
Env переменные отделяют конфигурацию от исходного кода. Это позволяет использовать один код в разных окружениях (dev, staging, production) без изменений.
Основная задача
Проблема без env переменных:
# ❌ Секреты в коде
DATABASE_URL = "postgresql://localhost/mydb"
SECRET_KEY = "my-secret-key-123"
API_KEY = "sk_test_abc123"
Риски:
- Секреты видны в Git
- Разные конфиги для разных окружений
- Невозможно скрывать пароли
Правильно: конфигурация из env
import os
from dotenv import load_dotenv
load_dotenv() # Загружаем из .env
class Config:
DATABASE_URL = os.getenv('DATABASE_URL')
SECRET_KEY = os.getenv('SECRET_KEY')
DEBUG = os.getenv('DEBUG', 'false') == 'true'
app = FastAPI()
Конфигурация хранится отдельно от кода.
Способ 1: .env файл
# .env (в .gitignore!)
DATABASE_URL=postgresql://localhost/mydb
REDIS_URL=redis://localhost:6379
SECRET_KEY=dev-secret
JWT_SECRET=jwt-secret
DEBUG=true
from dotenv import load_dotenv
import os
load_dotenv()
database_url = os.getenv('DATABASE_URL')
Способ 2: Pydantic Settings (рекомендуется)
from pydantic_settings import BaseSettings
class Settings(BaseSettings):
database_url: str
jwt_secret: str
debug: bool = False
log_level: str = "INFO"
class Config:
env_file = ".env"
settings = Settings()
Преимущества:
- Валидация типов (int, bool, URL)
- Дефолтные значения
- IDE автодополнение
- Чёткая документация
На сервере (Docker, Kubernetes)
Docker Compose:
services:
api:
environment:
DATABASE_URL: postgresql://db:5432/mydb
SECRET_KEY: ${SECRET_KEY}
DEBUG: "false"
Kubernetes Secrets:
apiVersion: v1
kind: Secret
metadata:
name: app-secrets
stringData:
JWT_SECRET: super-secret
DATABASE_PASSWORD: secret-pass
Типичный набор переменных
# Окружение
ENVIRONMENT=production
DEBUG=false
# БД
DATABASE_URL=postgresql://user:pass@host/db
REDIS_URL=redis://host:6379
# Безопасность (СЕКРЕТЫ!)
SECRET_KEY=ultra-secret
JWT_SECRET=jwt-secret
JWT_EXPIRATION=3600
# Интеграции
SENDGRID_API_KEY=SG.xxx
STRIPE_API_KEY=sk_live_xxx
# Приложение
CORS_ORIGINS=https://example.com
MAX_UPLOAD_SIZE=10485760
Безопасность
✅ В env нужно:
- API ключи и токены
- Пароли БД
- Секреты для подписи
- Приватные ключи
❌ В env НЕ нужно:
- Имя приложения
- Версия
- Логирование уровни
- Количество воркеров
Обязательно
# .gitignore
.env
.env.local
.env.*.local
Итог
Env переменные нужны для:
✅ Безопасность — секреты не видны в коде
✅ Гибкость — один код для всех окружений
✅ DevOps стандарт — контейнеры и оркестрация используют env
✅ Командная работа — каждый разработчик свой .env
✅ CI/CD — переменные передаются в pipeline
Это базовый инструмент в профессиональной разработке.