Как подключить Supabase к n8n: Полное руководство по интеграции
Подключение Supabase, open-source альтернативы Firebase, к n8n, инструменту для автоматизации рабочих процессов, создает мощный дуэт для разработки и автоматизации. Эта интеграция позволяет автоматически манипулировать данными в вашей базе данных PostgreSQL, обрабатывать аутентификацию пользователей, управлять файлами в хранилище и реагировать на изменения в реальном времени через триггеры n8n, используя возможности Supabase. Процесс включает в себя настройку проекта в Supabase, получение ключей API и конфигурацию узлов (нод) в n8n. Ниже представлено детальное, пошаговое руководство.
Предварительные требования и настройка проекта Supabase
Перед началом интеграции необходимо иметь активные учетные записи в Supabase и n8n. n8n можно использовать как локально (self-hosted), так и в облачной версии.
Шаг 1: Создание проекта в Supabase
- Войдите в панель управления Supabase и нажмите «New project».
- Заполните детали: имя проекта, пароль для базы данных, выберите регион.
- После создания проекта вы будете перенаправлены на дашборд проекта.
- Project URL: Находится в разделе Settings > API. Имеет вид `https://xxxxxxxxxxxx.supabase.co`.
- API Keys (Anon и Service Role): В том же разделе. `anon public` ключ используется для операций от имени клиента, а `service_role` ключ (секретный) — для операций с повышенными привилегиями (только в безопасных условиях, например, в бэкенде).
- Database Connection String (JDBC/URI): Для прямого подключения к базе данных через узел PostgreSQL n8n. Находится в Settings > Database. Используйте строку подключения с паролем.
- Добавьте узел Supabase в ваш workflow.
- Нажмите «Create New Credentials» и выберите тип «Supabase API».
- Заполните поля:
- Host: Ваш Project URL (например, https://xxxx.supabase.co).
- Service Role Key: Ваш секретный ключ `service_role`. Для операций только на чтение можно использовать `anon public` ключ, но для записи с отключенным RLS часто требуется `service_role`.
- Ресурс:
Row - Операция:
Create - Table Name:
tasks - В поле «Data to Send» укажите JSON, например:
{"title": "Новая задача из n8n", "status": "new"} - Выполните узел. Если успешно, в выводе получите созданную строку с полем
id. - Добавьте узел PostgreSQL в workflow.
- Создайте новые учетные данные типа «PostgreSQL».
- Заполните поля, используя данные из раздела Settings > Database в Supabase:
- Host: Хост из строки подключения (например, `db.xxxx.supabase.co`).
- Database: `postgres`.
- User: `postgres`.
- Password: Пароль, заданный при создании проекта.
- Port: `5432`.
- SSL: Включите и используйте режим `require`.
- Узел Webhook (n8n): Настройте на прием POST-запроса. Скопируйте уникальный URL вебхука.
- Узел Supabase: Настройте на операцию «Create» (ресурс Row). Укажите таблицу `submissions`. В «Data to Send» используйте JSON, маппинг поля из входящего вебхука:
{"email": "{{$json["email"]}}", "message": "{{$json["message"]}}"}. - Соедините узлы. При отправке POST на URL вебхука в n8n, данные будут автоматически записаны в Supabase.
- Узел Schedule: Настройте триггер (например, каждые 10 минут).
- Узел Supabase (первый): Операция «Get Many» (ресурс Row). Укажите таблицу `tasks`. В фильтре (Filter) укажите: `status=eq.new`. Это использует синтаксис PostgREST.
- Узел Code или любой процессор: Выполните необходимую бизнес-логику.
- Узел Supabase (второй): Операция «Update» (ресурс Row). Укажите таблицу `tasks`. В «Row ID» укажите
{{$json["id"]}}. В «Data to Send» укажите{"status": "processed", "processed_at": "{{ 'now' | date('iso-8601') }}"}. - В n8n создайте узел Webhook и скопируйте его URL.
- В Supabase перейдите в Database > Webhooks. Создайте новый вебхук.
- Настройте его:
- Таблица: `tasks`
- События: INSERT, UPDATE
- URL вебхука: Вставьте URL из n8n.
- Укажите заголовки, если требуется.
- Теперь при любом изменении в таблице `tasks` Supabase отправит полезную нагрузку (payload) в n8n, где вы сможете ее обработать и запустить последующие действия.
column_name=eq.value— равенство.column_name=gt.100— больше чем.status=in.(new,pending)— одно из значений.and=(column1.eq.value1,column2.gt.value2)— логическое И.- Limit: Количество строк на странице.
- Offset: Номер строки, с которой начать.
- Order By: Обязательно укажите колонку для сортировки, иначе пагинация будет непредсказуемой. Например: `created_at.asc`.
- Используйте Database Webhooks Supabase, как описано в Workflow 3.
- Настройте в n8n узел Schedule, который будет часто опрашивать таблицу на наличие новых или измененных записей (используя поле `updated_at`).
- Используйте сторонние сервисы, которые преобразуют Realtime-подписки Supabase в вебхуки.
Шаг 2: Получение ключей API и конфигурационных данных
Для подключения n8n к Supabase необходимы следующие данные из настроек проекта:
Шаг 3: Подготовка данных в Supabase
Создайте таблицу для тестирования интеграции. Перейдите в раздел Table Editor и создайте новую таблицу, например, `tasks` с колонками: `id` (bigint, первичный ключ), `title` (text), `status` (text), `created_at` (timestamp с time zone). Включите Row Level Security (RLS) по необходимости.
Настройка узлов Supabase и PostgreSQL в n8n
n8n предлагает два основных способа работы с Supabase: через нативный узел Supabase (удобен для использования REST API) и через узел PostgreSQL (для прямых SQL-запросов).
Метод 1: Использование нативного узла Supabase
Узел Supabase в n8n предоставляет интерфейс для работы с REST API Supabase.
Конфигурация учетных данных:
Операции с узлом Supabase:
После настройки учетных данных выберите ресурс и операцию.
| Ресурс | Доступные операции | Описание |
|---|---|---|
| Row | Create, Delete, Get, Get Many, Update | CRUD-операции с строками в указанной таблице. Требуют ввода имени таблицы. |
| Storage File | Copy, Delete, Download, Get Many, Upload | Управление файлами в хранилище Supabase. Требуют указания имени бакета. |
| User | Create, Delete, Get, Get Many, Update | Управление пользователями аутентификации Supabase (требует ключ `service_role`). |
Пример: Создание записи (Row Create)
Метод 2: Использование узла PostgreSQL для прямого доступа к базе
Поскольку Supabase использует PostgreSQL, вы можете подключиться к базе данных напрямую через узел PostgreSQL в n8n. Это дает больше гибкости для сложных SQL-запросов.
Конфигурация учетных данных:
Пример SQL-запроса: В узле выберите операцию «Execute Query» и введите: INSERT INTO tasks(title, status) VALUES ('{{$json["task_name"]}}', 'pending') RETURNING *; Это использует выражение n8n для подстановки данных из предыдущего узла.
Создание автоматизированных рабочих процессов (Workflows)
Workflow 1: Автоматическое создание записи в Supabase при событии из другого сервиса
Цель: При получении новой заявки с формы (например, через узел Webhook) создать запись в таблице Supabase.
Workflow 2: Обработка данных и обновление записи в Supabase
Цель: Периодически (по расписанию) проверять записи в таблице `tasks` со статусом ‘new’, обрабатывать их и обновлять статус.
Workflow 3: Реагирование на изменения в базе данных Supabase с помощью вебхуков
Supabase может отправлять вебхуки при изменениях в базе данных через свою функцию `Database Webhooks`. Вы можете настроить его для вызова URL вебхука n8n.
Лучшие практики и безопасность
| Аспект | Рекомендация | Обоснование |
|---|---|---|
| Ключи API | Для workflow, запущенных на стороне сервера (бэкенд), используйте ключ `service_role` с осторожностью. Для публичных workflow, которые могут быть доступны клиенту, используйте `anon` ключ в сочетании со строгими политиками RLS. | Ключ `service_role` обходит RLS. Его компрометация может привести к полному доступу к вашей базе. Ключ `anon` безопаснее, но требует правильной настройки RLS. |
| Row Level Security (RLS) | Всегда включайте RLS на таблицах в Supabase. Создавайте политики (policies), которые точно определяют, какие операции разрешены для анонимных и аутентифицированных пользователей. | RLS — это основной механизм безопасности на уровне базы данных. Он защищает данные даже если ключ API будет скомпрометирован. |
| Хранение учетных данных | Всегда используйте встроенную систему учетных данных n8n. Не храните пароли и ключи в открытом виде в настройках узлов. Используйте переменные окружения в n8n для чувствительных данных. | Система учетных данных n8n шифрует секреты. Использование переменных окружения повышает безопасность и удобство управления. |
| Обработка ошибок | В сложных workflow добавляйте узел «Error Trigger» или настраивайте ветку «Fallback Output» в узлах для обработки сбоев соединения или запросов. | Гарантирует устойчивость workflow и предоставляет информацию об ошибках для отладки. |
Часто задаваемые вопросы (FAQ)
Вопрос 1: Какая разница между использованием узла Supabase и узла PostgreSQL в n8n для работы с Supabase?
Ответ: Узел Supabase — это обертка над REST API Supabase (PostgREST). Он удобен для стандартных CRUD-операций, работы с аутентификацией и хранилищем. Узел PostgreSQL предоставляет прямое соединение с базой данных, позволяя выполнять произвольные SQL-запросы, включая сложные JOIN, транзакции и вызовы функций. Выбор зависит от задачи: для простых операций и использования других сервисов Supabase (Auth, Storage) лучше нативный узел; для сложной SQL-логики — узел PostgreSQL.
Вопрос 2: Как правильно настроить фильтрацию при операции «Get Many» в узле Supabase?
Ответ: Фильтрация использует синтаксис операторов PostgREST. Примеры:
Документацию по всем операторам можно найти в официальной документации PostgREST.
Вопрос 3: Получаю ошибку «JWT invalid» при использовании ключа service_role. В чем проблема?
Ответ: Убедитесь, что вы используете именно Service Role Key (секретный ключ), а не anon public ключ. Ключ service_role находится в настройках API Supabase и должен быть скопирован полностью, включая префикс `ey…`. Также проверьте, что в поле «Host» в учетных данных n8n указан именно Project URL (например, https://xxx.supabase.co), а не домен базы данных.
Вопрос 4: Можно ли использовать аутентификацию пользователей Supabase в n8n?
Ответ: Да, через узел Supabase (ресурс User) вы можете создавать, обновлять и получать информацию о пользователях. Однако для аутентификации самих пользователей в вашем приложении (получение JWT-токена) обычно используется фронтенд или отдельный сервис. n8n может проверить этот токен, отправив его на эндпоинт Supabase Auth, или использовать его для выполнения операций от имени пользователя, если политики RLS это разрешают.
Вопрос 5: Как организовать пагинацию при выборке большого количества данных?
Ответ: В узле Supabase при операции «Get Many» используйте поля:
В узле PostgreSQL используйте стандартный SQL-запрос с `LIMIT` и `OFFSET`.
Вопрос 6: Как обрабатывать реальные обновления данных (realtime) из Supabase в n8n?
Ответ: Нативный узел Supabase в n8n пока не поддерживает подписку на реальные обновления (Realtime). Альтернативные решения:
Заключение
Интеграция Supabase с n8n открывает широкие возможности для автоматизации операций с базой данных, аутентификацией и файловым хранилищем. Ключ к успешной интеграции лежит в правильной настройке учетных данных, понимании различий между узлами Supabase и PostgreSQL, а также строгом соблюдении принципов безопасности, таких как использование RLS и защита ключей API. Представленные в руководстве workflow и лучшие практики служат основой для создания надежных и эффективных автоматизированных процессов, способных значительно упростить и ускорить разработку и эксплуатацию приложений.
Комментарии