MAATRIX / Блог / Как установить и настроить SeaTable на VPS

Как установить и настроить SeaTable на VPS

MAATRIX

Airtable удобен, пока не упираешься в лимиты бесплатного плана, цену за место в команде или в требование держать данные в своей юрисдикции. SeaTable решает все три проблемы: это open source таблица-база данных с автоматизациями, формами и API, которую можно развернуть на собственном сервере за полчаса. Ниже — рабочая установка Community Edition через Docker, с доменом, HTTPS и бэкапами, без танцев с бубном.

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →

Что нужно подготовить перед установкой

SeaTable Community Edition — это не один процесс, а связка из нескольких сервисов: сам SeaTable, база данных MySQL/MariaDB, memcached для кэша сессий и (опционально) отдельный воркер для фоновых задач вроде отправки писем и генерации превью файлов. Разворачивать это вручную без контейнеров смысла нет — официальный и поддерживаемый путь — Docker Compose.

Минимальные требования под небольшую команду (до 10-20 человек):

  • 2 vCPU, 4 ГБ RAM — стартовая точка, на которой SeaTable уже работает стабильно;
  • 8+ ГБ RAM, если планируете держать много таблиц с вложениями и активно использовать автоматизации;
  • 40+ ГБ SSD — под систему, базу и файлы, которые пользователи будут прикреплять к записям;
  • Ubuntu 24.04 или Debian 12 — оба дистрибутива прекрасно работают с текущими образами SeaTable;
  • домен или поддомен, указывающий A-записью на IP сервера — SeaTable сам умеет получать TLS-сертификат через встроенный веб-сервер, но без домена HTTPS не поднимется.

Если сервер только что арендован и Docker ещё не стоит, сначала пройдите базовую настройку — установку Docker с нуля мы разбирали в отдельной статье: Ubuntu 24.04: установка Docker с нуля. Заодно закройте лишние порты — SeaTable слушает 80/443, всё остальное наружу торчать не должно, см. настройку firewall UFW на VPS.

Устанавливаем Docker и Docker Compose

Если Docker уже стоит — пропускайте раздел. Если нет, вот минимальный набор команд для Ubuntu 24.04:

apt update && apt install -y ca-certificates curl gnupg
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
chmod a+r /etc/apt/keyrings/docker.asc

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  tee /etc/apt/sources.list.d/docker.list > /dev/null

apt update
apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin

Проверьте, что всё встало:

docker --version
docker compose version

Создайте рабочую директорию под проект — сюда ляжет docker-compose.yml и данные:

mkdir -p /opt/seatable && cd /opt/seatable

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.

Арендовать сервер

Docker Compose файл для SeaTable

Официальный образ seatable/seatable — это «всё в одном»: внутри уже есть веб-сервер, который сам получает сертификат Let's Encrypt по указанному домену, так что отдельный Caddy или Nginx перед SeaTable ставить не нужно. Снаружи требуется только MySQL/MariaDB и memcached.

Создайте docker-compose.yml:

services:
  db:
    image: mariadb:10.11
    container_name: seatable-mysql
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: "СЛОЖНЫЙ_ПАРОЛЬ_ROOT"
      MYSQL_LOG_CONSOLE: "true"
    volumes:
      - ./mysql-data:/var/lib/mysql
    networks:
      - seatable-net

  memcached:
    image: memcached:1.6
    container_name: seatable-memcached
    restart: unless-stopped
    entrypoint: memcached -m 256
    networks:
      - seatable-net

  seatable:
    image: seatable/seatable:latest
    container_name: seatable
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
    environment:
      DB_HOST: db
      DB_ROOT_PASSWD: "СЛОЖНЫЙ_ПАРОЛЬ_ROOT"
      TIME_ZONE: Europe/Moscow
      SEATABLE_SERVER_HOSTNAME: seatable.example.com
      SEATABLE_SERVER_PROTOCOL: https
      INIT_SEATABLE_ADMIN_EMAIL: admin@example.com
      INIT_SEATABLE_ADMIN_PASSWORD: "СЛОЖНЫЙ_ПАРОЛЬ_АДМИНА"
    volumes:
      - ./seatable-data:/shared
    depends_on:
      - db
      - memcached
    networks:
      - seatable-net

networks:
  seatable-net:
    driver: bridge

Замените seatable.example.com на реальный домен и подставьте свои пароли — все три (root MySQL, пароль администратора SeaTable) должны быть длинными и разными. Точные имена переменных окружения между версиями образа иногда меняются, поэтому перед запуском в проде сверьтесь с README в официальном репозитории seatable/seatable-docker — там всегда актуальный список для текущего тега образа.

Запуск:

docker compose up -d
docker compose logs -f seatable

Первый старт занимает несколько минут: контейнер инициализирует базу, накатывает миграции и запрашивает сертификат. Если в логах видите ошибки получения сертификата — почти всегда причина в том, что домен ещё не резолвится на IP сервера или 80/443 порт закрыт файрволом снаружи (в облачных провайдерах бывает отдельная security group поверх UFW).

Домен, HTTPS и первый вход

Пока контейнер поднимается, убедитесь, что DNS уже разошёлся:

dig +short seatable.example.com

Должен вернуться IP вашего сервера. Если используете Cloudflare — на время первого запуска отключите проксирование (серое облако вместо оранжевого), иначе встроенный в SeaTable механизм выпуска сертификата не сможет пройти HTTP-01 проверку через Cloudflare Proxy.

После успешного старта откройте https://seatable.example.com в браузере — увидите страницу входа. Логин и пароль — те, что указали в INIT_SEATABLE_ADMIN_EMAIL и INIT_SEATABLE_ADMIN_PASSWORD. Сразу после первого входа:

  1. Зайдите в системную админку (/sys/useradmin/) и создайте рабочих пользователей — не работайте под учёткой суперадмина в повседневных задачах.
  2. В настройках организации ограничьте регистрацию, если SeaTable будет доступен из интернета, а не только внутренней команде.
  3. Проверьте раздел «Email settings» — без настроенного SMTP не будут уходить письма-приглашения и уведомления об автоматизациях.

Резервное копирование и обновление

Все пользовательские данные лежат в двух местах: база MySQL/MariaDB (структуры таблиц, записи, метаданные) и каталог /shared внутри контейнера SeaTable (файлы, вложения, кэш). Бэкапить нужно оба, и желательно — консистентно, одним снимком.

Простой скрипт для крон-бэкапа:

#!/bin/bash
DATE=$(date +%F)
BACKUP_DIR=/opt/seatable/backups/$DATE
mkdir -p "$BACKUP_DIR"

docker exec seatable-mysql sh -c \
  'exec mysqldump --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD"' \
  > "$BACKUP_DIR/mysql-dump.sql"

tar czf "$BACKUP_DIR/seatable-data.tar.gz" -C /opt/seatable seatable-data

find /opt/seatable/backups -mtime +14 -exec rm -rf {} \;

Добавьте в crontab -e:

0 3 * * * /opt/seatable/backup.sh >> /var/log/seatable-backup.log 2>&1

Этого достаточно, чтобы иметь возможность восстановиться в пределах последних двух недель. Если данные критичны — уносите архивы с сервера на отдельное хранилище (S3-совместимое, второй сервер, что угодно), локальный бэкап на том же диске не спасает при отказе диска целиком. Общий разбор подходов и типичных ошибок с бэкапом Docker-томов — в статье бэкап Docker volume: частые ошибки и решения.

Обновление — это docker compose pull && docker compose up -d, но перед этим обязательно снимите свежий бэкап: миграции базы при обновлении применяются автоматически и откатить их «просто так» нельзя.

Ресурсы, производительность и типичные проблемы

