Встановлення PocketBase на VPS — це ефективний спосіб розгорнути потужну, легковагову та багатофункціональну бекенд-платформу, що пропонує базу даних SQLite, API, автентифікацію та панель адміністратора в одному компактному бінарному файлі, що дозволяє повністю контролювати інфраструктуру та оптимізувати витрати.
У світі розробки веб-додатків та мобільних сервісів швидкість виходу на ринок та гнучкість інфраструктури відіграють ключову роль. Розробники постійно шукають рішення, які дозволяють швидко створювати прототипи, MVP (Minimum Viable Products) і навіть повноцінні продукти без необхідності глибоко занурюватися в налаштування складної серверної частини. Саме тут на сцену виходить PocketBase – унікальний проєкт, який змінює уявлення про те, яким може бути бекенд.
PocketBase – це не просто база даних чи фреймворк; це повноцінний бекенд-сервер з відкритим вихідним кодом, написаний на Go, який включає в себе вбудовану базу даних SQLite, RESTful API, систему автентифікації користувачів і навіть зручну адміністративну панель. Все це упаковано в один-єдиний бінарний файл, що робить його неймовірно простим у розгортанні та управлінні. Для проєктів, яким потрібна швидка розробка, низькі операційні витрати та повний контроль над даними, встановлення PocketBase на свій власний VPS стає ідеальним рішенням.
У цій статті ми детально розглянемо, як розгорнути PocketBase на віртуальному приватному сервері (VPS), використовуючи Docker та Docker Compose для максимальної гнучкості та простоти. Ми пройдемося по системних вимогах, покроковому встановленню, налаштуванню зворотного проксі з HTTPS, стратегіям резервного копіювання та оновлення, а також дамо рекомендації щодо вибору оптимальної конфігурації VPS для різних сценаріїв навантаження. Якщо ви шукаєте спосіб отримати потужний та керований бекенд без зайвих складнощів, ця стаття — ваш путівник.
Що таке PocketBase і чому його варто розгорнути на VPS?
PocketBase є унікальним бекенд-рішенням, яке об'єднує в собі кілька критично важливих компонентів для розробки сучасних додатків. Це не просто база даних чи API-сервер; це цілісна платформа, розроблена для максимальної простоти та продуктивності.
Ключові особливості PocketBase
PocketBase виділяється на тлі інших BaaS (Backend as a Service) рішень завдяки своєму мінімалістичному, але потужному підходу:
- Вбудована база даних SQLite: Основою PocketBase є SQLite, що робить його неймовірно легким і не вимагає окремого розгортання складної СУБД. Це ідеально для проєктів, де не потрібна масштабованість рівня PostgreSQL або MySQL на кілька десятків тисяч запитів на секунду, але важлива простота та швидкість.
- RESTful API та GraphQL API: Автоматично генеровані API для всіх ваших колекцій даних. Ви можете відразу ж починати взаємодіяти з бекендом зі свого фронтенду, використовуючи стандартні HTTP-методи. Підтримка GraphQL також доступна через плагіни або кастомну логіку.
- Система автентифікації: Вбудована підтримка автентифікації користувачів за email/паролем, OAuth2 провайдерам (Google, GitHub тощо) та анонімним користувачам. Управління правами доступу до даних здійснюється через гнучкі правила.
- Панель адміністратора: Зручний та інтуїтивно зрозумілий веб-інтерфейс для управління колекціями даних, користувачами, файлами та налаштуваннями. Це дозволяє швидко створювати та модифікувати структуру даних без написання коду.
- Файлове сховище: Вбудована можливість завантаження та зберігання файлів, з підтримкою як локального диска, так і інтеграції з S3-сумісними сховищами.
- Realtime-підписки: Підтримка WebSocket для отримання оновлень даних у реальному часі, що ідеально підходить для чатів, сповіщень або динамічних користувацьких інтерфейсів.
- Один бінарний файл: Весь PocketBase скомпільовано в один виконуваний файл, що спрощує розгортання та управління залежностями.
- Розширюваність на Go: Для більш складних сценаріїв можна писати кастомну логіку на Go, розширюючи функціональність PocketBase.
Сценарії використання PocketBase
Завдяки своїм особливостям, PocketBase ідеально підходить для широкого кола завдань:
- Прототипи та MVP: Швидке створення бекенду для тестування ідей, коли немає часу на складну інфраструктуру.
- Невеликі та середні веб-додатки: Ідеально підходить для блогів, інтернет-магазинів з невеликим асортиментом, корпоративних порталів, лендингів з формами зворотного зв'язку.
- Адміністративні панелі та внутрішні інструменти: Швидке створення внутрішніх інструментів для управління контентом, даними або користувачами.
- Бекенд для статичних сайтів: Додавання динамічного контенту, форм та користувацьких даних до сайтів, побудованих на генераторах статики (Next.js, Astro, Jekyll тощо).
- Мобільні додатки: Надання готового API та системи автентифікації для iOS та Android додатків.
- Персональні проєкти: Відмінний вибір для хобі-проєктів, які вимагають надійного, але простого бекенду.
Чому VPS — найкращий вибір для PocketBase?
Вибір VPS (Virtual Private Server) для розгортання PocketBase має низку незаперечних переваг, особливо для тих, хто шукає баланс між контролем, продуктивністю та вартістю:
- Повний контроль над оточенням: На відміну від BaaS-провайдерів, які обмежують вас своїми правилами та інструментами, на VPS ви отримуєте повний root-доступ. Це дозволяє встановлювати будь-яке ПЗ, налаштовувати фаєрвол, вибирати операційну систему та оптимізувати всі параметри під свої потреби. Це критично важливо для PocketBase self-hosted, де ви хочете мати повний контроль над даними та їх обробкою.
- Оптимізація продуктивності: Ви можете вибрати саме ті апаратні ресурси (CPU, RAM, NVMe-диск), які відповідають вимогам вашого додатку. Для PocketBase, який дуже ефективний, це означає можливість отримати відмінну продуктивність навіть на скромних конфігураціях VPS.
- Економічна ефективність: Для багатьох проєктів хостинг PocketBase на VPS виявляється значно дешевшим, ніж використання комерційних BaaS-рішень, особливо в міру зростання проєкту та збільшення обсягу даних або кількості запитів. Ви платите лише за виділені вам ресурси.
- Безпека та приватність даних: Ваші дані зберігаються на вашому сервері, під вашим контролем. Це важливо для проєктів з високими вимогами до безпеки або дотримання регуляторних норм. Ви самі налаштовуєте заходи безпеки, бекапи та доступ.
- Гнучкість масштабування: У міру зростання проєкту ви можете легко масштабувати ресурси VPS, переходячи на більш потужні тарифні плани або навіть на виділені сервери, якщо навантаження стане екстремальним.
- Інтеграція з іншими сервісами: На VPS ви можете легко встановити та налаштувати інші сервіси поруч із PocketBase, наприклад, Redis для кешування, MinIO для S3-сумісного сховища, або інші інструменти моніторингу та логування.
Розгортання PocketBase на сервері, зокрема на VPS, дає розробникам свободу, контроль та економію, які необхідні для успішного запуску та розвитку проєктів.
Системні вимоги для PocketBase на сервері
PocketBase розроблений з урахуванням мінімального споживання ресурсів, що робить його ідеальним кандидатом для розгортання навіть на найскромніших VPS. Однак, як і будь-який додаток, він має певні системні вимоги, які залежать від очікуваного навантаження.
Мінімальні вимоги (для розробки, прототипів та дуже малих проєктів)
- Процесор (CPU): 1 vCore. PocketBase дуже ефективний, і для більшості завдань одного ядра буде достатньо.
- Оперативна пам'ять (RAM): 512 MB - 1 GB. Самому PocketBase потрібно небагато пам'яті, але ОС, Docker та інші фонові процеси також споживають RAM.
- Дисковий простір (Storage): 10 GB (NVMe SSD). NVMe-диски значно прискорюють операції читання/запису, що критично важливо для бази даних SQLite. 10 GB буде достатньо для ОС, Docker та початкового обсягу даних.
- Операційна система: Будь-який сучасний дистрибутив Linux (Ubuntu 20.04+, Debian 11+).
- Пропускна здатність мережі: 100 Mbps.
Такої конфігурації буде достатньо для тестування, особистих проєктів або додатків з дуже низькою відвідуваністю (до 5-10 одночасних користувачів).
Рекомендовані вимоги (для невеликих та середніх продакшн-проєктів)
- Процесор (CPU): 2 vCores. Додаткове ядро забезпечить кращу продуктивність при обробці кількох запитів одночасно та при виконанні фонових завдань.
- Оперативна пам'ять (RAM): 2 GB - 4 GB. Для продакшн-середовища, де можуть бути десятки або сотні одночасних запитів, більше RAM допоможе кешувати дані SQLite та забезпечить стабільну роботу.
- Дисковий простір (Storage): 50 GB - 100 GB (NVMe SSD). Збільшений обсяг диска дасть запас для зростання даних та зберігання файлів, а NVMe залишиться ключовим для продуктивності.
- Операційна система: Ubuntu 22.04 LTS або Debian 12. Ці дистрибутиви пропонують актуальні версії ПЗ та тривалу підтримку.
- Пропускна здатність мережі: 200 Mbps - 1 Gbps. Для активного API та realtime-оновлень, а також для передачі файлів, хороша пропускна здатність необхідна.
Ця конфігурація підійде для більшості стартапів, внутрішніх інструментів та веб-додатків з помірним навантаженням (до 100-200 одночасних користувачів).
Залежності
- Docker: Рекомендований спосіб розгортання PocketBase, оскільки він забезпечує ізоляцію, простоту управління та переносимість.
- Docker Compose: Для оркестрації контейнерів, спрощує запуск та управління PocketBase з додатковими сервісами (наприклад, зворотним проксі).
- Reverse Proxy: Nginx або Caddy для обробки HTTPS-сертифікатів, доменних імен та балансування навантаження. Це критично важливо для продакшн-середовища.
Вибираючи VPS, завжди варто орієнтуватися на передбачуване пікове навантаження. Краще взяти тариф з невеликим запасом, ніж зіткнутися з проблемами продуктивності на старті.
Шукаєте надійний сервер для ваших проєктів?
VPS від $10/міс та виділені сервери від $9/міс з NVMe, DDoS-захистом та підтримкою 24/7.
Дивитися пропозиції →Підготовка VPS до встановлення PocketBase
Перш ніж приступити до встановлення PocketBase, необхідно виконати низку підготовчих кроків на вашому VPS. Ці кроки забезпечать безпеку, стабільність та правильну роботу вашої майбутньої платформи.
1. Підключення до VPS по SSH
Насамперед вам потрібно отримати доступ до сервера. Використовуйте SSH-клієнт (PuTTY для Windows, термінал для Linux/macOS) для підключення до вашого VPS. Вам знадобиться IP-адреса сервера, ім'я користувача (зазвичай root або користувач, створений провайдером) та пароль/SSH-ключ.
ssh user@your_vps_ip_address
Якщо ви використовуєте root-користувача, рекомендується створити нового користувача з обмеженими правами для повсякденної роботи та налаштувати SSH-ключі для безпечного входу. Додаткову інформацію про роботу з серверами можна знайти у статті Що таке сервер і дедік: Повний посібник для початківців.
2. Оновлення системи
Завжди починайте з оновлення пакетного менеджера та встановлених пакетів, щоб переконатися в наявності останніх версій та виправлень безпеки.
sudo apt update
sudo apt upgrade -y
3. Налаштування фаєрволу (UFW)
UFW (Uncomplicated Firewall) — це простий у використанні фаєрвол для Linux. Його налаштування критично важливе для захисту вашого сервера від несанкціонованого доступу.
- Дозволити SSH:
sudo ufw allow OpenSSH
sudo ufw allow http
sudo ufw allow https
Ці порти (80 та 443) необхідні для доступу до вашого PocketBase через веб-браузер після налаштування зворотного проксі.
sudo ufw allow 8090/tcp
Порт 8090 — це порт за замовчуванням, на якому PocketBase слухає вхідні з'єднання. У продакшн-середовищі доступ до цього порту має бути закритий ззовні та доступний лише для зворотного проксі.
sudo ufw enable
Підтвердіть дію, натиснувши y. Переконайтеся, що ви не заблокували SSH-доступ.
sudo ufw status
4. Встановлення Docker
Docker — це основа для нашого розгортання. Встановимо його, дотримуючись офіційної документації.
- Видалити старі версії Docker (якщо є):
for pkg in docker.io docker-doc docker-compose docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin; do sudo apt remove $pkg; done
sudo apt install ca-certificates curl gnupg lsb-release -y
sudo mkdir -m 0755 -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
sudo usermod -aG docker $USER
newgrp docker
Вийдіть з SSH-сесії та перепідключіться, щоб зміни набули чинності.
docker run hello-world
Ви повинні побачити повідомлення "Hello from Docker!".
5. Встановлення Docker Compose
Docker Compose зазвичай встановлюється разом з Docker Engine через плагін. Якщо з якоїсь причини його немає, або ви використовуєте стару версію Docker, його можна встановити окремо.
sudo apt install docker-compose-plugin -y
Перевірити версію Docker Compose:
docker compose version
Тепер ваш VPS повністю готовий до розгортання PocketBase Docker-контейнера.
Шукаєте сервер, який просто працює?
Valebyte VPS — NVMe, підтримка 24/7, розгортання за 60 секунд.
Встановлення PocketBase на VPS за допомогою Docker Compose
Використання Docker Compose для встановлення PocketBase — це найбільш зручний та рекомендований спосіб, оскільки він дозволяє легко керувати конфігурацією, залежностями та забезпечує переносимість. Ми будемо використовувати офіційний образ PocketBase.
1. Створення робочої директорії
Створіть директорію для вашого проєкту PocketBase. У ній зберігатимуться файли конфігурації Docker Compose та дані PocketBase.
mkdir -p ~/pocketbase_app
cd ~/pocketbase_app
2. Створення файлу docker-compose.yml
Всередині цієї директорії створіть файл з ім'ям docker-compose.yml. Цей файл описуватиме, як Docker повинен запускати PocketBase.
nano docker-compose.yml
Вставте наступний вміст:
version: '3.8'
services:
pocketbase:
image: ghcr.io/pocketbase/pocketbase:latest
container_name: pocketbase
restart: unless-stopped
ports:
- "8090:8090" # PocketBase за замовчуванням слухає на порту 8090
volumes:
- ./pb_data:/pb_data # Збереження даних PocketBase
- ./pb_public:/pb_public # Для статичних файлів, якщо потрібно
- ./pb_migrations:/pb_migrations # Для міграцій, якщо потрібно
environment:
# Опціонально: можна налаштувати змінні оточення для PocketBase
# Наприклад, для налаштування SMTP для надсилання листів
# POCKETBASE_SMTP_HOST: smtp.example.com
# POCKETBASE_SMTP_PORT: 587
# POCKETBASE_SMTP_USERNAME: [email protected]
# POCKETBASE_SMTP_PASSWORD: your_password
# POCKETBASE_ADMIN_EMAIL: [email protected]
# POCKETBASE_ADMIN_PASSWORD: your_strong_password
# POCKETBASE_URL: https://yourdomain.com
command: ["./pocketbase", "serve", "--http=0.0.0.0:8090"]
# Опціонально: Якщо ви плануєте використовувати Nginx або Caddy
# як зворотний проксі в окремому контейнері,
# то його можна додати сюди. Але частіше його запускають
# на хості або в окремому docker-compose файлі.
# Приклад для Nginx (закоментовано):
# nginx:
# image: nginx:latest
# container_name: nginx_proxy
# restart: unless-stopped
# ports:
# - "80:80"
# - "443:443"
# volumes:
# - ./nginx/conf.d:/etc/nginx/conf.d
# - ./nginx/certbot/conf:/etc/letsencrypt
# - ./nginx/certbot/www:/var/www/certbot
# depends_on:
# - pocketbase
Розберемо основні частини цього файлу:
version: '3.8': Вказує версію синтаксису Docker Compose.services:: Визначає сервіси (контейнери), які будуть запущені.pocketbase:: Назва нашого сервісу.image: ghcr.io/pocketbase/pocketbase:latest: Вказує використовувати офіційний Docker-образ PocketBase.:latestозначає останню стабільну версію.container_name: pocketbase: Присвоює контейнеру читабельне ім'я.restart: unless-stopped: Контейнер автоматично перезапускатиметься, якщо він зупинився (наприклад, через помилку) або при перезавантаженні сервера, якщо тільки ви не зупинили його вручну.ports: - "8090:8090": Прокидає порт 8090 контейнера на порт 8090 хост-машини. Це дозволить вам отримати доступ до PocketBase ззовні. У продакшн-середовищі цей порт буде доступний лише для зворотного проксі.volumes:: Визначає, які директорії з хост-машини будуть змонтовані всередину контейнера../pb_data:/pb_data: Це критично важливо. Тут зберігатимуться всі дані PocketBase (база SQLite, файли завантажень). Якщо ви не використовуєте volume, дані будуть втрачені при видаленні контейнера../pb_public:/pb_public: Для статичних файлів, якщо ви хочете, щоб PocketBase їх обслуговував../pb_migrations:/pb_migrations: Для зберігання міграцій бази даних.
environment:: Дозволяє передавати змінні оточення в контейнер PocketBase. Це корисно для налаштування SMTP, URL-адреси додатку та інших параметрів.command: ["./pocketbase", "serve", "--http=0.0.0.0:8090"]: Вказує команду, яку PocketBase повинен виконати при запуску.0.0.0.0означає, що PocketBase буде слухати на всіх доступних мережевих інтерфейсах.
3. Запуск PocketBase
Збережіть файл docker-compose.yml (Ctrl+X, Y, Enter). Тепер ви можете запустити PocketBase.
docker compose up -d
up: Запускає сервіси, визначені вdocker-compose.yml.-d: Запускає сервіси у фоновому режимі (detached mode).
Docker завантажить образ PocketBase (якщо його немає локально), створить та запустить контейнер. Ви можете перевірити статус запущених контейнерів:
docker ps
Ви повинні побачити контейнер з ім'ям pocketbase та статусом Up.
4. Початкове налаштування PocketBase
Після запуску контейнера PocketBase буде доступний за адресою http://your_vps_ip_address:8090/_/ (зверніть увагу на /_/ в кінці). Відкрийте цей URL у браузері. Вам буде запропоновано створити першого адміністратора. Введіть email та надійний пароль. Це створить обліковий запис адміністратора та ініціалізує базу даних.
Тепер ваш PocketBase на VPS запущений і готовий до роботи. Наступним кроком буде налаштування зворотного проксі та HTTPS для безпечного та зручного доступу.
Налаштування Reverse Proxy та HTTPS для PocketBase
У продакшн-середовищі вкрай не рекомендується надавати прямий доступ до PocketBase за портом 8090. Замість цього слід використовувати зворотний проксі-сервер (Reverse Proxy), який прийматиме всі вхідні запити на стандартні порти (80 для HTTP та 443 для HTTPS), перенаправлятиме їх на PocketBase та керуватиме HTTPS-сертифікатами. Це підвищує безпеку, дозволяє використовувати доменні імена та спрощує масштабування. У цьому розділі ми розглянемо налаштування Nginx та Caddy.
Чому потрібен Reverse Proxy?
- HTTPS/SSL: Зворотний проксі легко інтегрується з Let's Encrypt для автоматичного отримання та оновлення безкоштовних SSL-сертифікатів, забезпечуючи безпечне шифроване з'єднання.
- Доменні імена: Дозволяє прив'язати ваш PocketBase до красивого доменного імені (наприклад,
api.yourdomain.com) замість IP-адреси та порту. - Безпека: Приховує реальний порт, на якому працює PocketBase, і може слугувати першою лінією захисту, відфільтровуючи шкідливі запити.
- Балансування навантаження: У більш складних сценаріях зворотний проксі може розподіляти запити між кількома інстансами PocketBase.
- Кешування: Деякі проксі можуть кешувати статичний контент, знижуючи навантаження на бекенд.
Перед початком переконайтеся, що ваш домен або піддомен (наприклад, pocketbase.yourdomain.com) вказує на IP-адресу вашого VPS.
Налаштування Nginx як Reverse Proxy
Nginx — це один з найпопулярніших та найпродуктивніших веб-серверів та зворотних проксі. Ми будемо використовувати його для перенаправлення трафіку на PocketBase та управління HTTPS.
1. Встановлення Nginx
sudo apt install nginx -y
sudo systemctl enable nginx
sudo systemctl start nginx
Перевірте статус Nginx:
sudo systemctl status nginx
2. Налаштування Nginx для PocketBase
Створіть новий файл конфігурації Nginx для вашого домену. Замініть pocketbase.yourdomain.com на ваш реальний домен.
sudo nano /etc/nginx/sites-available/pocketbase.conf
Вставте наступний вміст:
server {
listen 80;
server_name pocketbase.yourdomain.com; # Замініть на ваш домен
location / {
proxy_pass http://localhost:8090; # PocketBase працює на порту 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;
# Для підтримки WebSocket (Realtime API)
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
Збережіть файл.
3. Активація конфігурації Nginx
Створіть символічне посилання на файл конфігурації з sites-available до sites-enabled та видаліть дефолтну конфігурацію Nginx.
sudo ln -s /etc/nginx/sites-available/pocketbase.conf /etc/nginx/sites-enabled/
sudo rm /etc/nginx/sites-enabled/default
Перевірте синтаксис конфігурації Nginx:
sudo nginx -t
Якщо помилок немає, перезапустіть Nginx:
sudo systemctl restart nginx
Тепер ваш PocketBase має бути доступний по HTTP через ваш домен (http://pocketbase.yourdomain.com). Наступний крок — додати HTTPS.
4. Налаштування HTTPS з Certbot (Let's Encrypt)
Certbot автоматизує процес отримання та встановлення безкоштовних SSL-сертифікатів від Let's Encrypt.
- Встановлення Certbot:
sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d pocketbase.yourdomain.com
Дотримуйтесь інструкцій на екрані. Certbot автоматично налаштує Nginx для використання HTTPS та додасть правило для автоматичного поновлення сертифіката.
sudo systemctl status certbot.timer
Тепер ваш PocketBase має бути доступний по HTTPS: https://pocketbase.yourdomain.com.
Налаштування Caddy як Reverse Proxy
Caddy — це сучасний веб-сервер, який славиться своєю простотою налаштування та автоматичною підтримкою HTTPS з Let's Encrypt. Для багатьох він є простішим рішенням, ніж Nginx.
1. Встановлення Caddy
Дотримуйтесь інструкцій з офіційного сайту Caddy для встановлення. Для Debian/Ubuntu:
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install caddy -y
Запустіть Caddy:
sudo systemctl enable caddy
sudo systemctl start caddy
2. Налаштування Caddyfile для PocketBase
Caddy використовує файл Caddyfile для конфігурації. Відкрийте його для редагування:
sudo nano /etc/caddy/Caddyfile
Видаліть існуючий вміст та вставте наступне, замінивши pocketbase.yourdomain.com на ваш домен:
pocketbase.yourdomain.com {
reverse_proxy localhost:8090 {
# Для підтримки WebSocket (Realtime API)
header_up Upgrade {http.request.header.Upgrade}
header_up Connection {http.request.header.Connection}
}
# Опціонально: Збільшіть ліміти на завантаження файлів, якщо потрібно
# client_max_body_size 250M
}
Збережіть файл.
3. Перевірка та перезавантаження Caddy
sudo caddy validate --config /etc/caddy/Caddyfile
sudo systemctl reload caddy
Caddy автоматично отримає та встановить SSL-сертифікат для вашого домену. Тепер ваш PocketBase має бути доступний по HTTPS: https://pocketbase.yourdomain.com.
Ви успішно налаштували зворотний проксі та HTTPS для вашого встановлення PocketBase. Це значно підвищує безпеку та зручність використання вашого додатку.
Бекапи та оновлення PocketBase: стратегії та автоматизація
Резервне копіювання (бекапи) та регулярне оновлення — це наріжні камені будь-якої продакшн-системи. PocketBase, хоч і простий, не є винятком. Втрата даних може бути катастрофічною, а застаріле ПЗ може містити вразливості. Розглянемо ефективні стратегії для забезпечення безпеки та актуальності вашого PocketBase self-hosted встановлення.
Стратегії резервного копіювання
Основними компонентами даних PocketBase є файл бази даних SQLite (зазвичай pb_data/data.db) та директорія із завантаженими файлами (pb_data/storage). Весь каталог pb_data є критично важливим для бекапу.
1. Ручний бекап (для невеликих проєктів або перед важливими змінами)
Перед ручним бекапом рекомендується зупинити PocketBase, щоб гарантувати цілісність даних.
cd ~/pocketbase_app
docker compose stop pocketbase
Потім просто скопіюйте директорію pb_data:
cp -R pb_data pb_data_backup_$(date +%Y%m%d%H%M%S)
Після копіювання можна запустити PocketBase назад:
docker compose start pocketbase
Цей метод простий, але не підходить для регулярних автоматичних бекапів.
2. Автоматичний бекап за допомогою Cron та Docker Volume
Найкращий підхід — автоматизувати процес. Ми можемо використовувати docker cp або просто копіювати дані зі змонтованого тому.
Створення скрипта для бекапу
Створіть скрипт бекапу (наприклад, ~/pocketbase_app/backup.sh):
nano ~/pocketbase_app/backup.sh
Вставте наступний вміст:
#!/bin/bash
# Шлях до директорії PocketBase на хості
PB_APP_DIR="/root/pocketbase_app" # Вкажіть ваш шлях
PB_DATA_DIR="${PB_APP_DIR}/pb_data"
BACKUP_DIR="${PB_APP_DIR}/backups"
TIMESTAMP=$(date +%Y%m%d%H%M%S)
BACKUP_FILE="${BACKUP_DIR}/pocketbase_backup_${TIMESTAMP}.tar.gz"
LOG_FILE="${BACKUP_DIR}/backup.log"
# Створюємо директорію для бекапів, якщо її немає
mkdir -p "$BACKUP_DIR"
echo "[$TIMESTAMP] Starting PocketBase backup..." | tee -a "$LOG_FILE"
# Опціонально: Зупинити PocketBase для забезпечення консистентності (рекомендується)
# Якщо ви не хочете зупиняти, переконайтеся, що PocketBase коректно обробляє читання SQLite
# під час запису (WAL mode увімкнено за замовчуванням).
# docker compose -f "${PB_APP_DIR}/docker-compose.yml" stop pocketbase
# echo "[$TIMESTAMP] PocketBase container stopped." | tee -a "$LOG_FILE"
# Створюємо архів директорії pb_data
if tar -czf "$BACKUP_FILE" -C "$PB_DATA_DIR" .; then
echo "[$TIMESTAMP] Backup created: $BACKUP_FILE" | tee -a "$LOG_FILE"
else
echo "[$TIMESTAMP] ERROR: Failed to create backup." | tee -a "$LOG_FILE"
exit 1
fi
# Опціонально: Запустити PocketBase назад
# docker compose -f "${PB_APP_DIR}/docker-compose.yml" start pocketbase
# echo "[$TIMESTAMP] PocketBase container started." | tee -a "$LOG_FILE"
# Видалення старих бекапів (наприклад, старше 7 днів)
find "$BACKUP_DIR" -name "pocketbase_backup_*.tar.gz" -mtime +7 -delete
echo "[$TIMESTAMP] Old backups deleted." | tee -a "$LOG_FILE"
echo "[$TIMESTAMP] PocketBase backup finished." | tee -a "$LOG_FILE"
Зробіть скрипт виконуваним:
chmod +x ~/pocketbase_app/backup.sh
Налаштування Cron для автоматичного запуску
Додайте завдання до Cron для щоденного запуску скрипта (наприклад, о 3 годині ночі).
crontab -e
Додайте наступний рядок у кінець файлу:
0 3 * * * /root/pocketbase_app/backup.sh >> /root/pocketbase_app/backups/cron.log 2>&1
Це запускатиме скрипт щодня о 03:00. Логи виконання записуватимуться до cron.log.
3. Віддалене зберігання бекапів
Зберігати бекапи на тому ж сервері, що й вихідні дані, ризиковано. При втраті сервера ви втратите і дані, і бекапи. Рекомендується відправляти бекапи на віддалене сховище:
- S3-сумісне сховище: Використовуйте
aws s3 cpабоrcloneдля відправлення архівів у хмарне сховище (наприклад, AWS S3, DigitalOcean Spaces, Backblaze B2). - SCP/SFTP: Копіювання бекапів на інший сервер або NAS за захищеним протоколом.
Інтегруйте ці команди у ваш скрипт backup.sh після створення архіву.
Процес оновлення PocketBase
Оновлення PocketBase через Docker Compose — це простий процес, але завжди починайте його з бекапу!
1. Зробіть бекап
Перед будь-яким оновленням завжди робіть повний бекап даних. Це ваша страховка.
cd ~/pocketbase_app
./backup.sh # Якщо у вас є скрипт, або вручну
2. Оновлення Docker-образу
Зупиніть поточний контейнер PocketBase, завантажте новий образ та запустіть його знову.
cd ~/pocketbase_app
docker compose stop pocketbase
docker compose pull pocketbase # Завантажує останню версію образу
docker compose up -d pocketbase
Команда docker compose pull pocketbase завантажить останню версію образу PocketBase. Потім docker compose up -d pocketbase запустить контейнер з новим образом, зберігаючи всі ваші дані (завдяки змонтованому тому pb_data). PocketBase автоматично виконає необхідні міграції бази даних при першому запуску нової версії.
3. Перевірка оновлення
Після запуску переконайтеся, що PocketBase працює коректно, та перевірте версію в панелі адміністратора.
Регулярні бекапи та своєчасні оновлення — запорука стабільності та безпеки вашого PocketBase на сервері.
Шукаєте сервер, який просто працює?
Valebyte VPS — NVMe, підтримка 24/7, розгортання за 60 секунд.
Який VPS вибрати для PocketBase: конфігурації під реальне навантаження
Вибір відповідного VPS для PocketBase залежить від безлічі факторів, включаючи кількість одночасних користувачів, обсяг даних, інтенсивність операцій читання/запису, використання realtime-функцій та наявність додаткових сервісів. Оскільки PocketBase дуже ефективний, часто можна обійтися більш скромними ресурсами, ніж для традиційних бекендів.
Фактори, що впливають на вибір VPS
- Кількість одночасних користувачів: Чим більше користувачів активно взаємодіють з вашим додатком, тим більше CPU та RAM знадобиться для обробки запитів.
- Обсяг та складність даних: Великі обсяги даних у SQLite та складні запити можуть вимагати більше RAM для кешування та більш продуктивний диск.
- Використання файлового сховища: Якщо ваш додаток активно завантажує та віддає файли, це збільшить навантаження на диск та мережевий канал.
- Інтенсивність Realtime-підписок: Велика кількість активних WebSocket-з'єднань може споживати більше RAM та CPU.
- Кількість API-запитів: Висока частота запитів вимагає більше процесорного часу.
- Місцезнаходження сервера: Вибирайте VPS, розташований географічно близько до вашої основної аудиторії, щоб мінімізувати затримки (latency).
Таблиця рекомендованих конфігурацій VPS
Нижче представлена таблиця з приблизними конфігураціями VPS для різних сценаріїв навантаження. Ціни є орієнтовними та можуть сильно відрізнятися залежно від провайдера та регіону. Valebyte.com пропонує різні тарифні плани, які можуть підійти під ці вимоги.
| Навантаження | CPU (vCores) | RAM (GB) | Диск (NVMe GB) | Пропускна здатність | Орієнтовна ціна ($/міс) |
|---|---|---|---|---|---|
| Розробка/Прототип (1-5 користувачів) | 1 | 1 | 25 | 100 Mbps | 5-10 |
| Невеликий проєкт (10-50 активних користувачів) | 2 | 2 | 50 | 200 Mbps | 10-25 |
| Середній проєкт (50-200 активних користувачів) | 2-4 | 4-8 | 100-200 | 500 Mbps - 1 Gbps | 25-60 |
| Високонавантажений (200+ активних користувачів) | 4-8+ | 8-16+ | 200-500+ | 1 Gbps+ | 60+ |
Додаткові рекомендації щодо вибору VPS
- Тип диска: Завжди вибирайте VPS з NVMe SSD. Швидкість читання/запису критично важлива для SQLite, особливо при активній роботі з базою даних та файлами. Різниця в продуктивності зі звичайними SSD або HDD величезна.
- KVM віртуалізація: Бажано вибирати VPS з KVM віртуалізацією, оскільки вона забезпечує кращу ізоляцію та продуктивність у порівнянні з OpenVZ. Детальніше про це можна дізнатися у статті KVM VPS vs OpenVZ VPS у 2026: все ще актуально.
- Self-managed VPS: Оскільки PocketBase — це self-hosted рішення, ви, швидше за все, керуватимете сервером самостійно. Вибір self-managed VPS дозволить заощадити, але вимагатиме базових навичок адміністрування Linux. Для тих, хто сумнівається, варто ознайомитися з відмінностями: Self-managed vs Managed VPS у 2026: що обрати.
- Моніторинг: Після розгортання налаштуйте моніторинг вашого VPS (CPU, RAM, диск, мережа) та самого PocketBase. Це допоможе виявити вузькі місця та своєчасно масштабувати ресурси.
- Масштабування: Якщо ваш проєкт зросте до дуже високих навантажень, можливо, варто розглянути перехід на виділений сервер для максимальної продуктивності та контролю.
Починаючи з мінімальних конфігурацій, ви можете поступово збільшувати ресурси в міру зростання проєкту, оптимізуючи свої витрати на хостинг. Гнучкість VPS дозволяє це робити безболісно.
Питання безпеки та оптимізації для PocketBase self-hosted
Розгортання PocketBase self-hosted на VPS дає повний контроль, але також накладає відповідальність за безпеку та продуктивність. Правильні налаштування та практики допоможуть захистити ваш додаток та забезпечити його стабільну роботу.
Рекомендації щодо безпеки сервера
- SSH-ключі замість паролів: Завжди використовуйте SSH-ключі для доступу до сервера та відключайте автентифікацію за паролем для root-користувача. Це значно підвищує безпеку.
- Не-root користувач: Створіть окремого користувача з обмеженими правами для повсякденної роботи та використовуйте
sudoлише за необхідності. - Фаєрвол (UFW): Переконайтеся, що фаєрвол налаштований коректно та відкриті лише необхідні порти (22 для SSH, 80/443 для HTTP/HTTPS). Порт 8090 PocketBase має бути доступний лише зсередини сервера (для зворотного проксі).
- Регулярні оновлення ОС: Підтримуйте операційну систему та все встановлене ПЗ в актуальному стані, регулярно виконуючи
sudo apt update && sudo apt upgrade. - Fail2Ban: Встановіть та налаштуйте Fail2Ban для захисту від атак перебору паролів на SSH та інші сервіси.
- Складні паролі: Використовуйте складні, унікальні паролі для всіх облікових записів, особливо для адміністратора PocketBase.
Безпека PocketBase-специфічні налаштування
- Доступ до Admin UI: Переконайтеся, що Admin UI PocketBase доступний лише через HTTPS і, за можливості, обмежте доступ до нього за IP-адресами, якщо ваша команда працює з фіксованих локацій.
- Правила API: У панелі адміністратора PocketBase ретельно налаштовуйте правила доступу для кожної колекції. Визначте, хто може читати, писати, оновлювати та видаляти записи (наприклад, лише авторизовані користувачі, лише адміністратори, або публічно). Це критично важливо для запобігання несанкціонованому доступу до даних.
- CORS (Cross-Origin Resource Sharing): Налаштуйте правильні заголовки CORS, щоб дозволити доступ до вашого API лише з довірених доменів (вашого фронтенд-додатку). Це можна зробити через змінні оточення PocketBase або на рівні зворотного проксі.
- Лімітування запитів (Rate Limiting): Використовуйте можливості вашого зворотного проксі (Nginx або Caddy) для лімітування кількості запитів з однієї IP-адреси за одиницю часу. Це допоможе захиститися від DDoS-атак та атак перебору.
Приклад для Nginx:
http { limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s; # 10 запитів на секунду server { # ... location /api/ { limit_req zone=one burst=20 nodelay; # ... } } } - Секретні ключі: Якщо ви використовуєте будь-які секретні ключі або API-токени у змінних оточення PocketBase, переконайтеся, що вони надійно зберігаються та не потрапляють у публічний доступ.
Оптимізація продуктивності PocketBase
- SQLite PRAGMAs: PocketBase за замовчуванням використовує режим WAL (Write-Ahead Logging) для SQLite, що значно підвищує продуктивність при одночасних операціях читання/запису. Додаткові оптимізації можуть бути виконані за допомогою
PRAGMAкоманд, але зазвичай це не потрібно. - Індекси бази даних: Переконайтеся, що для часто використовуваних полів у ваших колекціях створені індекси. Це значно прискорить запити до бази даних. PocketBase дозволяє керувати індексами через Admin UI.
- Ефективні API-запити: Оптимізуйте запити вашого фронтенду до API PocketBase. Використовуйте фільтрацію, сортування та пагінацію на стороні сервера, щоб мінімізувати обсяг переданих даних.
- Кешування: Для високонавантажених API-ендпоінтів, які повертають дані, що рідко змінюються, розгляньте кешування на стороні клієнта або з використанням зворотного проксі. PocketBase сам по собі дуже швидкий, тому кешування може бути зайвим для більшості випадків.
- Оптимізація зображень та файлів: Якщо ваш додаток активно працює із зображеннями, використовуйте сервіси для їх оптимізації та стиснення перед завантаженням, щоб зменшити обсяг даних та прискорити завантаження.
Дотримуючись цих рекомендацій, ви забезпечите не тільки безпеку, а й високу продуктивність вашого PocketBase на сервері, дозволяючи йому ефективно обслуговувати ваш додаток.
Висновки
PocketBase є видатним рішенням для розробників, яким потрібна швидкість, простота та повний контроль над своїм бекендом. Розгорнутий на VPS, він стає потужним, економічним та гнучким інструментом для створення широкого спектру додатків, від прототипів до повноцінних продакшн-сервісів. Дотримуючись покрокових інструкцій щодо встановлення PocketBase через Docker Compose, налаштування безпечного доступу за допомогою зворотного проксі та HTTPS, а також впроваджуючи стратегії бекапів та оновлень, ви отримуєте надійну та легко керовану платформу.
Для оптимальної роботи PocketBase рекомендується вибирати VPS з NVMe-дисками та достатнім обсягом RAM, виходячи з очікуваного навантаження. Провайдери, такі як Valebyte.com, пропонують широкий вибір конфігурацій VPS, які ідеально підходять для розгортання PocketBase, забезпечуючи продуктивність та надійність, необхідні для вашого проєкту.
Готові вибрати сервер?
VPS та виділені сервери в 72+ країнах з миттєвою активацією та повним root-доступом.
Почати зараз →