DevOps и Docker 15 мин чтения 2026-10-01

Свой бэкенд на VDS вместо Firebase и Supabase: развертывание PocketBase v0.40.4 в Docker Compose с Nginx Reverse Proxy, автопродлением SSL и бэкапами

Практическое руководство по развертыванию легковесного бэкенда PocketBase v0.40.4 на VDS в Docker Compose: архитектура Go + SQLite в режиме WAL, Nginx Reverse Proxy с поддержкой SSE, автопродление SSL Let's Encrypt, тюнинг лимитов открытых файлов, защита админки и резервное копирование базы.

Инженерная редакция SysKit Проверено инженерами SysKit.ru

📌 Статус актуальности и стек:

Руководство протестировано и актуально для PocketBase v0.40.4 (последний стабильный релиз от сентября 2026 года), операционной системы Ubuntu 24.04 LTS и Docker Compose v2. Все конфигурации, директивы Nginx и параметры безопасности сверены с официальной документацией.

Разработка бэкенда для современных пет-проектов, Telegram-ботов, мобильных приложений и клиентских MVP часто превращается в инженерный оверинжиниринг. Вместо быстрой проверки бизнес-гипотезы разработчик тратит несколько дней на развертывание PostgreSQL или MySQL, настройку Redis, выбор ORM, реализацию JWT-авторизации, валидацию схем и написание десятков однотипных CRUD-контроллеров. Если развернуть популярный self-hosted комбайн вроде Supabase, сервер мгновенно загружается десятком контейнеров (Postgres, GoTrue, PostgREST, Kong, Realtime), требуя от 3–4 ГБ оперативной памяти и регулярно падая по OOM Killer на доступных виртуальных серверах.

Альтернатива в виде облачного Google Firebase несет серьезные риски: жесткая привязка к проприетарной инфраструктуре, проблемы с оплатой зарубежными картами и риск внезапной блокировки аккаунта. Идеальным инженерным выходом стало использование PocketBase v0.40.4 — открытого автономного бэкенда (Backend-as-a-Service), который поставляется в виде одного скомпилированного бинарника на Go со встроенной СУБД SQLite и потребляет всего 15–30 МБ оперативной памяти.

1. Зачем разработчикам и сисадминам свой PocketBase: отказ от Firebase и Supabase

PocketBase объединяет все базовые потребности веб-сервиса в одном процессе: встроенную реляционную базу данных, готовую веб-панель администратора, автоматическую генерацию REST API, подписки в реальном времени (Realtime SSE), управление пользователями с OAuth2 и безопасное файловое хранилище.

Критерий Google Firebase Self-hosted Supabase PocketBase v0.40.4 на VDS
Архитектура Проприетарное облако Google NoSQL Стек из 10–14 Docker-контейнеров 1 бинарный файл / 1 легкий контейнер
Потребление RAM Облачные ресурсы Google От 2.5 до 4 ГБ RAM в простое Всего 15–30 МБ RAM
Стоимость сервера Оплата в валюте, растет с трафиком VDS от 4 ГБ RAM (от 1 200 ₽/мес) VDS 1 vCPU / 1 ГБ RAM (от 200 ₽/мес)
Сложность бэкапа Экспорт через консоль Google Cloud Сложный дамп PostgreSQL + S3 Копирование папки pb_data или 1 клик в UI
Встроенная админка Консоль Firebase Supabase Studio (Next.js) Легковесная веб-панель на Svelte

2. 5 прикладных сценариев применения: боты, MVP, реестры и сбор заявок

