🎯 Почему PocketBase идеален для блога: быстрый старт за 5 минут
PocketBase — это opensource-бэкенд на Go, который работает как единый бинарный файл. 🗄️ SQLite, 🔌 REST API, 🔐 авторизация и 🖥️ административная панель — всё в одном файле размером 10 МБ. Для блога это означает: ⚡ нулевая конфигурация, 🚀 мгновенный запуск и забыть про серверные проблемы.
В этом руководстве вы узнаете: как установить PocketBase, создать коллекцию posts, настроить API и подключить к Astro для SSR-рендеринга. 📝 Пошаговый туториал с примерами кода.
⚙️ Архитектура PocketBase: Go, SQLite и REST API в одном бинарнике
PocketBase сочетает в себе компоненты, которые обычно требуют отдельной настройки:
| Компонент | Технология | Зачем нужен |
|---|---|---|
| 🖥️ Сервер | Go | Высокая производительность, компиляция в один бинарник |
| 🗄️ База данных | SQLite | Файл pb_data/ без отдельного сервера |
| 🔌 API | REST | Автоматическая генерация CRUD-эндпоинтов |
| ⚙️ Админка | Встроенная | Веб-интерфейс для управления данными |
| 🔐 Авторизация | Встроенная | Email/password, OAuth2, MFA |
⚠️ Важно!!!
PocketBase — это аналог Firebase, но полностью self-hosted. 🚫 Никаких внешних зависимостей, никаких платных тарифов за $5 в месяц — просто запускайте и используйте.
🔧 Установка PocketBase на Linux, macOS и Windows за 2 минуты
Установка PocketBase занимает 2 команды:
# 🐧 Linux/macOS
wget https://github.com/pocketbase/pocketbase/releases/latest/download/pocketbase_linux_amd64.zip
unzip pocketbase_linux_amd64.zip
./pocketbase serve
# 🪟 Windows
# Скачайте .exe с GitHub и запустите
pocketbase.exe serve
💻 Административная панель доступна на http://localhost:8090/_/ — это встроенный UI для управления коллекциями. Первый запуск предложит создать суперадмина.
📁 Создание коллекции posts: структура данных для блога
В админке PocketBase:
- ⚙️ Нажмите New collection
- 📝 Введите имя
posts - 🔧 Добавьте поля:
| Поле | Тип | Описание |
|---|---|---|
title | Text | 📝 Заголовок поста (обязательное) |
slug | Text | 🔗 URL-идентификатор (уникальный) |
description | Text | 📋 Краткое описание (до 160 символов) |
content | Editor | 📄 HTML/Markdown содержимое |
image | File | 🖼️ Обложка поста (аватар) |
tags | JSON | 🏷️ Массив тегов |
category | Select | INTERCEPT или DECRYPT |
status | Select | published / draft |
pubDate | Date | 📅 Дата публикации |
🔌 REST API: автоматическая генерация эндпоинтов для блога
PocketBase автоматически создаёт полный CRUD API для каждой коллекции:
# 📥 Получение списка постов
GET /api/collections/posts/records
# 📄 Получение одного поста
GET /api/collections/posts/records/{id}
# ➕ Создание поста
POST /api/collections/posts/records
# ✏️ Обновление поста
PATCH /api/collections/posts/records/{id}
# 🗑️ Удаление поста
DELETE /api/collections/posts/records/{id}
🔍 Фильтрация, сортировка и пагинация работают через query-параметры:
GET /api/collections/posts/records?
page=1&perPage=10&
filter=status="published"&
sort=-pubDate
🔒 Права доступа: настройка безопасности данных блога
PocketBase использует систему прав на уровне записей. Для блога рекомендуется:
- ✅ listRule:
""— публичный доступ для чтения - ✅ viewRule:
""— публичный доступ для чтения - 🔒 createRule:
"@request.auth.id != ''"— только авторизованные пользователи - 🔒 updateRule:
"@request.auth.id != ''"— только авторизованные пользователи - 🔒 deleteRule:
"@request.auth.id != ''"— только авторизованные пользователи
⚠️ Важно!!!
🔐 Всегда настраивайте правила доступа перед запуском на продакшен. По умолчанию PocketBase разрешает полный доступ всем пользователям — это критическая уязвимость!
💾 Хранение файлов: изображения постов в PocketBase
PocketBase автоматически обрабатывает загрузку файлов. 📁 Изображения хранятся в pb_data/storage/ с уникальными именами. Доступ по URL:
/api/files/{collectionId}/{recordId}/{filename}
🖼️ Поддерживаются миниатюры: ?thumb=100x100, ?thumb=300x300, ?thumb=600x400.
🚀 Запуск на продакшен: VPS и реверс-прокси
Для запуска PocketBase на VPS:
# 1️⃣ Скопируйте бинарник на сервер
scp pocketbase user@server:/opt/pocketbase/
# 2️⃣ Создайте systemd-сервис
sudo systemctl enable pocketbase
sudo systemctl start pocketbase
# 3️⃣ Реверс-прокси через nginx
server {
listen 443 ssl;
server_name api.redib.ru;
location / {
proxy_pass http://127.0.0.1:8090;
}
}
⚠️ Важно!!!
💰 На $5 VPS (1 CPU, 1GB RAM) PocketBase обрабатывает ~50k запросов в секунду без каких-либо проблем. SQLite-база данных автоматически бэкапится вpb_data/backup/.
🏆 Вывод
- ✅ Установка за 2 минуты
- ✅ Нулевая конфигурация
- ✅ Встроенный REST API
- ✅ Авторизация и административная панель
- 💰 Экономит часы настройки сервера
🔗 Ссылки:
