Безопасность · Разработка

Что такое ENV-файл: как создать, настроить и защитить от утечки секретов

Клонировали чужой проект, а он не запускается без таинственного .env? Или настраиваете своё приложение и видите в инструкции «добавьте переменные в .env»? ENV-файл — один из самых частых файлов в разработке, и при этом один из тех, с которыми проще всего случайно слить пароли и API-ключи в открытый доступ. Разбираем формат, правила оформления и то, как не допустить утечку.

Коротко: .env — текстовый файл формата «ключ=значение» для хранения паролей, API-ключей и настроек приложения отдельно от кода. Открывается любым текстовым редактором, но никогда не должен попадать в Git или публичный доступ — иначе секреты проекта утекут вместе с ним.

Опубликовано: 9 октября 2026 Редакция Loadfile Чтение 11 мин
Что такое ENV-файл: как создать, настроить и защитить от утечки секретов
Содержание
  1. Что такое файл .env и из чего он состоит
  2. Зачем нужен .env-файл разработчику
  3. Как создать и правильно оформить .env-файл
  4. Как подключить .env в код своего проекта
  5. Как защитить .env от утечки: .gitignore и доступ к файлу
  6. Передача секретов на продакшн-сервер
  7. Инструменты для работы с .env-файлами
  8. Типичные ошибки при работе с .env
  9. Частые вопросы

Что такое файл .env и из чего он состоит

.env (environment file) — это обычный текстовый файл без расширения в привычном смысле: имя файла целиком состоит из точки и буквы «env», а не из имени и расширения через точку. Внутри — построчные пары КЛЮЧ=значение: имя переменной окружения и её значение, без пробелов вокруг знака =.

# пример содержимого .env DB_HOST=localhost DB_PASSWORD=Secr3tPass! API_KEY=sk_live_51Hx9k2 DEBUG=true

Такие пары называют переменными окружения (environment variables) — значениями, которые существуют не в самом коде программы, а «вокруг» неё, в окружении, где код запускается. Файл .env — это просто удобный способ собрать такие переменные в одном месте и загрузить их при старте приложения, вместо того чтобы прописывать каждую вручную в терминале.

Открыть и отредактировать .env можно любым текстовым редактором или IDE — «Блокнотом», VS Code, Sublime Text. Специальной программы не требуется: это такой же текстовый файл, как .txt, только с устоявшимся форматом записи и именем.

Чем .env отличается от обычного текстового файла конфигурации?

Формально — ничем: это такой же текстовый файл, как config.txt или settings.ini. Разница в соглашении (конвенции), а не в технологии. Название .env и формат КЛЮЧ=значение стали негласным стандартом экосистемы разработки — библиотеки вроде dotenv ожидают именно такое имя файла и именно такой формат по умолчанию, поэтому с ним совместимы практически любые фреймворки и языки без дополнительной настройки. А главное смысловое отличие — именно в .env принято класть секреты (пароли, ключи, токены), которые не должны попадать в систему контроля версий, в отличие от обычных конфигов, которые нередко коммитят вместе с кодом.

Зачем нужен .env-файл разработчику

Три практические причины, из-за которых .env-файл стал стандартом в разработке, а не просто удобной привычкой.

Отделение секретов от кода. Методология Twelve-Factor App, которая описывает признанные практики разработки современных приложений, формулирует это как отдельный принцип: конфигурация должна храниться в окружении, а не внутри кода программы. Если пароль от базы данных «зашит» прямо в файле на Python или JavaScript, его сложно сменить без правки и повторного деплоя кода, а главное — он автоматически попадает в любое место, куда копируется этот код, включая публичный репозиторий.

Разные окружения — разные значения. У одного и того же проекта обычно есть несколько окружений: разработка (development) на компьютере программиста, тестовое (staging) для проверки перед релизом и боевое (production) для реальных пользователей. В каждом окружении — свой адрес базы данных, свои ключи внешних сервисов, свой режим отладки. Свой файл .env под каждое окружение позволяет переключаться между ними без единой правки кода приложения.

Удобство переноса и развёртывания проекта. Когда новый разработчик клонирует проект, ему не нужно разбираться, какие переменные и где прописаны внутри кода — достаточно заполнить свой .env по образцу и запустить приложение. Это ускоряет онбординг и снижает риск забыть настроить что-то важное.

Как создать и правильно оформить .env-файл

Создание .env — вопрос пары минут, но у формата есть нюансы записи значений, из-за которых переменные иногда «не читаются» приложением.

  1. Создайте новый файл в корневой папке проекта (там же, где лежит главный файл запуска) и назовите его ровно .env — с точкой в начале и без ничего после «env».
  2. Называйте переменные заглавными буквами с подчёркиванием вместо пробела — это негласный стандарт (DB_HOST, а не db host): так переменные легко отличить от обычного кода в месте использования.
  3. Пишите без пробелов вокруг знака равенства — PORT=3000, а не PORT = 3000: лишние пробелы некоторые библиотеки включают в значение переменной как часть текста, и сравнение значения потом не срабатывает.
  4. Берите значения в кавычки, если в них есть пробелы или спецсимволы — иначе часть строки после пробела может быть воспринята как отдельная переменная или потеряна при чтении файла.
  5. Сохраните файл в кодировке UTF-8 без BOM — так его корректно прочитают и редактор, и библиотека загрузки переменных на любой операционной системе.

Таблица форматов записи значений в .env

Разные типы значений в .env записываются по-разному — хотя файл всегда остаётся обычным текстом, и любое значение технически хранится как строка.

Тип значенияПример записиПодводный камень
Обычная строка без пробеловAPP_ENV=productionКавычки не нужны, но и не мешают
Строка с пробеламиAPP_NAME="My Cool App"Без кавычек значение обрежется на первом пробеле
Многострочное значение (например, приватный ключ)PRIVATE_KEY="-----BEGIN KEY-----\nMIIЕ...\n-----END KEY-----"Переносы строк нужно экранировать как \n внутри кавычек, иначе файл «ломается» на середине значения
Булево значение (да/нет)DEBUG=trueЭто строка "true", а не тип boolean — в коде её часто нужно явно сравнивать со строкой или приводить к булеву типу
ЧислоPORT=3000Тоже читается как строка — для математических операций число нужно явно преобразовать в коде
i
Файл .env — тоже обычный текстовый файл

Если после редактирования в .env вместо кириллицы или спецсимволов появляются «кракозябры» — дело в кодировке файла. Причины и починка разобраны в гайде почему текстовый файл показывает кракозябры.

Как подключить .env в код своего проекта

Сам по себе .env-файл ничего не делает — приложение не читает его автоматически, если явно не добавлена соответствующая логика. На практике это почти всегда делает готовая библиотека: она открывает файл .env при старте программы, разбирает его построчно и помещает каждую пару «ключ-значение» в системное окружение процесса, откуда код затем читает переменные обычным способом (например, через process.env в Node.js или os.environ в Python).

Самая известная такая библиотека для JavaScript/Node.js — dotenv, её название и стало неофициальным синонимом самого подхода. У большинства популярных языков и фреймворков есть аналог с похожим принципом работы: библиотека подключается одной строкой в начале кода, после чего значения из .env становятся доступны как обычные переменные окружения — без изменений в остальной части программы.

i
.env.example — тоже файл-шаблон

Чтобы новый разработчик знал, какие переменные нужны проекту, в репозиторий кладут файл .env.example — тот же список ключей, но с пустыми или фиктивными значениями вместо реальных секретов. Это частный случай более общего приёма — заготовок проекта, подробнее о которых в материале шаблоны кода и boilerplate.

Как защитить .env от утечки: .gitignore и доступ к файлу

Главная угроза для .env — не сам формат файла, а то, что его легко случайно закоммитить в систему контроля версий вместе с остальным кодом проекта.

.gitignore защищает .env-файл от попадания в Git-репозиторий

  1. Добавьте .env в файл .gitignore — строку с именем файла, которая запрещает Git отслеживать и коммитить его. Сделать это нужно ДО первого коммита проекта, а не после.
  2. Никогда не публикуйте в репозитории .env.example с настоящими значениями — только названия переменных и пустые или заведомо фиктивные значения-заглушки.
  3. Ограничьте права доступа к файлу на сервере — он не должен быть доступен для чтения всем пользователям системы или, тем более, отдаваться веб-сервером по прямому запросу.

Что будет, если .env попадёт в публичный репозиторий?

!
Секреты нужно считать скомпрометированными сразу

Если .env с реальными паролями и ключами однажды попал в публичный Git-репозиторий (например, на GitHub), боты сканируют новые публичные коммиты на наличие похожих на секреты строк за считаные минуты. По рекомендации OWASP Secrets Management Cheat Sheet, в такой ситуации недостаточно просто удалить файл новым коммитом — он останется в истории Git. Единственное надёжное решение — немедленно сменить (ротировать) все скомпрометированные пароли и ключи, а уже потом вычищать историю репозитория.

Это же касается ситуации, когда проект просто скопировали архивом и переслали коллеге или заказчику: если .env оказался внутри архива со всеми остальными файлами, секреты ушли вместе с ним, даже если переписка была приватной.

Передача секретов на продакшн-сервер

Локальный .env на компьютере разработчика и секреты на боевом сервере — не всегда одно и то же, и для продакшена файл .env подходит не лучшим образом.

На многих хостингах и в CI/CD-системах секреты принято задавать не файлом, а напрямую как переменные окружения операционной системы или платформы — через панель управления хостинга, настройки CI/CD-пайплайна или команды запуска контейнера. Разница на первый взгляд незаметна: код приложения точно так же читает значение из окружения процесса, не зная, пришло оно из файла .env или было установлено платформой напрямую. Но у переменных платформы есть практическое преимущество — они не лежат статическим файлом на диске сервера, который теоретически можно случайно прочитать, скопировать с бэкапом или выгрузить при ошибке конфигурации веб-сервера.

Поэтому на практике нередко встречается такая схема: для локальной разработки используется файл .env (удобно редактировать и не нужен доступ к продакшну), а на проде те же переменные задаются средствами хостинга или CI/CD — то есть принцип (хранить конфигурацию в окружении) один и тот же, а конкретный механизм передачи для dev и для prod может различаться.

Инструменты для работы с .env-файлами

Для базовой работы с .env не нужно ничего, кроме текстового редактора, но несколько категорий инструментов упрощают жизнь на проектах покрупнее.

  • Редакторы и IDE с подсветкой синтаксиса .env — большинство современных редакторов кода (VS Code и аналоги) распознают файлы .env и подсвечивают ключи, значения и комментарии отдельными цветами, что снижает число опечаток.
  • Линтеры и валидаторы формата — отдельные расширения и утилиты проверяют файл .env на синтаксические ошибки (например, случайный пробел вокруг = или незакрытую кавычку) ещё до запуска приложения.
  • Менеджеры секретов — специализированные сервисы и хранилища, которые решают ту же задачу, что и .env, но на уровне команды и инфраструктуры: централизованное хранение, контроль доступа, журналирование, кто и когда обращался к секрету. Для небольших проектов это избыточно, но на масштабе команды из нескольких десятков человек такой подход обычно надёжнее десятков разрозненных .env-файлов на разных компьютерах.

Типичные ошибки при работе с .env

!
Файл называется «env» без точки в начале

Без ведущей точки большинство библиотек просто не найдёт файл по умолчанию — они ищут именно .env, а не env или env.txt. Проверьте показ скрытых файлов в проводнике — на Windows файлы с точкой в начале имени иногда визуально теряются среди обычных.

!
Пробелы вокруг знака равенства

Запись вида PORT = 3000 вместо PORT=3000 в части библиотек приводит к тому, что пробел становится частью значения переменной — и сравнение значения с ожидаемым в коде неожиданно не срабатывает.

!
Переменная не подхватывается кодом

Частая причина — библиотека загрузки .env подключена в коде позже того места, где переменная уже используется, либо приложение было запущено до того, как .env был создан или сохранён. Проверьте порядок подключения и перезапустите процесс после правки файла — на лету .env обычно не перечитывается.

!
Дублирующиеся переменные

Если один и тот же ключ указан в файле дважды, библиотека обычно использует либо первое, либо последнее встреченное значение (поведение зависит от конкретной реализации) — это источник трудноуловимых багов, когда код как будто читает «не то» значение.

!
Забытый .env в архиве при передаче проекта

Если копировать проект простым архивированием папки (ZIP), .env попадает в архив вместе со всем остальным, если явно не исключён. При передаче проекта третьим лицам стоит удалить .env из архива и передать его отдельно или заново настроить переменные на стороне получателя.

Частые вопросы

Что такое файл .env простыми словами?

Это текстовый файл, в котором разработчики хранят пароли, ключи и настройки приложения отдельно от основного кода — построчно, в формате «имя переменной = значение».

Чем открыть файл .env?

Любым текстовым редактором: «Блокнотом», VS Code, Sublime Text, Notepad++. Специального приложения не требуется — это обычный текстовый файл с особым форматом содержимого.

Можно ли хранить .env в Git-репозитории?

Файл с реальными значениями — нет, его нужно добавить в .gitignore. В репозиторий можно и стоит класть только .env.example — тот же список переменных, но с пустыми или фиктивными значениями.

Что делать, если .env уже попал в публичный репозиторий?

Считать все значения из него скомпрометированными и немедленно сменить (ротировать) все пароли, ключи и токены — удаление файла новым коммитом эту проблему не решает, потому что он остаётся в истории Git.

Чем .env отличается от переменных окружения на хостинге?

Суть одна и та же — хранить конфигурацию вне кода, но .env — это файл на диске, а переменные окружения хостинга или CI/CD задаются через платформу и не лежат статическим файлом, который можно случайно прочитать или скопировать вместе с бэкапом.

Почему переменная из .env не читается в коде?

Чаще всего — из-за пробелов вокруг знака «=», отсутствующих кавычек у значения с пробелом, неверного порядка подключения библиотеки загрузки .env в коде или того, что процесс не был перезапущен после изменения файла.

Нужно ли экранировать спецсимволы в значениях .env?

Да: строки с пробелами лучше брать в кавычки, а переносы строк внутри одного значения (например, в приватном ключе) экранировать как \n — иначе файл может быть прочитан некорректно или не до конца.

Читайте также