Focalboard на Ubuntu 24.04: пошаговая установка
Если команда выросла из личных заметок, а платить за Trello, Asana или monday.com не хочется — Focalboard закрывает эту задачу полностью на своём сервере. Один инструмент даёт канбан-доски, таблицы, календарь и галерею на одних и тех же данных, без ограничений бесплатного тарифа и без чужих серверов между вами и вашими задачами. Дальше — установка на чистой Ubuntu 24.04 через Docker Compose, с SSL, бэкапами и разбором типичных проблем.
Содержание
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →Что такое Focalboard и зачем он на своём сервере
Focalboard — открытый проект (изначально от Mattermost, сейчас развивается сообществом форков) с несколькими представлениями одних и тех же карточек: канбан-доска, таблица со свойствами как в Airtable, календарь и галерея. Это отличает его от Wekan, который умеет только классический канбан — если нужны ещё и табличные представления с сортировкой по датам и статусам, Focalboard подходит лучше. Подробнее про альтернативу с чистым канбаном можно посмотреть в статье про установку Wekan на Ubuntu 24.04 — если задачи проще, он легче в поддержке.
Причины держать Focalboard на своём VPS, а не в облачном SaaS:
- Данные о задачах, клиентах и планах не уходят третьей стороне.
- Нет лимитов на число досок, карточек и участников — вы упираетесь только в ресурсы своего сервера.
- Можно встроить в свою инфраструктуру: единый домен, единый бэкап, единый SSO при необходимости.
- Стоимость предсказуема — цена аренды VPS, а не растущий счёт за подписки на каждого сотрудника.
Обратная сторона: обновления, бэкапы и мониторинг — теперь ваша ответственность. Дальше покажу, как свести эту нагрузку к минимуму.
Требования к серверу и подготовка Ubuntu 24.04
Focalboard — лёгкое приложение на Go с SQLite или PostgreSQL под капотом, требования скромные:
| Параметр | Минимум | Комфортно (10-30 пользователей) |
|---|---|---|
| CPU | 1 vCPU | 2 vCPU |
| RAM | 1 ГБ | 2 ГБ |
| Диск | 10 ГБ SSD | 25 ГБ SSD |
| ОС | Ubuntu 24.04 LTS | Ubuntu 24.04 LTS |
Для команды до 10-15 человек хватит младшего VPS. Если планируете держать на этом же сервере ещё Nginx с несколькими сайтами или базу для других сервисов — берите с запасом по RAM, Focalboard сам по себе много не съест.
Первым делом — обновление системы и создание отдельного пользователя без root-прав:
apt update && apt upgrade -y
adduser deploy
usermod -aG sudo deploy
su - deploy
Дальше работаем под deploy. Если на сервере ещё нет Docker — сначала пройдите статью про установку Docker с нуля на Ubuntu 24.04, там разобраны нюансы с правами группы docker и systemd. Здесь предполагаю, что Docker и Docker Compose plugin уже стоят:
docker --version
docker compose version
Если команды отработали без ошибок — можно двигаться дальше.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Арендовать серверУстановка Focalboard через Docker Compose
Официальный образ публикуется под именем mattermost/focalboard. Создаём рабочую директорию и файл конфигурации:
mkdir -p ~/focalboard && cd ~/focalboard
mkdir -p data
Файл docker-compose.yml:
services:
focalboard:
image: mattermost/focalboard:latest
container_name: focalboard
restart: unless-stopped
ports:
- "127.0.0.1:8000:8000"
volumes:
- ./data:/opt/focalboard/data
environment:
- TZ=Europe/Moscow
Обратите внимание на биндинг 127.0.0.1:8000:8000 — порт открыт только локально, наружу сервис будет смотреть через Nginx с SSL. Это стандартная практика: держать бэкенд-контейнер за реверс-прокси, а не в открытом доступе на нестандартном порту.
Запуск:
docker compose up -d
docker compose logs -f focalboard
В логах должна появиться строка о старте сервера на порту 8000 и об использовании встроенной SQLite-базы (файл focalboard.db в папке data). Для команды до 15-20 человек SQLite — вполне рабочий вариант, ниже разберу, когда стоит переходить на PostgreSQL.
Проверка изнутри сервера:
curl -I http://127.0.0.1:8000
Ожидаем HTTP/1.1 200 OK или редирект — это значит, что приложение поднялось и слушает порт.
Настройка Nginx как обратного прокси и SSL
Чтобы открыть Focalboard по домену board.example.com с валидным сертификатом, ставим Nginx и Certbot:
sudo apt install -y nginx certbot python3-certbot-nginx
Конфиг /etc/nginx/sites-available/focalboard:
server {
listen 80;
server_name board.example.com;
location / {
proxy_pass http://127.0.0.1:8000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
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;
}
}
Заголовки Upgrade/Connection обязательны — Focalboard использует WebSocket для живого обновления досок между участниками, без них карточки не будут обновляться в реальном времени у других пользователей.
Активируем и получаем сертификат:
sudo ln -s /etc/nginx/sites-available/focalboard /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
sudo certbot --nginx -d board.example.com
Если предпочитаете Caddy вместо Nginx — автоматический SSL там настраивается ещё проще, вариант описан в статье про Caddy с авто-SSL на Ubuntu 24.04. Для одного сервиса на сервере это часто удобнее, чем возиться с Certbot вручную.
Не забудьте про фаервол — открываем только 80/443/22 и закрываем всё остальное. Как это сделать через UFW, разобрано в статье про настройку фаервола UFW на Ubuntu 24.04.
Первый запуск и создание команды
Открываем https://board.example.com в браузере. Focalboard предложит создать первого пользователя — этот аккаунт получает права администратора рабочего пространства. Дальше:
- Создайте команду (workspace) — в личной установке обычно достаточно одной.
- Пригласите участников по ссылке-приглашению или через регистрацию (в зависимости от версии, регистрация может быть открытой или по инвайту — это регулируется в настройках).
- Создайте первую доску: выберите шаблон (спринт, план проекта, список задач) или начните с пустой доски.
- Настройте свойства карточек — статус, приоритет, дедлайн, ответственный. Именно свойства делают табличное представление полезным: можно сортировать и группировать задачи, как в Airtable, а не только двигать карточки по колонкам.
Переключение между видами (канбан / таблица / календарь / галерея) — вверху доски, одним кликом, без потери данных: это одна и та же информация в разных представлениях.
Переход на PostgreSQL для команд от 20+ человек
SQLite отлично работает для небольших команд, но с ростом числа одновременных пользователей и объёма данных стоит перейти на PostgreSQL — он лучше держит параллельные записи и не блокирует базу целиком на время операции.
Сначала поднимите PostgreSQL — самый простой путь через нативный пакет, описанный в статье про установку PostgreSQL на Ubuntu 24.04, либо контейнером рядом с Focalboard. Создайте базу и пользователя:
sudo -u postgres psql -c "CREATE DATABASE focalboard;"
sudo -u postgres psql -c "CREATE USER focalboard WITH ENCRYPTED PASSWORD 'сложный_пароль';"
sudo -u postgres psql -c "GRANT ALL PRIVILEGES ON DATABASE focalboard TO focalboard;"
В docker-compose.yml добавьте переменные окружения для подключения к внешней БД (если PostgreSQL стоит на хосте, а не в контейнере — используйте host.docker.internal или IP докер-моста вместо localhost):
environment:
- TZ=Europe/Moscow
- FOCALBOARD_DB_TYPE=postgres
- FOCALBOARD_DB_CONFIG=postgres://focalboard:сложный_пароль@172.17.0.1:5432/focalboard?sslmode=disable
Точное имя переменных зависит от версии образа — сверяйтесь с документацией конкретного тега mattermost/focalboard, у форков и версий встречаются расхождения в названиях. После смены типа БД перезапустите контейнер:
docker compose down
docker compose up -d
Миграция существующих данных из SQLite в PostgreSQL "на лету" штатно не поддерживается — если данные уже накоплены, планируйте переход заранее, на новой пустой базе, и переносите содержимое вручную через экспорт досок.
Бэкапы и обновление
Резервное копирование — обязательный пункт, который на self-hosted легко забыть. Для SQLite-варианта достаточно копировать файл базы и вложения:
mkdir -p ~/backups
tar czf ~/backups/focalboard-$(date +%F).tar.gz -C ~/focalboard data
Добавьте это в cron с ротацией старых архивов, и отдельно копируйте архивы за пределы сервера — на объектное хранилище или другой VPS, локальный бэкап не спасёт при потере самого сервера. Общие принципы бэкапа контейнерных данных, включая типичные ошибки с правами доступа, разобраны в статье про бэкап Docker volume на сервере.
Для PostgreSQL-варианта бэкапите базу через pg_dump:
sudo -u postgres pg_dump focalboard | gzip > ~/backups/focalboard-db-$(date +%F).sql.gz
Обновление до новой версии — обычно достаточно перезапустить с новым образом:
cd ~/focalboard
docker compose pull
docker compose up -d
Перед обновлением на проде всегда снимайте свежий бэкап — миграции схемы базы иногда необратимы в обратную сторону.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Арендовать серверНужны сами нейросети для контента?
Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.
Частые вопросы
Focalboard бесплатен для коммерческого использования?
Да, это открытый проект, лицензия позволяет использовать его в бизнесе без ограничений на число пользователей и досок — в отличие от бесплатных тарифов SaaS-аналогов.
Можно ли работать с Focalboard с телефона?
Да, интерфейс адаптивный и открывается в мобильном браузере, отдельного нативного приложения на момент написания статьи может не быть или оно ограничено — уточняйте в актуальной документации конкретной версии.
В чём разница между Focalboard и Wekan?
Wekan — классический канбан-инструмент, ближе к Trello. Focalboard добавляет табличное и календарное представление тех же данных, что удобнее для планирования по датам и фильтрации по свойствам карточек.
Нужен ли отдельный сервер только под Focalboard?
Нет, при 1-2 ГБ RAM сервис спокойно уживается с другими лёгкими приложениями на одном VPS — важно только не забывать про суммарную нагрузку, если сервисов становится много.
Как перенести Focalboard на другой сервер?
Для SQLite — скопировать папку data целиком на новый сервер и поднять тот же docker-compose.yml. Для PostgreSQL — сделать pg_dump/pg_restore в новую базу и перенести volume с вложениями карточек.
Что делать, если WebSocket не работает и доски не обновляются в реальном времени?
Проверьте, что в конфиге Nginx прописаны заголовки Upgrade и Connection "upgrade" — без них прокси рвёт WebSocket-соединение, и обновления между участниками перестают приходить мгновенно, требуя ручного обновления страницы.
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →