Переменные окружения и секреты
Главное решение платформы: секреты приложения живут на машине клиента, а не в панели.
Панель передаёт их агенту по защищённому каналу в момент создания или изменения, а хранит только
отпечаток (sha256). Поэтому утечка базы панели не раскрывает ни один токен.
Где что лежит
| Данные | Где хранятся | Права |
|---|---|---|
| секреты приложения (токены, пароли, строки подключения) | на вашей машине, вне панели | закрыты для посторонних |
| манифест приложения (имя, репозиторий, ветка, тип сборки) | на вашей машине | доступен только root |
| отпечаток секрета | база панели | — |
Как задать секреты
Секреты задаются в карточке приложения в панели: панель отправляет их агенту, агент записывает файл и подставляет переменные в окружение контейнеров. Формат — пары «имя=значение», по одной на строку.
DATABASE_URL=postgres://user:password@db:5432/app
APP_KEY=base64:случайная-строка
SMTP_PASSWORD=пароль-от-почты
Правила, которые стоит соблюдать
- Не коммитьте секреты в репозиторий. Даже приватный репозиторий читают CI, коллеги и вы сами через год — токен всё равно утечёт.
- Один секрет — одно место. Если значение меняется в панели, не дублируйте его в compose-файле: иначе получится «какой из двух настоящий».
- Ротируйте токены. При смене значения в панели агент перезаписывает файл и перезапускает приложение — старый токен перестаёт действовать.
- Смотрите, что печатаете. В журналах приложения значения переменных маскируются, но
print(env)в собственном коде — самый частый способ утечь самому.
Проверка
Убедиться, что секреты дошли, можно в карточке приложения: панель показывает список имён (без значений) и время последнего обновления.
Значения в панели не показываются никогда — если токен потерян, его нужно заменить новым.