Иногда в n8n возникает необходимость использовать одни и те же значения в разных сценариях.
Например, это может быть ваша личная почта для тестов. Или более интересный случай. Чтобы скачать из сообщения в Телеграме файл, надо сначала отправить запрос на адрес https://api.telegram.org/bot<API-токен-бота>
/getFile. И вот этот токен ни в коем случае нельзя прописывать напрямую. В явном виде он станет доступен любому, кто сможет взглянуть на ваш workflow. Его нужно прятать, как и любой credentials.
Как это сделать? На энтерпрайз-тарифе можно использовать вкладку Variables, но мы хотим общее решение. И здесь мы можем воспользоваться глобальными константами в самом docker, в моем случае — в docker compose.
- Объявите сначала эту константу в файле .env, например:
my_bot_token=abc123
- Создайте константу в docker-compose.yml в разделе environment таким образом (соблюдайте отступы):
environment:
...
- my_bot_token=${my_bot_token}
Она будет принимать значение из файла .env и сделает доступным его в n8n. - Подключитесь к серверу и перезапустите контейнеры:
docker compose down
docker compose up -d
Теперь вы можете обращаться к этой константе через выражение {{ $env.my_bot_token}}
.
Обратите внимание, что это выражение всегда будет показывать ошибку. Так и задумано — оно не может показывать в графическом интерфейсе своё содержимое. При этом выражение будет работать.