Для системных администраторов, вебмастеров и фулстек-разработчиков PocketBase становится универсальным швейцарским ножом инфраструктуры:

  • 1. Бэкенд и админка для Telegram-ботов: При создании чат-ботов на Python (aiogram) или Node.js заказчику всегда требуется панель для просмотра поступивших заказов, изменения статусов заявок и редактирования каталога. Бот обращается к PocketBase через обычные HTTP-запросы, а заказчик получает готовую адаптивную веб-панель без единой строчки фронтенд-кода.
  • 2. Сверхбыстрый запуск MVP мобильных приложений и SPA: Разработчикам на React, Vue, Svelte или Flutter достаточно подключить официальный клиентский SDK (pocketbase-js или pocketbase-dart). Авторизация пользователей, фильтрация данных и загрузка аватарок работают прямо из коробки с клиентской стороны без необходимости писать серверный API.
  • 3. Внутренний реестр IT-активов и инвентаризация: Вместо громоздких систем (GLPI, Jira) системный администратор за 15 минут создает таблицы для учета серверов VDS, лицензий, доменов, дат окончания SSL-сертификатов и оборудования с разграничением прав для сотрудников.
  • 4. Централизованный сбор лидов с десятков сайтов: Все посадочные страницы и формы обратной связи отправляют заявки на единый защищенный эндпоинт PocketBase. Заявки надежно сохраняются в базе, не теряются при сбоях почтовых серверов и мгновенно дублируются в Telegram.
  • 5. Чат техподдержки и дашборды в реальном времени: Благодаря встроенным Realtime-подпискам (Server-Sent Events) любые изменения в базе мгновенно отображаются в интерфейсе оператора без необходимости настраивать WebSockets и брокеры сообщений.

💡 Совет инженера:

В PocketBase все права доступа к данным настраиваются через декларативные правила (API Rules) прямо в веб-интерфейсе. Например, правило @request.auth.id != "" && user = @request.auth.id гарантирует, что пользователь сможет просматривать и редактировать исключительно свои собственные записи, полностью исключая уязвимости типа IDOR.

3. Архитектура PocketBase v0.40.4: Go, SQLite в режиме WAL и потребление 25 МБ RAM

Секрет высокой производительности и низкого потребления ресурсов PocketBase v0.40.4 кроется в его архитектуре. Сервер написан на компилируемом языке Go с использованием оптимизированного HTTP-маршрутизатора и встроенной СУБД SQLite.

В отличие от связок с внешними СУБД (PostgreSQL / MySQL), где каждый запрос проходит через сетевой TCP-сокет, сериализацию и парсинг протокола, PocketBase обращается к SQLite напрямую в памяти процесса. По умолчанию база данных функционирует в режиме WAL (Write-Ahead Logging). Важно различать два ключевых показателя производительности, подтвержденных официальными бенчмарками PocketBase:

  • Одновременные Realtime-соединения (Concurrent Connections): На базовом одноядерном виртуальном сервере PocketBase способен удерживать более 10 000 одновременных SSE-подписок при минимальном расходе памяти (~100–150 МБ).
  • Пропускная способность запросов (RPS / QPS): Для простых операций чтения из базы система обеспечивает 5 000–7 000 запросов в секунду (RPS) при среднем времени отклика менее 10 мс. Разумеется, реальная производительность зависит от сложности фильтров, индексов и скорости дисковой подсистемы.

Важно учитывать архитектурную особенность: несмотря на использование SQLite в режиме WAL, PocketBase применяет собственный механизм мьютекса на уровне приложения. Записи в базу выполняются последовательно (одна за другой), а операции чтения могут кратковременно ожидать завершения активной транзакции записи. Это означает, что для сценариев с интенсивной непрерывной записью (write-heavy) пропускная способность будет ниже, чем для преимущественного чтения (read-heavy). Если в вашем проекте планируются тысячи параллельных вставок в секунду, обязательно проводите предварительное нагрузочное тестирование.

4. Требования к серверу VDS и сайзинг дисковой подсистемы NVMe

Поскольку PocketBase чрезвычайно экономичен по оперативной памяти, ключевым фактором производительности становится скорость операций ввода-вывода (IOPS) дисковой подсистемы:

  • Процессор (vCPU): 1 виртуальное ядро с частотой от 3.0 ГГц обеспечивает комфортную работу для большинства ботов и пет-проектов. Для высоконагруженных API рекомендуется 2 vCPU.
  • Оперативная память (RAM): 1 ГБ RAM достаточно для работы PocketBase (25–50 МБ), Nginx (30 МБ), системных служб Ubuntu и дискового кэша.
  • Диск (NVMe): Настоятельно рекомендуются быстрые NVMe-накопители. SQLite в режиме WAL активно сбрасывает страницы журнала на диск, поэтому скорость NVMe критична для времени отклика при записи.
  • Запас дискового пространства: Для безопасного выполнения бэкапов требуется запас свободного места в размере как минимум 2x от текущего объема директории pb_data.
  • Сетевой интерфейс: Статический публичный IPv4-адрес для выпуска SSL-сертификатов Let's Encrypt через Certbot.

