Файл .env: как использовать в Python, Express и Go

Что такое файл .env
Файл .env — это текстовый файл в корне проекта, содержащий пары ключ=значение, которые задают конфигурацию приложения через переменные окружения. Главная идея — вынести чувствительные данные и параметры конфигурации из кода, чтобы не захламлять репозиторий и сделать конфигурацию переносимой.
Определение в двух словах: файл .env хранит секреты и настройки в формате KEY=VALUE, которые затем загружаются в среду выполнения.
Важно: сам по себе .env — просто удобный файл для локальной разработки. В продакшене лучше использовать управляемые хранилища секретов (Vault, AWS Secrets Manager, Azure Key Vault и т.п.).
Формат и примеры
Стандартный формат прост:
- Каждая строка — переменная в формате KEY=VALUE.
- Комментарии начинаются с #.
- Пробелы вокруг знака = обычно не рекомендуются.
Пример .env:
APP_PASSWORD=idStringSecret
DB_HOST=localhost
DB_PORT=5432
NODE_ENV=developmentСоветы по формату:
- Используйте заглавные буквы и подчеркивания для ключей.
- Не заключайте значения в кавычки, если не требуется; при необходимости используйте двойные кавычки и экранируйте символы.
Как работает чтение .env
Язык сам по себе не загружает .env. Библиотека читает файл, парсит пары ключ/значение и помещает их в окружение процесса (на уровне process.env, os.environ или аналогичных). После этого приложение получает доступ к значениям через стандартные API работы с окружением.
Как читать .env в Python
Требуемые библиотеки: встроенный модуль os и сторонний пакет python-dotenv.
Установка:
pip install python-dotenvСоздайте файл .env в корне проекта, например:
APP_PASSWORD=idStringSecret
PYTHON_VERSION=3.9.7Код для загрузки и чтения:
from dotenv import load_dotenv
import os
# Загружаем .env из корня проекта
load_dotenv('.env')
# Получаем переменные из окружения
password = os.environ.get('APP_PASSWORD')
python_version = os.environ.get('PYTHON_VERSION')
print(password) # idStringSecret
print(python_version) # 3.9.7Примечание: load_dotenv() без аргументов попробует найти .env автоматически в текущей и родительских директориях.
Как читать .env в Node.js (Express)
Установка библиотеки dotenv:
npm install dotenv --saveСоздайте .env:
APP_PASSWORD=idStringSecret
NODE_VERSION=v14.17.5В коде приложения (например, в начале server.js или app.js) подключите и инициализируйте dotenv:
const dotenv = require('dotenv');
dotenv.config();
const password = process.env.APP_PASSWORD;
const nodeVersion = process.env.NODE_VERSION;
console.log(password); // idStringSecret
console.log(nodeVersion); // v14.17.5Важно загружать dotenv до использования process.env и до создания серверных подключений, если конфигурация на неё опирается.
Как читать .env в Go
В Go часто используют пакет github.com/joho/godotenv.
Установка:
go get github.com/joho/godotenvПример .env:
APP_PASSWORD=idStringSecret
GO_VERSION=go1.17.5Код для загрузки и чтения:
package main
import (
"fmt"
"os"
"github.com/joho/godotenv"
)
func main() {
// Загружаем .env
godotenv.Load(".env")
// Читаем переменные из окружения
password := os.Getenv("APP_PASSWORD")
goVersion := os.Getenv("GO_VERSION")
fmt.Println(password) // idStringSecret
fmt.Println(goVersion) // go1.17.5
}godotenv.Load вернёт ошибку, если файл не найден; в продакшене обычно проверяют результат и ведут лог.
Лучшие практики безопасности
- Добавьте .env в .gitignore: так вы не запушите секреты в публичный репозиторий.
- Используйте разные .env для development, staging и production.
- В продакшене храните секреты в менеджере секретов, а не в файлах на диске.
- Отключайте чтение .env в контейнере/CI: используйте переменные окружения платформы (Docker secrets, GitHub Actions secrets, Kubernetes Secrets).
- Минимизируйте привилегии: не храните long-lived root-токены в .env.
Пример строки .gitignore:
# secrets
.envКогда .env не подходит (контрпримеры)
- Командная инфраструктура и контейнеры в production: лучше использовать секреты платформы (например, Kubernetes Secrets), а не файлы .env внутри контейнера.
- Совместная разработка высокого уровня безопасности: централизованное управление секретами предпочтительнее.
- Динамическая конфигурация, обновляемая на лету: .env изменяется вручную и не подходит для динамического ротации ключей.
Альтернативные подходы
- Менеджеры секретов (HashiCorp Vault, AWS Secrets Manager, Azure Key Vault).
- Переменные окружения, установленные системой/CI (без файлов .env).
- Docker secrets и Kubernetes Secrets для контейнерных развёртываний.
Ментальные модели и эвристики
- Правило трёх сред: dev, staging, prod — держите отдельные конфигурации.
- «Нет секретов в VCS»: всё, что позволяет доступ посторонних — убрать из репозитория.
- «Файл .env для человека, менеджер секретов для машины»: используйте .env для локальной разработки и менеджеры — в проде.
Факт-бокс
- Формат: KEY=VALUE
- Используется в: локальная разработка, простые проекты
- Не предназначен для: хранения production-секретов без дополнительной защиты
Контроль качества: чек-лист перед деплоем
- .env не закоммичен в репозиторий
- В продакшене используются секреты платформы
- Токены имеют ограниченные права
- Планы ротации секретов задокументированы
Шаблон процесса (мини-SOP)
- В разработке: храните локальные значения в .env
- Добавьте .env в .gitignore
- Для CI/CD задавайте секреты через интерфейс CI
- Для prod используйте менеджер секретов и интеграцию с платформой
- Периодически проводите ротацию ключей и обновляйте зависимости
Критерии приёмки
- Приложение корректно загружает конфигурацию из окружения
- .env отсутствует в публичном репозитории
- В продакшене не используется .env как единственный источник секретов
Часто задаваемые вопросы
Q: Можно ли хранить .env в зашифрованном виде в репозитории?
A: Да, существуют инструменты (git-crypt, SOPS), но это добавляет сложность; обычно проще использовать менеджеры секретов.
Q: Нужно ли исключать .env.sample?
A: .env.example или .env.sample полезны: они содержат шаблон ключей без настоящих значений и помогают новым разработчикам.
Q: Надо ли логировать значения из .env?
A: Никогда не логируйте секреты (только отсутствие/наличие переменной).
Короткое резюме
Файл .env — удобный инструмент для управления конфигурацией в локальной разработке. Для чтения используются специализированные библиотеки: python-dotenv для Python, dotenv для Node/Express и godotenv для Go. Не храните реальные секреты в публичном VCS и переходите на менеджеры секретов в продакшене.
Important: .env ускоряет локальную разработку, но не заменяет надёжную систему управления секретами для production.
Похожие материалы
RDP: полный гид по настройке и безопасности
Android как клавиатура и трекпад для Windows
Советы и приёмы для работы с PDF
Calibration в Lightroom Classic: как и когда использовать
Отключить Siri Suggestions на iPhone