Гид по технологиям

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

5 min read Программирование Обновлено 31 Dec 2025
Файл .env: как использовать в Python, Express и Go
Файл .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)

  1. В разработке: храните локальные значения в .env
  2. Добавьте .env в .gitignore
  3. Для CI/CD задавайте секреты через интерфейс CI
  4. Для prod используйте менеджер секретов и интеграцию с платформой
  5. Периодически проводите ротацию ключей и обновляйте зависимости

Критерии приёмки

  • Приложение корректно загружает конфигурацию из окружения
  • .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.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

RDP: полный гид по настройке и безопасности
Инфраструктура

RDP: полный гид по настройке и безопасности

Android как клавиатура и трекпад для Windows
Гайды

Android как клавиатура и трекпад для Windows

Советы и приёмы для работы с PDF
Документы

Советы и приёмы для работы с PDF

Calibration в Lightroom Classic: как и когда использовать
Фото

Calibration в Lightroom Classic: как и когда использовать

Отключить Siri Suggestions на iPhone
iOS

Отключить Siri Suggestions на iPhone

Рисование таблиц в Microsoft Word — руководство
Office

Рисование таблиц в Microsoft Word — руководство