Разработка 4 мин чтения

PocketBase: свой бэкенд в одном файле для бота и мини-приложения

PocketBase это бэкенд на Go в одном файле: SQLite, вход пользователей, права, файлы, панель и подписки в реальном времени. Для бота, мини-приложения или внутренней CRM на малой и средней нагрузке. Разбираем, как он ставится, что с правами и бэкапами и почему он не для банка.

бэкендPocketBaseмини-приложенияopen source
Коротко. PocketBase это бэкенд на Go в одном исполняемом файле размером около 12 МБ: база SQLite, вход пользователей, хранение файлов, панель администратора, API и подписки в реальном времени. Лицензия MIT, проект с июля 2022 года. Подходит для бота, мини-приложения, внутренней CRM и MVP при малой и средней нагрузке. Версия пока 0.40, один человек пишет почти весь код, масштабируется только на один сервер. Бэкапы и закрытие админки от посторонних настраиваем мы.
Нужно мини-приложение для вашего бизнеса?

Сделаю под ключ: разберу задачу, назову срок и цену. Чтобы начать, напишите в Telegram одной фразой.

Обсудить бэкенд для бота и мини-приложения

Бэкенд, который считают отдельным проектом

Заказчик приходит с идеей. Бот записывает клиентов, мини-приложение показывает личный кабинет, менеджер хочет видеть заявки в таблице и менять статусы. Для этого нужно место, где всё лежит, вход пользователей, права, загрузка фото и экран для менеджера. Обычно это два месяца серверной разработки или чужой сервис вроде Firebase и Supabase, где счёт растёт вместе с числом пользователей и запросов. Тарифы я не сверял.

Есть вариант скромнее: готовый бэкенд, который ставится одним файлом на ваш сервер. Про PocketBase я увидел пост в канале GitHub Community 14 октября и проверил проект по репозиторию, документации и файлу лицензии. Сам PocketBase для этой статьи я не запускал, всё ниже написано по документации.

Что это и насколько проект живой

Репозиторий pocketbase/pocketbase создан 5 июля 2022 года. На 15 октября у него около 61 400 звёзд и 3 700 форков. В файле LICENSE лежит MIT, и README прямо разрешает даже продавать его как сервис. Последний релиз v0.40.5 вышел 8 октября, последний коммит от 14 октября. С середины августа выпущено семь релизов линеек 0.39 и 0.40.

Людей за проектом меньше, чем кажется. На GitHub указаны 44 участника, но у главного автора около 2 500 коммитов, у следующего пять. Все 18 коммитов за последний месяц сделал он же. В FAQ написано, что за проектом нет компании и платной команды, а обещаний по сопровождению и поддержке нет. README добавляет, что сторонние запросы на изменения временно закрыты из-за потока ИИ-спама.

Как ставится и как входят пользователи

Скачиваете архив под Linux, распаковываете, запускаете ./pocketbase serve. Первый запуск выдаёт ссылку на установщик, где создаётся главный администратор (суперпользователь). Рядом появляются pb_data с базой и файлами и pb_migrations. Панель живёт по адресу /_/, API по адресу /api/.

Для боевого запуска документация описывает службу systemd и автоматический сертификат Let's Encrypt, если указать домен. Есть примеры настройки nginx и Caddy перед ним. Официального Docker-образа нет, в документации приведён Dockerfile на несколько строк, а данные нужно вынести в отдельный том.

Пользователи могут входить по почте и паролю, по одноразовому коду из письма и через OAuth2. В исходниках я нашёл провайдеров VK и Яндекс, FAQ называет больше пятнадцати. Можно потребовать два способа входа подряд. Telegram и MAX в списке провайдеров нет. Вход из бота или мини-приложения мы собираем своим маршрутом на JS: проверяем подпись данных мессенджера и выдаём токен. Готовой кнопки для этого нет, и эту связку я сам не прогонял.

Права доступа и расширение на JS

У каждой коллекции (таблицы) пять правил: список, просмотр, создание, изменение, удаление. По умолчанию все закрыты, доступ только у суперпользователя. Правило пишется выражением. Например, owner = @request.auth.id оставит клиенту только его записи. Правило работает ещё и как фильтр: чужие строки в списке просто не появятся. Суперпользователь правила обходит, поэтому его ключ в бот не кладут.

Подписки в реальном времени идут по SSE и проверяются теми же правилами. Менеджер открывает панель заказов, и новая заявка появляется на экране сама.

Свою логику добавляют хуками в папке pb_hooks: события вроде создания записи, свои маршруты, расписание через cronAdd, запросы наружу через $http.send. Облачных функций как у Firebase нет. Встроенный JS не Node: fetch, fs и часть npm-пакетов там не работают, поддерживаются только модули CommonJS. Если не хватает, проект собирается как Go-приложение и тоже остаётся одним файлом.

