Индекс журналаDockup / заметка с места
Note / self-host-kanboard

Как разместить Kanboard на собственном сервере в 2026 году: SQLite, плагины и безопасные обновления

Практическое руководство по самостоятельному размещению Kanboard: Docker, порты, постоянные данные, TLS, безопасность, резервное копирование и проблемы, которые мешают использовать систему в production. С проверками.

Неудачное развёртывание Kanboard не всегда завершается сбоем. Система может показывать страницу входа, пока SQLite не может записать данные из-за неправильного владельца подключённого каталога данных. Поэтому сначала выполните сквозную проверку: замените учётные данные по умолчанию, создайте проект и задачу, переместите её между колонками, загрузите файл и проверьте работу одного установленного плагина.

Эта проверка соответствует заявленному назначению Kanboard: минималистичная kanban-доска на базе SQLite. Она также позволяет раньше, чем проверка доступности, обнаружить отсутствующие зависимости, неправильные предположения о reverse proxy и эфемерные данные.

Отделите Kanboard от его зависимостей

Минимальная ответственная топология Kanboard включает один private listener на порту 80, маршрут ingress и документированную границу состояния. Локальное требование runtime — доступный для записи volume данных и опциональный SMTP. Явно зафиксируйте жизненный цикл, чтобы перенос Kanboard между хостами не менял поведение системы незаметно.

Проверьте топологию с чистого клиента: замените учётные данные по умолчанию, создайте проект и задачу, переместите её между колонками, загрузите файл и проверьте работу одного установленного плагина. Во время проверки наблюдайте за блокировками SQLite, объёмом вложений, фоновыми действиями и поведением плагина при одновременной работе пользователей. Результат покажет, что именно требует улучшения: память, хранилище, сеть или отдельный worker, — вместо того чтобы подталкивать к произвольному увеличению ресурсов контейнера.

Домены, proxy-заголовки и порт 80

Выпуск TLS-сертификата — только половина маршрута Kanboard. Обслуживайте доску по HTTPS и задайте URL приложения, если он нужен плагинам. Направляйте трафик внутри системы на порт 80 и передавайте внешнюю схему, чтобы сгенерированные URL и secure cookies оставались согласованными.

Выполните полный сценарий Kanboard из чистой сети, а не только откройте корневую страницу. Ошибку 502 или сбой сертификата можно локализовать с помощью автоматической настройки домена и TLS. Если трафик доходит до процесса, а SQLite не может записать данные из-за неправильного владельца подключённого каталога данных, диагностируйте это условие в месте его возникновения, а не добавляйте новые редиректы.

Сделайте запуск Kanboard воспроизводимым

Запуск в production-окружении намеренно выглядит скучно: именованное состояние, явно заданный порт и отсутствие секретов внутри image.

docker run -d \
  --name kanboard \
  --restart unless-stopped \
  -p 127.0.0.1:80:80 \
  -v kanboard-data:/var/www/app/data \
  kanboard/kanboard:latest

Этот пример задаёт базовую конфигурацию, а не полный supporting stack. Перед открытием доступа проверьте локальное требование: доступный для записи volume данных и опциональный SMTP. Проверьте фактически подключённые mounts и listener, затем попробуйте заменить учётные данные по умолчанию, создать проект и задачу, переместить её между колонками, загрузить файл и проверить работу одного установленного плагина. До следующего перезапуска зафиксируйте рабочую версию image.

Наблюдайте за нагрузкой, а не только за контейнером

Для Kanboard нужно мониторить не процесс, а транзакцию: заменить учётные данные по умолчанию, создать проект и задачу, переместить её между колонками, загрузить файл и проверить работу одного установленного плагина. Сопоставляйте её latency и error rate с блокировками SQLite, объёмом вложений, фоновыми действиями и поведением плагина при одновременной работе пользователей, чтобы alert указывал на ограниченный компонент.

Репетиция обновления должна учитывать, что перед обновлением image Kanboard миграции базы данных и совместимость плагинов требуют snapshot. Восстановите данные, выполните миграцию и запустите транзакцию до замены версии в production. Если SQLite не может записать данные из-за неправильного владельца подключённого каталога данных, не удаляйте данные ради успешного запуска; последовательно сравните версию, variables, mounts и доступность зависимостей.

Проверьте развёртывание Kanboard полностью

Production-проверку Kanboard должен уметь выполнить человек, который не занимался развёртыванием. Передайте ему зафиксированную версию, нечувствительную тестовую учётную запись и следующую задачу: заменить учётные данные по умолчанию, создать проект и задачу, переместить её между колонками, загрузить файл и проверить работу одного установленного плагина. Если инструкции требуют недокументированного доступа к shell, сервис ещё не готов к эксплуатации.

