Baserow на Ubuntu 24.04: пошаговая установка
Airtable удобен, пока не упираешься в лимиты бесплатного тарифа или не хочешь держать рабочие данные на чужих серверах за рубежом. Baserow решает обе проблемы: это open-source конструктор баз данных с таким же табличным интерфейсом, собственной базой PostgreSQL под капотом и REST API из коробки. Разворачивается он в один Docker-контейнер, и весь путь от чистой Ubuntu 24.04 до рабочей установки с HTTPS занимает меньше часа.
Содержание
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →Почему Baserow и что нужно от сервера
Baserow — это не облачный сервис с бесплатным лимитом, а полноценное приложение, которое можно поставить на свой VPS и не думать про число строк, полей или пользователей. Внутри он устроен похоже на Airtable: базы, таблицы, разные типы полей, представления (грид, канбан, календарь), формы для сбора данных. Отличие в том, что данные физически лежат в вашей PostgreSQL, а не в чужом облаке, и доступ к ним идёт через собственный REST API и веб-хуки без посредников.
Официальный способ установки — образ baserow/baserow, который в одном контейнере разворачивает backend, frontend, embedded PostgreSQL, Redis и веб-сервер Caddy для автоматического HTTPS. Для небольшой и средней команды (до нескольких десятков активных пользователей) такой all-in-one контейнер тянет нагрузку без проблем на 2 ядрах и 2-4 ГБ памяти. Если баз станет много и объём данных вырастет — добавить памяти или ядра проще, чем переезжать на другую платформу, поэтому имеет смысл сразу брать VPS с запасом или тариф, который можно расширить одним кликом.
Из требований к серверу: Ubuntu 24.04 LTS, доступ по SSH с правами sudo, свободный порт 80 и 443 (если ставите с HTTPS через встроенный Caddy) и домен или поддомен, A-запись которого указывает на IP сервера. Без домена тоже можно запустить Baserow по IP и HTTP, но для рабочего использования — особенно если будете открывать формы или API наружу — HTTPS обязателен.
Шаг 1. Подготовка системы и Docker
Обновите систему и поставьте Docker официальным скриптом — на Ubuntu 24.04 он отрабатывает без правок:
apt update && apt upgrade -y
curl -fsSL https://get.docker.com | sh
docker compose version
Вывод версии Compose подтверждает, что Docker и плагин встали корректно. Дальше вся установка Baserow сведётся к одному контейнеру и одному тому с данными — никаких системных зависимостей Python или Node.js ставить не придётся, всё уже внутри образа.
Если сервер только что создан, сразу заведите отдельного пользователя без root-прав для повседневной работы, а root оставьте только для административных задач. Это не специфика Baserow, а базовая гигиена любого продакшен-сервера.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Арендовать серверШаг 2. Firewall и домен
Закройте периметр до того, как на сервере появятся сервисы с реальными данными:
ufw allow 22/tcp
ufw allow 80,443/tcp
ufw enable
Подробнее про настройку и типовые ошибки ufw — в отдельной статье про фаервол ufw на Ubuntu 24.04. Пока фаервол настраивается, заведите домен или поддомен под Baserow (например, baserow.example.com) и направьте его A-запись на IP сервера. Распространение DNS обычно занимает от нескольких минут до пары часов — за это время как раз успеете подготовить конфиг.
Шаг 3. Запуск Baserow в Docker
Создайте каталог под проект и запустите контейнер, указав домен в переменной BASEROW_PUBLIC_URL — по ней Baserow сформирует ссылки в письмах, API и веб-хуках, а встроенный Caddy автоматически получит сертификат Let's Encrypt для этого домена:
mkdir -p /opt/baserow && cd /opt/baserow
docker run -d \
--name baserow \
--restart unless-stopped \
-e BASEROW_PUBLIC_URL=https://baserow.example.com \
-v baserow_data:/baserow/data \
-p 80:80 \
-p 443:443 \
baserow/baserow:latest
Том baserow_data хранит абсолютно всё: базу PostgreSQL, файлы Redis, загруженные пользователями файлы, сгенерированный при первом запуске SECRET_KEY и сертификаты Caddy. Если этот том потерять — потеряются все базы, поэтому именно его нужно бэкапить (об этом ниже).
Тег latest удобен для первого знакомства, но для рабочей установки лучше зафиксировать конкретную версию — посмотрите актуальные теги на странице образа на Docker Hub и укажите их явно в команде запуска или в compose-файле. Так обновление станет управляемым действием, а не тем, что происходит само по себе при пересоздании контейнера.
Если предпочитаете декларативный конфиг, то же самое компактно ложится в docker-compose.yml:
services:
baserow:
image: baserow/baserow:latest
container_name: baserow
restart: unless-stopped
environment:
- BASEROW_PUBLIC_URL=https://baserow.example.com
ports:
- "80:80"
- "443:443"
volumes:
- baserow_data:/baserow/data
volumes:
baserow_data:
Запуск: docker compose up -d. Про более сложные продакшен-сценарии с вынесенной PostgreSQL, отдельными воркерами и масштабированием — в статье про Docker Compose для продакшена; для большинства команд, впрочем, все-в-одном образа хватает с запасом.
Шаг 4. Домен, HTTPS и альтернатива со своим прокси
Если порты 80 и 443 на сервере свободны и DNS-запись уже распространилась, встроенный в образ Caddy сам получит сертификат при первом запуске — никаких дополнительных действий не требуется. Проверить это можно логами:
docker logs -f baserow
В логах должны появиться строки о выпуске сертификата и старте backend. Первый запуск занимает пару минут — Baserow накатывает миграции базы и собирает статику.
Если на сервере уже стоит свой Nginx или Caddy для других сайтов и порты 80/443 заняты, встроенный веб-сервер Baserow конфликтует с ним. В этом случае логичнее не отдавать Baserow внешние порты напрямую, а пробросить контейнер только на локальный адрес и поставить перед ним общий реверс-прокси, который уже управляет сертификатами для всех ваших доменов. Про настройку такого прокси с автоматическим HTTPS — в статье про Caddy с авто-SSL на Ubuntu 24.04. При такой схеме BASEROW_PUBLIC_URL всё равно указывает на внешний https-адрес — Baserow должен знать, по какому адресу его видят снаружи, даже если TLS терминирует не его собственный Caddy.
Шаг 5. Первый вход, workspace и API-токены
Откройте https://baserow.example.com в браузере. При первом заходе Baserow предложит создать учётную запись администратора — email и пароль. Это единственная преграда между интернетом и вашими данными, так что пароль должен быть надёжным, а если открываете сервис наружу — стоит сразу решить, будет ли регистрация новых пользователей открытой или только по приглашению (это настраивается в панели администратора внутри самого приложения).
После входа вы попадаете в свой первый workspace — рабочее пространство, внутри которого создаются базы данных. Можно начать с нуля или импортировать таблицу из CSV/Airtable через встроенный мастер импорта. Для интеграций и скриптов понадобится API-токен: он создаётся в настройках аккаунта (Settings → API tokens) и даёт доступ к REST API конкретного workspace без пароля пользователя. Базовый запрос к API выглядит так:
curl -H "Authorization: Token ВАШ_ТОКЕН" \
https://baserow.example.com/api/database/tables/ТАБЛИЦА/rows/
Полную спецификацию API Baserow генерирует автоматически для каждой базы — ссылка на неё есть в интерфейсе таблицы (кнопка API). Это удобно: не нужно вручную сверяться со статичной документацией, схема всегда соответствует текущей структуре ваших таблиц.
Шаг 6. Бэкап и обновление
Поскольку вся установка — это один контейнер и один том, бэкап сводится к резервному копированию тома baserow_data. Проще всего сделать это через временный контейнер, который смонтирует тот же том и заархивирует его:
docker run --rm \
-v baserow_data:/data \
-v $(pwd):/backup \
ubuntu tar czf /backup/baserow-backup-$(date +%F).tar.gz -C /data .
Команду стоит вынести в cron и складывать архивы за пределы сервера — на объектное хранилище или другой сервер. Про типовые грабли при бэкапе именно Docker-томов — в статье про бэкап Docker volume. Если данных много и хочется более гибкого бэкапа именно базы, а не всего тома целиком, для продакшена рассматривайте вынос PostgreSQL наружу — тогда бэкап делается стандартным pg_dump по расписанию, как описано в статье про установку PostgreSQL на Ubuntu 24.04.
Обновление Baserow — это скачивание новой версии образа и пересоздание контейнера, данные при этом остаются в томе:
docker pull baserow/baserow:latest
docker stop baserow && docker rm baserow
docker run -d --name baserow --restart unless-stopped \
-e BASEROW_PUBLIC_URL=https://baserow.example.com \
-v baserow_data:/baserow/data \
-p 80:80 -p 443:443 \
baserow/baserow:latest
Перед обновлением на новую мажорную версию всегда делайте свежий бэкап тома — миграции базы применяются автоматически при старте контейнера и откатить их вручную сложнее, чем восстановить архив.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Арендовать серверНужны сами нейросети для контента?
Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.
Частые вопросы
Baserow точно бесплатный?
Сам код открытый (ядро на лицензии, близкой к MIT, часть премиум-функций — по отдельной коммерческой лицензии), и self-hosted установка не имеет лимитов по строкам, таблицам или пользователям, в отличие от бесплатного тарифа Airtable.
Нужен ли домен, или можно работать по IP?
Технически можно запустить и по IP с BASEROW_PUBLIC_URL=http://IP-адрес, но тогда встроенный Caddy не сможет выпустить сертификат Let's Encrypt (ему нужен домен), и вы будете работать без шифрования — приемлемо только для локальных тестов.
Можно ли перенести данные из Airtable?
Да, у Baserow есть встроенный импортёр CSV и импорт из Airtable-экспорта прямо при создании базы — таблицы, поля и часть связей переносятся автоматически, но сложные формулы и вьюхи стоит перепроверить вручную после переноса.
Хватит ли минимального VPS?
Для одной команды из нескольких человек и умеренного объёма данных достаточно 2 ядер и 2-4 ГБ памяти. Если баз становится много и растёт число одновременных пользователей API, разумно увеличить память или вынести PostgreSQL на отдельный ресурс.
Как понять, что встроенный Caddy не смог получить сертификат?
Смотрите docker logs baserow — там будут явные ошибки ACME-запроса. Чаще всего причина в закрытом порте 80/443 в фаерволе или в том, что DNS-запись домена ещё не успела распространиться.
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →