PocketBase: бэкенд на Go с открытым исходным кодом в одном файле

Если вы когда-нибудь уставали от необходимости управлять множеством сложных кластеров баз данных, веб-серверов, служб аутентификации и административных панелей только для того, чтобы запустить простое приложение, то вы не одиноки. Разработчики часто сталкиваются с огромными операционными издержками, просто чтобы запустить новый проект. PocketBase предлагает простое решение этой распространённой проблемы.
PocketBase — это универсальный бэкенд с открытым исходным кодом на базе Go, который выделяется на фоне других тем, что содержит все необходимые функции в 1 файле. Таким образом, разработчики могут тратить меньше времени на настройку и обслуживание, сосредоточившись на создании удобного пользовательского интерфейса.
PocketBase предоставляет полноценное хранилище данных, систему управления пользователями и гибкий API. Цель состоит в том, чтобы обеспечить выполнение стандартных требований, таких как операции CRUD, аутентификация, загрузка файлов и автоматический TLS, прямо из коробки.
Что такое PocketBase?
PocketBase — это инновационное серверное решение с открытым исходным кодом, написанное на GO. Оно объединяет все необходимое для современного приложения в одном переносимом файле.
В этом одном файле собрано всё, что вам нужно: встроенная база данных (SQLite) с подписками в реальном времени, встроенное управление аутентификацией, удобный интерфейс панели администратора и простой REST-подобный API.
С помощью PocketBase вы можете создавать автономные приложения, которые полностью работают на одном сервере без необходимости устанавливать что-либо дополнительно.
Что делает PocketBase уникальным? Преимущество единого файла
PocketBase работает на Go и представляет собой полнофункциональный стек, разработанный для упрощения эксплуатации. Такой подход позволяет развернуть полноценный бэкенд без необходимости управлять множеством отдельных контейнеров или сервисов.
Встроенная база данных SQLite
PocketBase включает встроенную базу данных под названием SQLite. Она использует SQLite в режиме упреждающего журналирования (Write-Ahead Logging, WAL). Эта конкретная конфигурация часто превосходит традиционные системы баз данных, такие как MySQL, MariaDB или PostgreSQL, особенно при выполнении операций чтения.
Вы также получаете выгоду от подписок в реальном времени, то есть клиенты получают мгновенные обновления при изменении данных.
Бесшовная аутентификация и управление пользователями
Платформа имеет встроенную систему аутентификации и управления пользователями. Её веб-API полностью не сохраняют состояние, а токены не хранятся в базе данных.
PocketBase поддерживает множество различных способов входа пользователей в систему:
- Традиционные методы: Пользователи могут проходить аутентификацию с помощью паролей или одноразовых паролей (OTP). Использование OTP в качестве единственного метода сопряжено с рисками для безопасности, поэтому для критически важных приложений рекомендуется сочетать его с другими методами, такими как многофакторная аутентификация (MFA).
- Вход через социальные сети (OAuth2): PocketBase поддерживает более 15+ провайдеров OAuth2, включая таких гигантов, как Apple, Google, Facebook, Microsoft, GitHub и GitLab.
Для контроля доступа вы настраиваете правила API для своих коллекций. Эти правила служат как для контроля доступа, так и для фильтрации данных.
Вы можете указать, требуется ли для выполнения действия статус суперпользователя, разрешено ли оно всем или только тем пользователям, которые соответствуют определённому выражению фильтра, например status = "active". Суперпользователи могут получить доступ ко всему, поскольку правила API их игнорируют.
Сценарии использования и расширяемость PocketBase
PocketBase — отличный выбор для небольших и средних приложений, включая серверные части мобильных API, внутренние интрасети или решения SaaS.
Масштабирование и развертывание
PocketBase только для самостоятельного размещения. Вы устанавливаете его, загружая и запуская на своем сервере предварительно собранный исполняемый файл, например ./pocketbase serve,
Вы можете использовать стандартных провайдеров VPS, таких как Hetzner, Vultr или Linode. Система даже поддерживает автоматический TLS с использованием Let’s Encrypt, если вы указываете доменное имя при запуске.
Хотя PocketBase масштабируется только по вертикали (на одном сервере), его производительность впечатляет. Даже без оптимизации он легко справляется с более чем 10 000 постоянных подключений в реальном времени на относительно недорогих виртуальных частных серверах.
Запуск пользовательской бизнес-логики
PocketBase не использует облачные функции, такие как Firebase или Supabase. Вместо этого разработчики используют его как фреймворк/набор инструментов на Go или JavaScript. Вы компилируете свою пользовательскую логику непосредственно в исполняемый файл бэкенда, что обеспечивает переносимость приложения.
- Расширение Go: Разработчикам, знакомым с Go, следует выбрать этот путь. API-интерфейсы Go лучше документированы и предоставляют широкие возможности для интеграции с любыми сторонними библиотеками Go.
- Расширение JavaScript: Если вам нужно написать меньше пользовательского кода и вы хотите быстрее приступить к работе, вам подойдёт встроенный движок JavaScript. Он выступает в качестве оболочки для существующих API-интерфейсов Go. Этот вариант позволяет быстро протестировать возможности и перейти на Go, если вы столкнётесь с проблемой.
С помощью любого из этих языков вы можете регистрировать пользовательские маршруты API, привязываться к хукам событий для перехвата действий (например, изменять статус новой записи на «ожидает») или регистрировать пользовательские консольные команды.
Управление файлами
PocketBase включает встроенное хранилище файлов. По умолчанию файлы хранятся локально в pb_data/storage каталоге. Если у вас мало места на диске, вы можете переключиться на внешнее хранилище, совместимое с S3, например AWS S3 или MinIO.
Вы можете настроить поля для файлов, чтобы управлять файлами для записей. Для безопасности файлы сохраняются со случайным суффиксом.
Вы также можете пометить поля файлов как Защищённые на панели управления. Для доступа к Защищённым файлам требуется краткосрочный токен файла, а запрос на доступ должен соответствовать правилу View API для коллекции.
Важные моменты перед использованием PocketBase
PocketBase обладает огромным потенциалом, но следует помнить о следующих важных моментах:
- Статус разработки: PocketBase — это личный проект с открытым исходным кодом, разрабатываемый волонтерами. Он имеет намеренно ограниченную область применения. Полная обратная совместимость не гарантируется до тех пор, пока проект не достигнет версии 1.0.0. Поэтому автор не рекомендует использовать его в критически важных для производства приложениях, если вы не готовы читать журналы изменений и время от времени выполнять миграцию вручную.
- Миграция данных: В настоящее время в системе отсутствуют встроенные средства для простого импорта или экспорта данных.
- Модель поддержки: Автор перестал принимать пожертвования от частных лиц. Это помогает избежать давления и ожиданий, которые часто связаны с финансовыми взносами. Организации могут запрашивать гранты или спонсорскую помощь при условии, что они предлагают без каких-либо условий.
Установка и запуск Pocketbase в Linux
Как уже было сказано, PocketBase — это только локальное решение. Его архитектура отлично подходит для сред Linux, поскольку оно работает как единый исполняемый файл, что избавляет от необходимости устанавливать дополнительные компоненты.
Вот как можно установить и запустить PocketBase в вашей системе Linux для тестирования:
1. Установите Golang
Убедитесь, что в вашей системе Linux установлен и настроен Golang
2. Загрузите исполняемый файл PocketBase
Готовые минимальные исполняемые файлы PocketBase доступны для архитектур Linux x64 и Linux ARM64
Перейдите на страницу релизов PocketBase на GitHub и загрузите версию, подходящую для вашей архитектуры
Она также упакована для платформ macOS и Windows.
3. Запуск приложения
После загрузки и распаковки архива запустите приложение из терминала, выполнив исполняемый файл с помощью команды serve в распакованном каталоге:
./служба pocketbase
4. Первоначальная настройка и доступ
При первом запуске приложения оно автоматически генерирует ссылку на установщик, которая должна открыться в вашем браузере и позволить вам создать первоначальную учётную запись суперпользователя.
Кроме того, вы можете создать первого суперпользователя вручную через консоль с помощью ./pocketbase superuser create EMAIL PASS.
После запуска веб-сервер будет доступен локально по маршрутам по умолчанию:
http://127.0.0.1:8090/_/: Это URL-адрес панели управления для суперпользователей (пользовательский интерфейс администратора).http://127.0.0.1:8090/api/: Это конечная точка REST-подобного API.
5. Каталоги, созданные для тестирования
При запуске исполняемого файла PocketBase автоматически создает два каталога рядом с исполняемым файлом, которые важны для тестирования и разработки:
pb_data: В этом каталоге хранятся данные вашего приложения, загруженные файлы и другая постоянная информация.pb_migrations: Здесь находятся файлы миграции JavaScript (JS), которые фиксируют изменения в вашей коллекции и могут быть отправлены в репозиторий системы контроля версий.
В целях тестирования вы можете использовать встроенную панель администратора для управления своими коллекциями и данными. Затем вы можете интегрировать интерфейс своего приложения с помощью официального JavaScript SDK или Dart SDK, взаимодействуя с веб-API.
В качестве альтернативы загрузке готового исполняемого файла разработчики могут собрать статически связанный исполняемый файл непосредственно в своей системе Linux с помощью инструментов Go
Драйвер SQLite на чистом Go поддерживает множество архитектур Linux, таких как linux amd64 и linux arm64.
Часто задаваемые вопросы (FAQ)
Вопрос: Что такое PocketBase и какие услуги она предоставляет?
О: PocketBase — это бэкенд с открытым исходным кодом, который включает в себя четыре основных компонента в одном файле: встроенную базу данных SQLite с подписками в реальном времени, встроенную аутентификацию и управление пользователями, хранилище файлов, удобный интерфейс панели администратора и простой REST-подобный API.
Основная идея заключается в том, чтобы обеспечить базовую функциональность, такую как CRUD, аутентификация, загрузка файлов и автоматический TLS, чтобы вы могли сосредоточиться на пользовательском интерфейсе и конкретных требованиях к приложению
Вопрос: готова ли PocketBase к выпуску и гарантирована ли обратная совместимость?
О: Нет, не полностью. PocketBase всё ещё находится в активной разработке, и полная обратная совместимость не гарантируется до выхода версии 1.0.0. Поэтому НЕ рекомендуется использовать его в критически важных для производства приложениях, если только вы не готовы читать журнал изменений и время от времени вручную выполнять шаги по миграции.
Вопрос: для каких приложений лучше всего подходит PocketBase и как она масштабируется?
О: PocketBase — это отличный выбор для небольших и средних приложений, таких как SaaS, внутренние интранет-сети или серверные части мобильных API. Он масштабируется только вертикально (на одном сервере).
Даже без дополнительной оптимизации он может легко обслуживать более 10 000 постоянных подключений в режиме реального времени на относительно недорогих виртуальных частных серверах (VPS).
Вопрос. Поддерживает ли PocketBase другие базы данных, например PostgreSQL или MySQL?
О: Нет, не из коробки. PocketBase использует исключительно встроенную базу данных SQLite, работающую в режиме упреждающего журналирования (WAL).
Для большинства запросов SQLite в режиме WAL работает быстрее, чем традиционные базы данных, такие как MySQL, MariaDB или PostgreSQL, особенно при выполнении операций чтения.
Вопрос. Как мне написать пользовательскую бизнес-логику? Поддерживает ли она облачные функции?
О: PocketBase не поддерживает запуск облачных функций, таких как Firebase или Supabase. Вместо этого вы должны использовать его как фреймворк/набор инструментов на Go или JavaScript. Вы компилируете пользовательскую бизнес-логику для конкретного приложения непосредственно в исполняемый файл бэкенда.
Это позволяет вам регистрировать пользовательские маршруты, привязываться к хукам событий (для перехвата и изменения запросов) и регистрировать пользовательские консольные команды.
Вопрос. Как пользователи проходят аутентификацию и какие социальные сети поддерживаются?
О: Веб-API PocketBase полностью не сохраняют состояние, то есть они полагаются на действительный Authorization:YOUR_AUTH_TOKEN заголовок, а токены не хранятся в базе данных.
В настоящее время он поддерживает более 15 провайдеров OAuth2, включая Apple, Google, Facebook, Microsoft, VK, GitHub и GitLab. Для аутентификации также можно использовать пароли и одноразовые пароли (OTP).
Вопрос. Предоставляется ли хостинг и как его развернуть?
О: Нет, PocketBase только для самостоятельного размещения. Вы развертываете его как один готовый исполняемый файл (например, ./pocketbase serve) на VPS-сервере, который предлагает постоянное хранилище (например, Hetzner, Vultr или Linode).
Приложение автоматически выполняет установку первого суперпользователя. Исполняемый файл создаёт два каталога управления: pb_data (для данных и файлов приложения) и pb_migrations (для изменений схемы коллекции).
Вопрос: Как работает авторизация (контроль доступа)?
Ответ: Управление доступом осуществляется с помощью правил API для каждой коллекции и соответствует пяти конкретным действиям API (вывод списка, просмотр, создание, обновление, удаление). Ключевой особенностью является то, что эти правила также действуют как фильтры записей.
Правилам можно присвоить значение «заблокировано» (только для суперпользователей), пустую строку (доступен всем) или непустое строковое выражение фильтра (действие могут выполнять только пользователи, соответствующие фильтру). Авторизованные суперпользователи могут получить доступ ко всему, поскольку для них правила API игнорируются.
Заключение
PocketBase предлагает невероятный унифицированный подход к разработке бэкенда. Он доказывает, что простота и мощь могут сосуществовать, что делает его отличным выбором для разработчиков, которые хотят быстро запустить проект и эффективно его поддерживать.
Если вам нужен автономный бэкенд, скачайте готовый исполняемый файл PocketBase и запустите ./pocketbase serve, чтобы начать создавать свое следующее приложение уже сегодня!
Ресурсы:
Редактор: AndreyEx