Повторите проверку после замены только контейнера. Затем восстановите базу данных SQLite, загруженные файлы, плагины и конфигурацию в пустую инфраструктуру и убедитесь, что проекты, история задач, пользователи, вложения и плагины восстановились, а восстановленная доска принимает новую задачу. Во время обоих успешных запусков измеряйте блокировки SQLite, объём вложений, фоновые действия и поведение плагина при одновременной работе пользователей; неожиданные различия часто указывают на отсутствующий cache, index, worker или mount с данными.

Добавьте проверку отказоустойчивости: отправьте безвредные данные, близкие к ограничению ресурса или формата, связанному с этим условием: SQLite не может записать данные из-за неправильного владельца подключённого каталога данных. Kanboard должна выдавать понятную ошибку, сохранять существующее состояние и восстанавливаться после возврата корректного условия. Сохраните временные метки и соответствующие строки логов, предварительно удалив секреты. Эти сведения станут эталоном для следующего изменения image или конфигурации.

Volumes — только первый уровень восстановления

Составьте recovery manifest для Kanboard: база данных SQLite, загруженные файлы, плагины и конфигурация. Подключите /var/www/app/data до bootstrap, запишите безвредные тестовые данные и замените контейнер, чтобы доказать фактическую постоянность этого пути. Проверьте права владельца и свободное место сейчас: подключённый, но недоступный для записи путь практически ничем не отличается от отсутствия persistence.

Создавайте резервные копии в failure domain, отдельном от работающего сервера. Восстановите Kanboard из зафиксированного image и убедитесь, что проекты, история задач, пользователи, вложения и плагины вернулись, а восстановленная доска принимает новую задачу. Руководство по persistent volumes поможет перенести эту практику в политику snapshot и хранения резервных копий.

Защитите ценную часть Kanboard

Безопасное развёртывание Kanboard начинается с сокращения полномочий. Не оставляйте стандартные учётные данные admin/admin; сразу удалите admin/admin, ограничьте доступ к проектам и проверьте плагины, прежде чем предоставлять им доступ к production-данным.

В этой базовой конфигурации Kanboard не требует обязательного bootstrap-секрета; вместо этого защитите фактическую учётную запись администратора или upstream-аутентификацию. Ограничьте административные маршруты, используйте private DNS для зависимостей и проверьте каждый bind mount. При централизованной отправке логов отфильтруйте секреты и приватное содержимое до того, как они покинут сервер.

Где Dockup упрощает работу с Kanboard

Template Dockup должен описывать image, порт 80, mounts, интервалы проверки состояния, домен, TLS и передачу секретов. Dockup должен сохранять настройки runtime Kanboard, пока оператор проверяет локальное требование: доступный для записи volume данных и опциональный SMTP. То же развёртывание можно использовать на серверах Dockup или на подключённых ресурсах заказчика.

После публикации маршрута примените публичную настройку и попробуйте заменить учётные данные по умолчанию, создать проект и задачу, переместить её между колонками, загрузить файл и проверить работу одного установленного плагина. Создавайте резервные копии базы данных SQLite, загруженных файлов, плагинов и конфигурации и включите процедуру восстановления в операционный план; эти обязанности Kanboard сохраняются и после подготовки инфраструктуры.

Часто задаваемые вопросы

Что нужно Kanboard для развёртывания в production?

Направьте контейнер Kanboard на порту 80 через один HTTPS origin. Локальное требование runtime — доступный для записи volume данных и опциональный SMTP. Не считайте Kanboard готовой, пока не сможете заменить учётные данные по умолчанию, создать проект и задачу, переместить её между колонками, загрузить файл и проверить работу одного установленного плагина.

Какие данные Kanboard нужно включать в резервную копию?

Сохраняйте /var/www/app/data и включайте базу данных SQLite, загруженные файлы, плагины и конфигурацию в один recovery manifest. Восстановление Kanboard можно считать успешным только после того, как вернулись проекты, история задач, пользователи, вложения и плагины, а восстановленная доска приняла новую задачу.

Нужен ли Kanboard HTTPS за reverse proxy?

Используйте HTTPS для публичного origin Kanboard, а порт 80 оставьте во внутреннем маршруте. Корректно примените настройку Kanboard: обслуживайте доску по HTTPS и задайте URL приложения, если он нужен плагинам. Для Kanboard HTTPS защищает учётные данные и пользовательское содержимое при передаче и обеспечивает согласованное поведение клиента, зависящее от origin.

Как тестировать обновление Kanboard?

Восстановите текущее состояние Kanboard в изолированном развёртывании, примените кандидатную версию и повторите приёмочную транзакцию. Уделите особое внимание тому, что перед обновлением image Kanboard миграции базы данных и совместимость плагинов требуют snapshot. Сохраняйте предыдущий image Kanboard, пока не будут понятны границы миграции данных и rollback.