SeaTable на Ubuntu 24.04: пошаговая установка
Airtable удобен, пока не упираешься в лимиты бесплатного тарифа или в требование держать данные на своей инфраструктуре. SeaTable — это open-source таблица-база данных с формулами, автоматизациями, ссылками между таблицами и REST API, которую можно поставить на собственный сервер и не зависеть от чужих тарифных планов. Ниже — рабочая пошаговая установка Community-редакции на чистой Ubuntu 24.04 через Docker, с доменом, HTTPS и первым администратором.
Содержание
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →Что нужно перед установкой
SeaTable Community Edition — это не один процесс, а связка из нескольких сервисов: сама платформа (Django + DjangoDB), MariaDB для реляционных данных, Redis для кэша и очередей, встроенный веб-сервер для раздачи файлов. Официально поддерживаемый способ разворачивания — Docker Compose, и именно его стоит использовать: собирать эту связку руками из apt-пакетов долго и не даёт преимуществ.
Что подготовить заранее:
- Сервер с Ubuntu 24.04 LTS, доступом по SSH и правами sudo. По документации SeaTable для команды на 10-20 человек комфортно чувствует себя конфигурация от 2 vCPU и 4 ГБ RAM — это ориентир производителя, а не измеренный бенчмарк, и для боевой нагрузки с большими таблицами стоит закладывать запас;
- Домен или поддомен, указывающий на IP сервера (A-запись), — SeaTable рассчитан на работу по доменному имени, а не по голому IP, из-за особенностей формирования ссылок на файлы;
- Открытые порты 80 и 443 во внешнем файрволе провайдера и в
ufwна самом сервере; - Свободные 20+ ГБ диска — под образы, базу и вложения (SeaTable хранит прикреплённые файлы как объекты на диске, не в БД).
Если сервер только что арендован и домен ещё не привязан, сначала донастройте DNS — без корректного A-записи HTTPS-сертификат не выпустится, и SeaTable будет генерировать битые ссылки на файлы.
Устанавливаем Docker и Docker Compose
Подключаемся по SSH и обновляем систему:
sudo apt update && sudo apt upgrade -y
sudo apt install -y ca-certificates curl gnupg
Ставим Docker Engine из официального репозитория Docker (не из Ubuntu-репозитория — там версия старее и плагин compose может отсутствовать):
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Проверяем, что Docker и плагин compose встали:
docker --version
docker compose version
Добавляем текущего пользователя в группу docker, чтобы не набирать sudo перед каждой командой (после этого нужно перелогиниться):
sudo usermod -aG docker $USER
Настраиваем базовый файрвол, если ещё не сделали:
sudo ufw allow OpenSSH
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Арендовать серверГотовим каталог, docker-compose.yml и .env
SeaTable распространяет готовый набор Docker-файлов для self-hosting — это самый предсказуемый путь: не нужно вручную согласовывать версии MariaDB, Redis и самого приложения между собой.
Создаём рабочий каталог и клонируем официальный репозиторий с конфигурацией:
mkdir -p ~/seatable && cd ~/seatable
git clone https://github.com/seatable/seatable-docker.git .
Если git не установлен — sudo apt install -y git.
Внутри лежит шаблон .env (или seatable-server.env, в зависимости от версии репозитория) — копируем его и правим под себя:
cp seatable-server.env.template .env
nano .env
Ключевые переменные, которые обязательно нужно выставить:
# Домен, по которому будет доступен SeaTable
SEATABLE_SERVER_HOSTNAME=table.example.com
SEATABLE_SERVER_PROTOCOL=https
# Пароли для MariaDB — генерируйте случайные, не оставляйте дефолтные
DB_ROOT_PASSWD=сложный_пароль_root_бд
SEATABLE_MYSQL_DB_SEATABLE_PASSWORD=другой_сложный_пароль
# Часовой пояс
TIME_ZONE=Europe/Moscow
# Данные первого администратора — создаются автоматически при первом запуске
INIT_SEATABLE_ADMIN_EMAIL=admin@example.com
INIT_SEATABLE_ADMIN_PASSWORD=сложный_пароль_админа
INIT_SEATABLE_ADMIN_NAME=admin
Названия переменных могут немного отличаться между версиями репозитория — сверяйтесь с комментариями в самом файле .env, который вы скопировали: разработчики регулярно обновляют шаблон, и это надёжнее, чем любая статья.
Отдельно проверьте docker-compose.yml: там объявлены сервисы mariadb, redis, seatable (или seatable-server) и обычно встроенный веб-сервер, слушающий 80/443 порт контейнера. Если вы планируете отдать HTTPS отдельному обратному прокси (см. следующий раздел), пробросьте наружу только внутренний HTTP-порт, а не оба сразу — иначе получите конфликт портов на хосте.
Запускаем SeaTable и создаём администратора
Когда .env заполнен, поднимаем стек:
docker compose up -d
Первый запуск займёт несколько минут — контейнер seatable инициализирует схему MariaDB, создаёт служебные таблицы и заводит администратора по данным из .env. Следите за логами:
docker compose logs -f seatable
Дожидаемся строк о завершении миграций и запуске приложения (обычно что-то вроде "Starting seatable server" без ошибок подключения к БД). Если в логах повторяются ошибки Can't connect to MySQL server — контейнер приложения стартовал раньше, чем MariaDB успела инициализироваться; просто перезапустите:
docker compose restart seatable
Проверяем, что все контейнеры живы:
docker compose ps
Все сервисы должны быть в состоянии Up (или healthy, если в compose-файле настроены healthcheck'и). После этого открываем http://IP-сервера (или домен, если DNS уже указывает на сервер) и логинимся под учёткой из INIT_SEATABLE_ADMIN_EMAIL / INIT_SEATABLE_ADMIN_PASSWORD.
Настраиваем HTTPS и домен
Работать по HTTP в проде нельзя — SeaTable активно использует cookie-сессии и API-токены, которые обязаны передаваться по защищённому соединению. Есть два рабочих варианта.
Вариант 1 — встроенный nginx + certbot внутри compose-стека. У части версий репозитория seatable-docker уже есть контейнер с nginx и автоматическим получением сертификата Let's Encrypt: достаточно указать домен в .env и перезапустить стек, дальше certbot сам продлевает сертификат по крону внутри контейнера. Проверьте в документации к вашей версии репозитория, включён ли этот механизм.
Вариант 2 — свой обратный прокси на хосте. Более гибкий и предсказуемый путь, особенно если на сервере уже крутятся другие сайты. Ставите nginx на хост, проксируете домен на внутренний порт SeaTable (например, 127.0.0.1:8000), а сертификат получаете отдельно — подробный разбор с nginx и certbot есть в статье про установку Let's Encrypt на VPS. В этом случае в docker-compose.yml пробрасываете порт как "127.0.0.1:8000:80", чтобы контейнер не торчал наружу напрямую.
Минимальный конфиг nginx для второго варианта:
server {
listen 80;
server_name table.example.com;
location / {
proxy_pass http://127.0.0.1:8000;
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;
client_max_body_size 100m;
}
}
client_max_body_size важен отдельно: если пользователи прикрепляют к таблицам файлы больше 1 МБ (дефолт nginx), загрузка будет молча падать с ошибкой 413.
Первые шаги после установки
SeaTable сразу после установки — это пустая база с одним админом. Дальше:
- Создайте организацию/команду через веб-интерфейс и настройте базовые роли — по умолчанию все новые пользователи получают ограниченные права, администратор выдаёт их вручную;
- Настройте SMTP для отправки уведомлений и приглашений — без этого система не сможет рассылать письма-приглашения новым участникам. Переменные для SMTP тоже задаются в
.env(EMAIL_HOST,EMAIL_PORT,EMAIL_HOST_USER,EMAIL_HOST_PASSWORD); - Настройте автозапуск при перезагрузке сервера — Docker Compose с политикой
restart: always(обычно уже прописана в шаблонномdocker-compose.yml) поднимет все контейнеры сам после ребута, но стоит один раз проверить это принудительной перезагрузкой сервера; - Настройте бэкапы. Данные SeaTable живут в двух местах: таблицы и метаданные — в MariaDB, вложенные файлы — на диске в volume-каталогах. Бэкапить нужно оба: дамп базы через
mysqldumpвнутри контейнераmariadbи rsync/tar каталога с файлами. Общий подход к автоматизации регулярных дампов баз данных на сервере разобран в статье про резервное копирование баз данных — она применима и к MariaDB внутри Docker с поправкой наdocker compose exec.
Пример простого дампа базы:
docker compose exec mariadb sh -c 'exec mysqldump -uroot -p"$MYSQL_ROOT_PASSWORD" seatable' > seatable_backup_$(date +%F).sql
Обновление версии SeaTable сводится к docker compose pull && docker compose up -d — перед этим стоит сделать полный бэкап, так как миграции схемы БД идут автоматически и откатить их вручную сложнее, чем восстановить из дампа.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Арендовать серверНужны сами нейросети для контента?
Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.
Частые вопросы
SeaTable — это то же самое, что Airtable?
По функциям близко: таблицы со связями, формулы, представления (виды), автоматизации, API. Главное отличие — SeaTable можно развернуть у себя и не платить за место в облаке вендора, но за это придётся самому следить за апдейтами, бэкапами и сертификатами.
Нужен ли отдельный сервер под Elasticsearch?
Community-редакция для базового поиска по таблицам обходится без него. Elasticsearch подключают опционально для полнотекстового поиска по большим объёмам данных — для команды до нескольких десятков человек в этом обычно нет необходимости.
Можно ли поставить SeaTable без Docker, из исходников?
Технически да, разработчики публикуют инструкции по ручной сборке из Python-зависимостей, но это существенно больше ручной работы по согласованию версий Django, MariaDB-клиента и системных пакетов — для продакшена Docker Compose проще и надёжнее поддерживать в актуальном состоянии.
Чем SeaTable отличается от NocoDB и Baserow?
Все три — self-hosted альтернативы Airtable с похожим набором фич, но с разным акцентом: у SeaTable сильнее автоматизации и формулы, у NocoDB и Baserow — проще интеграция с существующими SQL-базами. Сравнение NocoDB и Baserow — в отдельной статье «NocoDB или Baserow: что выгоднее и когда», а пошаговая установка Baserow — здесь, если хотите сравнить процесс разворачивания на практике.
Сколько RAM реально нужно под небольшую команду из 5-10 человек?
Официальный минимум для боевого запуска — 4 ГБ RAM, но это ориентир вендора для типовой нагрузки; при активной работе с крупными таблицами и вложениями стоит закладывать запас и следить за docker stats в первые недели после запуска.
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →