Механика
Секрет живёт отдельно от кода
Секрет (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 — боевая среда) значения переменных будут разными, но имена остаются теми же.