Что важно учесть

Версия 0.40.5, полная обратная совместимость до 1.0 не обещана. Документация прямо пишет, что проект пока не рекомендуется для критичных приложений, если вы не готовы читать список изменений и время от времени править миграции вручную. Поэтому обновления мы ставим на копии, а не автоматически.

Масштабирование только вертикальное, на одном сервере. База SQLite в режиме WAL читается параллельно, а запись идёт по одной. Для бота на тысячи клиентов этого хватает. Для банка, платёжного ядра и сервиса с тысячами записей в секунду не подходит. Автор пишет, что выдерживает больше 10 000 постоянных подключений на VPS за 4 доллара. Я это не проверял. Репликации из коробки нет, FAQ советует сторонний Litestream. Встроенного импорта и экспорта данных тоже нет.

Бэкап лежит на нас. В панели есть бэкапы в zip, на диск или в S3, и расписание в формате cron с числом хранимых копий. Для данных от 5 ГБ документация советует другую схему. Копию мы считаем рабочей только после восстановления на другой машине.

Админку закрываем. Документация рекомендует белый список адресов для суперпользователей (с версии 0.38), код из письма при входе администратора, ограничитель запросов и настоящий SMTP вместо стандартной отправки. Панель за прокси мы не отдаём наружу целиком.

Что можно сделать уже сейчас

Первое. Опишите данные бота или мини-приложения в таблицах: кто клиент, что он заказывает, кто менеджер. Это час на бумаге.

Второе. Прикиньте записи. Сто заказов в день для SQLite обычная работа. Если ждёте на порядки больше, обсудим другой вариант, например Supabase на своём сервере или Directus поверх SQL-базы.

Третье. Решите, кто смотрит заявки. Для менеджеров есть встроенная панель, а если нужен свой экран с кнопками и отчётами, рядом собираем админ-панель в Appsmith.

Четвёртое. Договоритесь о копиях заранее. Ночной дамп на другой сервер я описывал в материале про GoBackup. Для мини-приложения целиком у нас есть предложение под ключ, примерные цены на странице /ceny/.

Частые вопросы

Чем PocketBase отличается от Firebase и Supabase?

Его ставят на свой сервер, платить за каждого пользователя не нужно. Облачных функций нет, логика пишется хуками на JS или на Go. База только SQLite, на Postgres не переключить.

Что будет, если автор бросит проект?

Лицензия MIT, ваш бинарник продолжит работать, а данные лежат в обычном файле SQLite. Новых исправлений безопасности тогда ждать неоткуда, и нам придётся либо поддерживать форк, либо переезжать на другой бэкенд.

Подключается ли он к боту в Telegram или MAX?

Бот обращается к PocketBase по обычному HTTP, как к любому API, с токеном своей учётной записи. Пример для конкретного мессенджера я сам не собирал, поэтому проверяем на тестовом боте до запуска.

Коротко о главном

PocketBase даёт базу, вход, права, файлы и панель одним файлом на вашем сервере. Цена такого удобства: проект до версии 1.0, держится на одном авторе и растёт только вверх по мощности одной машины. Для бота, мини-приложения и внутренней CRM на малой и средней нагрузке это нормально.

Нужен свой бэкенд для бота или мини-приложения без аренды чужого сервиса? Напишите мне в Telegram кодовое слово «БЭКЕНД». Посмотрим вашу схему данных, и я скажу, хватит ли PocketBase.

Обсудим вашу задачу

Что я делаю для бизнеса

Напишите одной фразой, что нужно. Отвечу, что подойдёт, сколько займёт и сколько стоит. Сообщение уже подготовлено.

  • Боты в Telegram, MAX, VK
  • Автоматизация процессов и CRM
  • Аналитика и дашборды
  • Сайты и лендинги под ключ
Пишу о разработке, ИИ и законах для бизнеса

Разборы, кейсы и практика — без воды. Выходит регулярно, читать 3–5 минут.

Готовые решения под ключTurnkey solutionsSoluciones llave en mano交钥匙解决方案Түлхүүр гардуулах шийдэл 451 готовых IT-решений для бизнеса451 ready-made IT solutions for business451 soluciones IT listas para empresas451 个面向企业的现成 IT 解决方案Бизнест зориулсан 451 бэлэн IT шийдэл Автоматизация, боты, AI, 152-ФЗ и платформы · бесплатная консультацияAutomation, bots, AI, data privacy and platforms · free consultationAutomatización, bots, IA, privacidad de datos y plataformas · consulta gratis自动化、机器人、AI、数据合规与平台 · 免费咨询Автоматжуулалт, бот, AI, өгөгдлийн хамгаалалт ба платформ · үнэгүй зөвлөгөө Смотреть каталогView catalogVer catálogo查看目录Каталог үзэх