5. Надежные VDS-провайдеры для размещения продакшен-бэкенда

Для стабильной работы базы данных SQLite критически важно выбирать хостинг-провайдеров с честной KVM-виртуализацией без оверселлинга дисковых ресурсов:

Рекомендуемые VDS-провайдеры

Отказоустойчивые сервера с быстрыми NVMe и каналом до 1 Гбит/с

Выбор редакции
⚡

Timeweb Cloud — Быстрые NVMe VDS

Высокочастотные процессоры 3.3+ ГГц для мгновенной обработки запросов SQLite, быстрые NVMe-накопители и безлимитный сетевой канал 1 Гбит/с.

Конфигурация
1 vCPU 3.3 ГГц • 1 ГБ RAM • 15 ГБ NVMe • Трафик без лимита
Премиум Tier III
🔷

Selectel — Надежные облачные серверы

Отказоустойчивая инфраструктура в сертифицированных дата-центрах Tier III, гарантированные ресурсы vCPU и удобное управление сетью.

Конфигурация
2 vCPU • 2 ГБ RAM • 30 ГБ NVMe • Дата-центры Tier III
Простота и стабильность
🟠

Beget — Простота для веб-разработчиков

Мгновенное развертывание Docker в 1 клик, интуитивная панель управления сервером, бесплатные автоматические бэкапы и отзывчивая поддержка 24/7.

Конфигурация
1 vCPU • 1 ГБ RAM • 15 ГБ NVMe • Бесплатные бэкапы

6. Манифест Docker Compose: монтирование pb_data, лимиты CPU/RAM и изоляция портов

Для развертывания PocketBase создадим изолированную директорию /opt/pocketbase на сервере Ubuntu 24.04 LTS. Все данные приложения (база SQLite, файлы хранилища и журнал транзакций) будут сохраняться в подкаталоге pb_data, что обеспечивает сохранность информации при любых обновлениях контейнера.

# Создание рабочей директории и каталога данных
sudo mkdir -p /opt/pocketbase/pb_data
cd /opt/pocketbase

Важный нюанс Docker-образов: Разработчик PocketBase принципиально не публикует собственный официальный образ в Docker Hub, оставляя право сборки за администратором. В официальной документации предлагается минимальный Dockerfile на базе легковесного Alpine Linux. Создадим файл /opt/pocketbase/Dockerfile:

FROM alpine:latest

ARG PB_VERSION=0.40.4

RUN apk add --no-cache unzip ca-certificates wget

ADD https://github.com/pocketbase/pocketbase/releases/download/v${PB_VERSION}/pocketbase_${PB_VERSION}_linux_amd64.zip /tmp/pb.zip
RUN unzip /tmp/pb.zip -d /pb/ && rm /tmp/pb.zip

EXPOSE 8090

CMD ["/pb/pocketbase", "serve", "--http=0.0.0.0:8090", "--dir=/pb/pb_data"]

Сгенерируем надежный 32-символьный шестнадцатеричный ключ шифрования для защиты чувствительных настроек PocketBase (паролей SMTP, токенов OAuth2 и ключей S3):

openssl rand -hex 16

⚠️ Важное предупреждение:

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

Создадим манифест docker-compose.yml. Вы можете собирать образ локально из созданного Dockerfile либо использовать проверенный независимый образ сообщества (ghcr.io/muchobien/pocketbase:v0.40.4):

services:
  pocketbase:
    build: .
    # Альтернатива без локальной сборки:
    # image: ghcr.io/muchobien/pocketbase:v0.40.4
    container_name: pocketbase
    restart: unless-stopped
    mem_limit: 512m
    cpus: 1.0
    # Альтернатива для совместимости со Swarm:
    # deploy:
    #   resources:
    #     limits:
    #       cpus: '1.0'
    #       memory: 512M
    ports:
      - "127.0.0.1:8090:8090"
    volumes:
      - ./pb_data:/pb/pb_data
    environment:
      - TZ=Europe/Moscow
      - GOMEMLIMIT=450MiB
      - PB_ENCRYPTION_KEY=ВАШ_СГЕНЕРИРОВАННЫЙ_32_СИМВОЛЬНЫЙ_КЛЮЧ
    ulimits:
      nofile:
        soft: 65535
        hard: 65535
    healthcheck:
      test: ["CMD-SHELL", "wget --no-verbose --tries=1 --spider http://127.0.0.1:8090/api/health || exit 1"]
      interval: 10s
      timeout: 5s
      retries: 3
      start_period: 5s

