BookStack или Wiki.js: что выгоднее и когда
Если команда выросла из общего Google Docs и файликов в Telegram, рано или поздно встаёт вопрос базы знаний. Confluence стоит денег и всё сложнее доступен из России, Notion — облако с непредсказуемым будущим для российских карт. Остаются self-hosted варианты, и среди них два самых зрелых кандидата — BookStack и Wiki.js. Они решают одну задачу принципиально по-разному, и выбор не всегда очевиден, пока не попробуешь оба на живом сервере.
Содержание
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →Что вообще сравниваем: два разных подхода к базе знаний
BookStack построен вокруг простой иерархии: Shelf → Book → Chapter → Page — полка, книга, глава, страница. Это осознанное архитектурное решение: структура жёстко навязана, и у пользователей физически нет способа устроить хаос из разрозненных страниц без родителя. Редактор — WYSIWYG (по сути обёртка над TinyMCE), знакомый любому, кто хоть раз работал в WordPress. Написан на PHP/Laravel, хранит контент в MySQL.
Wiki.js устроен свободнее — это плоское дерево страниц с произвольной вложенностью через путь (/docs/backend/api), без навязанной иерархии книг и глав. Родной формат редактирования — Markdown с live-превью, но есть также визуальный редактор, HTML-режим и даже AsciiDoc. Написан на Node.js, хранит контент в PostgreSQL, MySQL/MariaDB или даже SQLite для совсем небольших инсталляций.
На практике разница ощущается так: в BookStack сложно построить бардак, потому что структура задаёт рамки. В Wiki.js легко сделать красиво и гибко, но и легко скатиться в кашу из страниц без единой системы, если в команде нет дисциплины именования путей.
Требования к серверу и стек технологий
Здесь расхождение практическое, а не философское — от стека зависит, что вам придётся поддерживать на сервере.
| Параметр | BookStack | Wiki.js |
|---|---|---|
| Язык/рантайм | PHP 8.1–8.3 | Node.js 18 LTS+ |
| СУБД | MySQL 8.0 / MariaDB 10.6+ | PostgreSQL (рекомендуется), MySQL, SQLite |
| Веб-сервер | Nginx/Apache + PHP-FPM | Встроенный (Node слушает порт сам) |
| Минимум RAM | 512 МБ – 1 ГБ | 1 ГБ (Node сам по себе прожорливее) |
| Кэш/очереди | Опционально Redis | Не требуется для базовой работы |
| Docker-образ | ~200 МБ | ~400+ МБ (за счёт Node.js рантайма) |
На практике для команды до 20–30 человек и того, и другого хватит на 1 vCPU / 1–2 ГБ RAM с запасом. Разница начинает ощущаться при большом количестве одновременных редакторов и объёмном полнотекстовом поиске — Wiki.js с PostgreSQL и включённым поиском ест памяти заметно больше, чем BookStack с MySQL. Если сервер и так уже держит несколько сервисов в Docker, PHP-стек BookStack обычно проще уживается по памяти рядом с соседями.
Готовые compose-файлы для обоих есть отдельно — не буду дублировать их здесь целиком, только ключевые нюансы. Полный рабочий docker-compose.yml для BookStack с MySQL и переменными окружения разобран в статье BookStack в Docker Compose: готовый файл. Для Wiki.js пошаговая установка на голый Ubuntu 24.04 (без Docker, через systemd) — в статье Wiki.js на Ubuntu 24.04: пошаговая установка.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Арендовать серверУстановка и первый запуск: сколько времени и телодвижений
BookStack через Docker Compose разворачивается буквально одной командой:
services:
bookstack:
image: lscr.io/linuxserver/bookstack:latest
environment:
- PUID=1000
- PGID=1000
- APP_URL=https://wiki.example.com
- DB_HOST=bookstack_db
- DB_DATABASE=bookstackapp
- DB_USERNAME=bookstack
- DB_PASSWORD=change_me
ports:
- "6875:80"
depends_on:
- bookstack_db
bookstack_db:
image: lscr.io/linuxserver/mariadb:latest
environment:
- MYSQL_DATABASE=bookstackapp
- MYSQL_USER=bookstack
- MYSQL_PASSWORD=change_me
- MYSQL_ROOT_PASSWORD=change_me_too
volumes:
- bookstack_db_data:/config
volumes:
bookstack_db_data:
docker compose up -d — и через 30–60 секунд можно логиниться дефолтным admin@admin.com / password (сразу сменить). Никакого визарда настройки — сразу рабочий интерфейс.
Wiki.js в Docker поднимается похожим образом, но требует отдельной инициализации через веб-визард при первом заходе: там задаётся язык интерфейса, тип хранилища контента (можно сразу подключить синхронизацию с Git-репозиторием — полезная фича, которой у BookStack нет из коробки), первый администратор. Занимает 3–5 минут против «сразу открыл и работаешь» у BookStack. Мелочь, но на счету, если разворачиваете вики за 10 минут до демо.
Оба варианта одинаково легко поставить за reverse proxy с автоматическим SSL — общий подход разобран в статье Caddy или Nginx: что выбрать для сервера, она применима к обоим сервисам без изменений.
Редактирование и совместная работа: WYSIWYG vs Markdown
Это, пожалуй, главный водораздел при выборе.
BookStack даёт классический визуальный редактор с панелью форматирования — заголовки, таблицы, код, изображения перетаскиванием, вставка из буфера с сохранением форматирования. Порог входа нулевой: нетехнический сотрудник (менеджер, HR, саппорт) сядет и начнёт писать без объяснений. Есть также markdown-режим редактирования, но он вторичен и переключается вручную.
Wiki.js — про Markdown как основной язык. Это отличный выбор, если базу знаний ведут в основном разработчики или технически подкованные люди: можно писать в любимом текстовом редакторе локально и синкать через Git-интеграцию, вставлять блоки кода с подсветкой синтаксиса на лету, работать с diff-историей как с кодом. Но нетехнического сотрудника markdown-синтаксис (жирный, обратные кавычки для кода) первое время будет тормозить — хотя визуальный WYSIWYG-режим в Wiki.js тоже есть и вполне рабочий.
Совместное редактирование в реальном времени (как в Google Docs, когда два человека видят курсоры друг друга) не реализовано полноценно ни там, ни там — оба используют модель «редактирует один, остальные видят изменения после сохранения», с блокировкой страницы во время редактирования у BookStack и версионированием у обоих.
Права доступа, поиск и организация контента
BookStack предлагает ролевую модель уровня enterprise из коробки: роли можно назначать на уровне полки, книги, главы или конкретной страницы, с точностью до операций «просмотр / создание / редактирование / удаление». Для компании, где часть документации закрыта для определённых отделов (например, HR-политики видны не всем), это готовое решение без доработок.
Wiki.js тоже поддерживает права по группам и путям, но система менее гранулярна: права назначаются на уровне групп страниц по правилам путей (/hr/* доступен группе HR), что работает, но требует более аккуратного планирования структуры путей заранее — иначе рефакторинг прав превращается в переименование десятков страниц.
Поиск: BookStack использует встроенный полнотекстовый поиск MySQL — быстрый на средних объёмах, но без продвинутых фич вроде поиска по синонимам. Wiki.js поддерживает несколько поисковых движков на выбор — встроенный, а также интеграцию с Elasticsearch или Algolia для крупных баз (тысячи страниц), что даёт заметно более качественную релевантность на масштабе, но требует поднимать и обслуживать дополнительный сервис.
Что выбрать под конкретный сценарий
Сведу в одну таблицу — она полезнее абстрактных рассуждений:
| Сценарий | Выбор | Почему |
|---|---|---|
| Внутренняя документация для всей компании, много нетехнических авторов | BookStack | Нулевой порог входа, WYSIWYG, понятная иерархия книга-глава |
| База знаний для разработчиков, документация к API | Wiki.js | Markdown, подсветка кода, Git-синхронизация исходников |
| Нужна гранулярная выдача прав по отделам с самого начала | BookStack | Права до уровня страницы из коробки, без танцев с путями |
| Тысячи страниц, важен качественный полнотекстовый поиск | Wiki.js | Интеграция с Elasticsearch/Algolia, лучше масштабируется |
| Хотите версионировать вики как код, хранить в Git | Wiki.js | Родная поддержка Git-storage для контента |
| Сервер уже нагружен другими Docker-сервисами, каждый МБ RAM на счету | BookStack | PHP-стек экономнее по памяти, чем Node.js-рантайм Wiki.js |
| Планируете часто переносить/бэкапить одним архивом | BookStack | Всё в одной MySQL-базе + файлы вложений, бэкап проще |
Если ни один вариант не закрывает задачу целиком — например, нужна вики с сильным упором на markdown, но проще в администрировании, чем Wiki.js — стоит присмотреться к третьему игроку, Outline: установка на Ubuntu разобрана в статье Outline Wiki на Ubuntu 24.04: пошаговая установка, но это тема отдельного сравнения.
Независимо от выбора, регулярный бэкап базы данных обязателен — оба сервиса хранят весь контент в реляционной СУБД, и без дампа вы теряете вики целиком при любой аварии диска. Как настроить автоматический бэкап MySQL по расписанию — в статье Как установить и настроить бэкап MySQL на VPS (для Wiki.js на PostgreSQL логика та же, только через pg_dump).
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Арендовать серверНужны сами нейросети для контента?
Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.
Частые вопросы
Можно ли перенести контент из BookStack в Wiki.js или наоборот?
Прямого конвертера нет. BookStack умеет экспортировать страницы в Markdown, HTML и PDF — экспортированный Markdown можно вручную (или скриптом) залить в Wiki.js. Обратного пути (из Wiki.js в BookStack) готового инструмента тоже нет, придётся писать конвертацию markdown → HTML под API BookStack самостоятельно.
Что легче администрировать на сервере — PHP или Node.js-стек?
Если у вас уже есть опыт с любым из них — берите знакомый. Если опыта нет с обоими, PHP-стек BookStack исторически проще диагностировать: логи PHP-FPM и Nginx привычнее большинству админов, чем логи Node-процесса. Но с Docker-образами разница почти стирается — оба запускаются и обновляются одной командой.
Есть ли у BookStack и Wiki.js мобильные приложения?
Нативных приложений нет ни у того, ни у другого — оба адаптивны под мобильный браузер, этого достаточно для чтения и мелкой правки с телефона. Для полноценного редактирования удобнее десктоп.
Какой из них лучше для документации, которая пишется одновременно с кодом (docs-as-code)?
Wiki.js однозначно ближе к этому подходу — Git-интеграция позволяет держать markdown-файлы в том же репозитории, что и код, и синхронизировать вики автоматически при пуше.
Нужен ли отдельный сервер под каждый из сервисов?
Нет, оба легко живут на одном небольшом VPS вместе с другими контейнерами — 1–2 vCPU и 2 ГБ RAM с запасом хватает для команды до полусотни человек при умеренной нагрузке.
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →