Блок 5 · Урок 1 из 4

Секреты и переменные окружения

Почему ключи и пароли не пишут в коде — и что такое .env.

≈ 6 минут 🔑 безопасность, секреты 🎯 цель: понимать «вынеси в .env» и «не коммить ключ»

Зачем это вам

Агент регулярно произносит: «вынеси в .env», «не коммить ключ», «переменная окружения», «ключ утёк в репозиторий». Если не знать, что за этим стоит, легко проигнорировать — и тогда ключ от платного API (например, OpenAI или Stripe) окажется в открытом репозитории. Последствия: чужие запросы за ваш счёт или полная блокировка аккаунта. Этот урок объясняет механизм: что такое секрет, почему его прячут от кода и как именно это делается.

Механика

Секрет живёт отдельно от кода

Секрет (secret) — любые данные, дающие доступ: пароль базы данных, ключ API, токен авторизации. Главное правило: секреты не пишут прямо в коде и не кладут в репозиторий (git — система контроля версий, хранит всю историю файлов).

Причина проста: код видят люди, агент, а часто он ещё и лежит в открытом репозитории на GitHub. Если ключ написан прямо в коде — его увидит каждый, у кого есть доступ. Хуже того: даже если потом удалить строку с ключом, git хранит всю историю изменений, и из этой истории ключ так просто не стереть.

Вместо этого секреты держат в переменных окружения (environment variables) — значениях, которые задаются окружению запуска (серверу, хостингу) отдельно от кода. Локально их складывают в файл .env, который добавляют в .gitignore — список того, что git намеренно не отслеживает. Код читает ключ из окружения по имени (process.env.OPENAI_API_KEY), не зная самого значения.

📌 Простая проверка: если в коде видите строку вроде sk-...длинная строка... или password=... — это секрет прямо в коде. Агент должен был вынести его в .env.

# .env  (лежит только у вас, в .gitignore — в git не попадает)
OPENAI_API_KEY=sk-...секрет...

// в коде — без самого значения:
const key = process.env.OPENAI_API_KEY

Код берёт ключ из окружения по имени; сам секрет в коде и в репозитории не появляется.

На хостинге (сервере) секреты задают через панель управления или переменные окружения платформы — так же отдельно от кода. Вперёд к блоку 6: для разных сред (разработка / production — боевая среда) значения переменных будут разными, но имена остаются теми же.

Аналогия, которую можно пересказать

Ключ не пишут в инструкции — его держат у консьержа

Инструкция, которую раздают всем— код: его видят люди, агент, репозиторий
ПИН прямо в инструкции— секрет в коде: утечёт, доступ получат все
Связка ключей у консьержа— переменные окружения (.env): секреты отдельно от кода
Консьерж не пускает связку в общий доступ— .gitignore: файл .env не попадает в git
«Возьми ключ у консьержа»— код читает ключ из окружения, не зная значения

Сменился ключ — поменяли на связке у консьержа; инструкцию не трогаем. Именно поэтому агент говорит «отзови ключ и выпусти новый» — а не «исправь код».

Запомните одно

Секрет в коде = секрет в открытом доступе

Как только ключ попал в репозиторий — считайте, он скомпрометирован (compromised — стал известен чужим). Git хранит всю историю, и удалить строку из истории git гораздо сложнее, чем не допустить туда ключ с самого начала. Поэтому правило одно: сначала .env и .gitignore, потом код.

Что это даёт на практике

Фраза агента → что он имеет в виду

«Вынеси ключ в .env»
Убери секрет из кода в переменные окружения: создай файл .env, запиши туда ключ, а в коде обращайся к нему по имени.
«Не коммить .env»
Файл с секретами не должен попасть в git. Убедись, что .env добавлен в .gitignore.
«Добавил в .gitignore»
Сказал git намеренно игнорировать этот файл — он больше не будет попадать в коммиты.
«Ключ скомпрометирован — отзови его»
Если секрет утёк, его отзывают в панели сервиса (например, в OpenAI) и выпускают новый. Старый ключ становится недействительным.

Секрет (secret) — данные, дающие доступ: пароль, ключ API, токен.

Переменная окружения (environment variable) — значение, заданное окружению запуска отдельно от кода.

.env — локальный файл с секретами; добавляется в .gitignore, чтобы не попасть в git.

.gitignore — список файлов, которые git намеренно не отслеживает.

Проверьте себя

Четыре вопроса с мгновенной проверкой

1. Что такое секрет в контексте веб-разработки?

2. Почему нельзя писать ключ API прямо в коде?

3. Что такое переменная окружения?

4. Агент говорит: «вынеси в .env и добавь в .gitignore». Это значит…

Куда мы идём

Программа курса — 7 блоков