Соберем образ и запустим сервис в фоновом режиме:

sudo docker compose build
sudo docker compose up -d
sudo docker compose ps
sudo docker compose logs -f

7. Настройка Nginx Reverse Proxy: проксирование SSE, буферизация и автопродление SSL

Для публикации API на собственном домене (например, api.example.com) и организации безопасного шифрованного канала настроим Nginx в качестве обратного прокси-сервера.

Чтобы избежать ошибки «курицы и яйца» (когда Nginx отказывается стартовать из-за отсутствия еще не выпущенных файлов SSL), сначала создадим базовый виртуальный хост на 80 порту /etc/nginx/sites-available/pocketbase.conf:

server {
    listen 80;
    server_name api.example.com;

    location / {
        proxy_pass http://127.0.0.1:8090;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

Активируем конфигурацию и выполним проверку синтаксиса:

sudo ln -s /etc/nginx/sites-available/pocketbase.conf /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

Выпустим доверенный SSL-сертификат Let's Encrypt с автоматической настройкой 301-редиректа на HTTPS:

sudo certbot --nginx -d api.example.com --redirect

После выпуска сертификата приведем файл /etc/nginx/sites-available/pocketbase.conf к финальному продакшен-виду, настроенному для долгоживущих соединений Server-Sent Events (SSE):

server {
    listen 80;
    server_name api.example.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    server_name api.example.com;

    ssl_certificate /etc/letsencrypt/live/api.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/api.example.com/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

    client_max_body_size 50M;

    location / {
        proxy_pass http://127.0.0.1:8090;
        proxy_http_version 1.1;

        # Настройки для Realtime Server-Sent Events (SSE)
        proxy_set_header Connection '';
        proxy_read_timeout 360s;
        proxy_buffering off;
        proxy_cache off;
        chunked_transfer_encoding off;

        # Передача реального IP клиента
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

💡 Почему в Nginx используется proxy_set_header Connection '':

По умолчанию модуль Nginx ngx_http_proxy_module принудительно выставляет заголовок Connection: close, разрывая TCP-сокет после каждого ответа. Директива proxy_set_header Connection ''; в паре с proxy_http_version 1.1; — это официальная рекомендация Nginx и документации PocketBase для очистки заголовка и включения постоянного keepalive-соединения между Nginx и PocketBase, что критически необходимо для работы потока Server-Sent Events.

Нюанс работы за Cloudflare: Если вы используете Cloudflare в режиме проксирования (оранжевое облако), бесплатный тариф принудительно разрывает любые неактивные HTTP/SSE-соединения через 100 секунд. Это приводит к периодическому разрыву подписок в браузере. Для решения проблемы настройте периодическую отправку keep-alive ping на клиенте либо переключите запись поддомена API в режим DNS-only (серое облако).

Применим обновленные параметры веб-сервера:

sudo nginx -t
sudo systemctl reload nginx

8. Харденинг безопасности: Rate Limiting, защита суперпользователей по IP и MFA

Создадим первого суперпользователя системы через встроенную консольную утилиту:

sudo docker compose exec pocketbase /pb/pocketbase superuser create admin@example.com MyStrongMasterPassword123

После входа в веб-интерфейс (https://api.example.com/_/) обязательно выполните следующие настройки безопасности:

  • Настройка Trusted Proxy для встроенного Rate Limiter: В разделе Settings > Application настройте доверенные заголовки прокси (X-Real-IP, X-Forwarded-For) и укажите IP-адрес проксирующего хоста (127.0.0.1 или локальную подсеть Docker). Без этой настройки PocketBase будет видеть все входящие запросы как исходящие с одного IP 127.0.0.1, и встроенный Rate Limiter заблокирует весь входящий трафик при первом же всплеске активности.
  • Белый список IP-адресов для суперпользователей: Начиная с версии v0.38.0, PocketBase поддерживает ограничение доступа к админке по доверенным IP или CIDR-подсетям (Settings > Application > Superuser IPs). Задать или сбросить белый список можно через CLI:
    # Ограничить доступ к админке только локалхостом и вашим статическим рабочим IP
    sudo docker compose exec pocketbase /pb/pocketbase superuser ips 127.0.0.1 203.0.113.45
  • Встроенная двухфакторная аутентификация (MFA/OTP): Начиная с v0.38+, _superusers является полноценной auth-коллекцией. В настройках коллекции в веб-интерфейсе можно включить двухфакторную аутентификацию (MFA) с отправкой одноразового пароля (Email OTP) при каждой попытке входа. Настройте SMTP-сервер в Settings > Mail settings. В случае сбоя доставки почты вы всегда можете сгенерировать экстренный OTP-код прямо в терминале сервера:
    sudo docker compose exec pocketbase /pb/pocketbase superuser otp admin@example.com

9. Резервное копирование SQLite в режиме WAL без повреждения данных

Поскольку PocketBase использует SQLite в режиме Write-Ahead Logging (WAL), текущие транзакции временно записываются в файлы data.db-wal и data.db-shm. Если просто скопировать файл data.db обычной командой cp во время активной записи, полученная копия может оказаться поврежденной.

Для надежного создания резервных копий существует три проверенных инженерных подхода:

1. Встроенная система бэкапов PocketBase (Рекомендуется)

Начиная с версии v0.16+, PocketBase включает встроенный механизм автоматического создания бэкапов без остановки приложения. Система выполняет операцию PRAGMA wal_checkpoint(TRUNCATE), фиксирует все незавершенные транзакции и упаковывает базу данных вместе со всеми пользовательскими файлами из каталога pb_data/storage/ в единый ZIP-архив.

Настроить автоматическое расписание можно прямо в веб-интерфейсе: Settings > Backups. Укажите стандартное cron-выражение (например, 0 3 * * * для запуска каждую ночь в 03:00) и количество хранимых копий (например, 7). Бэкапы можно сохранять локально либо автоматически выгружать в отдельный S3-бакет.

Также создать бэкап можно через API с токеном суперпользователя:

curl -X POST 'https://api.example.com/api/backups'   -H 'Authorization: Bearer ВАШ_ТОКЕН_СУПЕРПОЛЬЗОВАТЕЛЯ'   -H 'Content-Type: application/json'   -d '{"name": "manual_backup.zip"}'

⚠️ Важное требование к дисковому пространству:

Во время создания ZIP-архива временно расходуется дисковое пространство. Перед настройкой автоматических бэкапов убедитесь, что на сервере свободно как минимум в 2 раза больше места, чем текущий объем каталога pb_data.

2. Создание снимка базы на лету через sqlite3 .backup

Если вам требуется снять моментальный дамп только самой базы данных без остановки контейнера и без упаковки тяжелых медиафайлов, используйте встроенную команду SQLite:

sudo sqlite3 /opt/pocketbase/pb_data/data.db ".backup '/backup/pocketbase/data_$(date +%F).db'"

3. Внешний скрипт бэкапа с паузой контейнера и алертом в Telegram

Для создания полного внешнего архива всей папки pb_data (база, логи, файлы) с гарантированной атомарностью используйте скрипт с кратковременной паузой контейнера:

#!/usr/bin/env bash
set -euo pipefail

BACKUP_DIR="/backup/pocketbase"
APP_DIR="/opt/pocketbase"
DATE=$(date +%Y-%m-%d_%H-%M-%S)
ARCHIVE="$BACKUP_DIR/pb_backup_$DATE.tar.gz"

mkdir -p "$BACKUP_DIR"
cd "$APP_DIR"

# Гарантированное возобновление работы контейнера при любых сбоях
trap 'sudo docker compose unpause pocketbase >/dev/null 2>&1 || true' EXIT INT TERM

echo "[$(date)] Приостановка контейнера для консистентного снапшота..."
sudo docker compose pause pocketbase

echo "[$(date)] Создание архива данных pb_data..."
sudo tar -czf "$ARCHIVE" -C "$APP_DIR" pb_data

sudo docker compose unpause pocketbase
trap - EXIT INT TERM

echo "[$(date)] Резервная копия успешно создана: $ARCHIVE"

# Ротация: удаление копий старше 7 дней
find "$BACKUP_DIR" -type f -name "pb_backup_*.tar.gz" -mtime +7 -delete

# Уведомление в Telegram
TELEGRAM_BOT_TOKEN="ВАШ_ТОКЕН_БОТА"
TELEGRAM_CHAT_ID="ВАШ_CHAT_ID"

if [ -n "$TELEGRAM_BOT_TOKEN" ] && [ "$TELEGRAM_BOT_TOKEN" != "ВАШ_ТОКЕН_БОТА" ]; then
    MESSAGE="✅ Резервная копия PocketBase создана:
Файл: $(basename "$ARCHIVE")
Размер: $(du -h "$ARCHIVE" | cut -f1)
Сервер: $(hostname)"
    curl -s -X POST "https://api.telegram.org/bot$TELEGRAM_BOT_TOKEN/sendMessage"         -d "chat_id=$TELEGRAM_CHAT_ID"         --data-urlencode "text=$MESSAGE" > /dev/null || true
fi

10. Решение типичных проблем: Too many open files, ошибка 413 и блокировка по Rate Limit

В процессе промышленной эксплуатации PocketBase администраторы могут столкнуться со следующими характерными ситуациями:

  • Ошибка «Too many open files» при росте Realtime-клиентов: Каждое активное Server-Sent Events соединение удерживает открытый сокет. Помимо настройки блока ulimits: nofile в Docker Compose, убедитесь, что лимиты не ограничены на уровне самой операционной системы хоста. Проверьте текущий лимит командой ulimit -n. Если PocketBase запускается в виде классической службы systemd, добавьте в секцию [Service] строку LimitNOFILE=65535.
  • Процесс аварийно завершается во время нагрузочного теста (OOM): На серверах с 1 ГБ RAM сборщик мусора Go может не успевать освобождать память при резком наплыве параллельных запросов, из-за чего ядро Linux активирует OOM Killer. Убедитесь, что в переменных окружения контейнера задана директива GOMEMLIMIT=450MiB, и проверьте системный журнал командой dmesg | grep -i oom.
  • Ошибка 413 Request Entity Too Large: Nginx по умолчанию запрещает передачу файлов крупнее 1 МБ. Убедитесь, что в блоке server задана директива client_max_body_size 50M; (или больше под задачи вашего хранилища), и выполните sudo nginx -s reload.
  • Логи и мониторинг доступности: PocketBase сохраняет внутренние системные логи в файле pb_data/logs.db. В разделе Settings > Logs настройте срок хранения логов (параметр maxDays: 7). Для мониторинга доступности сервиса внешними чекерами используйте встроенный эндпоинт /api/health, который возвращает статус 200 OK при нормальной работе приложения и доступности базы SQLite.

Разверните собственный бэкенд PocketBase на быстром NVMe VDS

Запустите готовый API и базу данных за 10 минут на надежных облачных серверах с гарантированными ресурсами, высокой частотой процессора и безлимитным трафиком.

Вопросы и ответы (FAQ)

Популярные вопросы вебмастеров и сисадминов по данной теме

Выдержит ли встроенная база SQLite в PocketBase v0.40.4 реальную нагрузку?
Да, благодаря режиму Write-Ahead Logging (WAL) операции чтения выполняются параллельно с записью без блокировки таблиц. Согласно бенчмаркам, PocketBase v0.40.4 способен выдавать 5 000–7 000 запросов в секунду (RPS) на чтение и удерживать свыше 10 000 одновременных Realtime SSE-соединений на базовом сервере. Этого более чем достаточно для подавляющего большинства проектов, ботов и мобильных приложений.
Чем PocketBase v0.40.4 отличается от старых версий (v0.22)?
В актуальных версиях v0.38–v0.40.4 проведена масштабная модернизация безопасности и архитектуры: концепция администраторов заменена на единую системную коллекцию _superusers, добавлено ограничение доступа к админке по белым спискам IP-адресов, введена встроенная двухфакторная аутентификация (MFA/OTP), оптимизирован движок миграций и обновлен встроенный Rate Limiter.
Можно ли использовать PocketBase для нескольких сайтов на одном сервере?
Да, вы можете развернуть PocketBase на отдельном поддомене (например, api.mysite.com), а фронтенд-приложения или боты разместить на других доменах или серверах. В панели управления PocketBase (Settings > Application > CORS) достаточно указать доверенные домены для разрешения междоменных запросов (CORS).

Читайте также в блоге SysKit

Смежные руководства и полезные технические статьи