На старте (2 vCPU / 4 ГБ RAM) SeaTable спокойно тянет команду до десятка человек с умеренным количеством таблиц. Узкое место обычно не CPU, а память — MySQL и сам SeaTable вместе с фоновыми процессами съедают заметную долю RAM даже в простое. Если контейнеры начинают падать по OOM, это первый признак, что пора либо добавить памяти, либо ограничить innodb_buffer_pool_size у MariaDB через отдельный конфиг.

Частые проблемы при установке:

СимптомВероятная причинаЧто проверить
Сертификат не выпускаетсяДомен не резолвится или порт 80 закрытdig, ufw status, проксирование в Cloudflare
Контейнер seatable перезапускается в циклеНе готова база при первом стартеdocker compose logs db, порядок depends_on
Медленная загрузка таблиц с вложениямиМало памяти под memcachedУвеличить -m в entrypoint memcached
Письма не отправляютсяНе настроен SMTPРаздел Email settings в системной админке
После обновления образа сервис не стартуетНесовместимая версия схемы БДВосстановить бэкап, читать changelog образа перед апдейтом

Если вы уже используете отдельный обратный прокси (Traefik, Nginx) перед другими сервисами на этом же сервере, встроенный веб-сервер SeaTable можно перевести в режим без автоматического SSL и подключить его как обычный upstream — но это усложняет конфигурацию, и для одного сервиса на VPS проще оставить всё как есть по умолчанию.

Чем SeaTable отличается от других self-hosted альтернатив Airtable

SeaTable — не единственный вариант такого рода. На соседних страницах блога есть разбор установки Baserow на VPS и сравнение NocoDB и Baserow — если ещё не определились с инструментом, стоит прочитать и то, и другое перед тем, как разворачивать что-то в проде.

Коротко про ключевое отличие SeaTable: у него собственная модель данных — не «таблица поверх обычной SQL-схемы», как у NocoDB, а внутренний движок таблиц с версионированием и типами колонок, ближе по духу к оригинальному Airtable. За счёт этого SeaTable удобнее для нетехнических пользователей — интерфейс более законченный, встроены готовые автоматизации (напоминания, изменение значений по расписанию, интеграции с email) без необходимости городить внешние сценарии. Обратная сторона — меньше гибкости для тех, кто хочет работать с данными напрямую через SQL: прямой доступ к «сырой» базе не задуман архитектурой продукта, только через API.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.

Арендовать сервер

Нужны сами нейросети для контента?

Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.

Частые вопросы

Можно ли поставить SeaTable без Docker?

Технически да, есть инструкции по установке из исходников на голую систему, но поддерживаемый и заметно менее болезненный путь — Docker. Ручная установка требует вручную собирать Python-окружение, Elasticsearch (опционально) и следить за версиями зависимостей.

Нужен ли SeaTable отдельный SSL-сертификат, если сервер уже за Cloudflare?

Нет, если Cloudflare работает в режиме DNS-only (серое облако) на момент первого получения сертификата. После того как сертификат выпущен, проксирование можно включить обратно, но тогда убедитесь, что режим SSL в Cloudflare — «Full» или «Full (strict)», иначе будет ошибка редиректов.

Сколько пользователей выдержит минимальная конфигурация 2 vCPU / 4 ГБ?

Ориентировочно 5-15 активных пользователей без экстремальной нагрузки на автоматизации — это грубая оценка, у вас может отличаться в зависимости от размера таблиц и количества вложений. При росте команды проще заранее закладывать 8 ГБ RAM, чем потом переносить продакшн-базу на более мощный сервер.

Есть ли миграция из Airtable?

SeaTable поддерживает импорт из CSV и Excel, а также частично — прямой импорт баз Airtable через сторонние конвертеры. Полного нативного «однокнопочного» переноса структуры с формулами и связями между таблицами нет, часть настроек придётся пересобрать вручную.

Что будет с данными, если контейнер seatable упадёт?

Ничего страшного, если volume /shared и данные MySQL смонтированы на диск сервера (как в конфиге выше) — docker compose up -d поднимет всё заново с теми же данными. Реальный риск — потеря самого диска сервера, отсюда и необходимость внешних бэкапов.

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →