Сравнение BookStack, Wiki.js и Outline для базы знаний
Сравнение трех популярных систем для ведения документации. Узнайте, какой движок выбрать для личного использования, а какой лучше подходит для командной работы с учетом авторизации.
Какой вики-движок для самостоятельного хостинга выбрать
Вики-система с самостоятельным хостингом позволяет собрать документацию вашей команды в одном месте с возможностью поиска на сервере под вашим контролем. BookStack, Wiki.js и Outline решают эту задачу. Основные различия между ними заключаются в объеме предварительной настройки перед созданием первой страницы и в правилах доступа для пользователей.
BookStack — самый легкий в развертывании инструмент с жестко заданной структурой. Wiki.js предоставляет наиболее широкий выбор редакторов для работы с единым деревом страниц. Outline обладает лучшим интерфейсом для написания текстов, однако не позволяет пользователям войти в систему до тех пор, пока вы не подключите стороннего провайдера идентификации.
Все приведенные ниже сведения основаны на официальной документации проектов и опубликованных конфигурационных файлах. Это сравнение функциональных возможностей, а не нагрузочное тестирование. Номера версий и системные требования актуальны на указанную дату, так как все три проекта активно развиваются.
Структура — это главный выбор
BookStack фиксирует форму вашего контента. Страница находится внутри книги, книга может содержать главы, а полки группируют книги. Вы не можете создать пятый уровень. Это ограничение и есть суть продукта: новый автор знает, куда поместить страницу, потому что для неё существует только одно место. Цена этого — контент, который не вписывается в структуру, приходится под неё подстраивать.
Wiki.js использует дерево путей, подобно папкам на диске. Страница по адресу ops/backup/restic находится там, куда вы её поместили, и вы сами выбираете глубину вложенности. Ничто не мешает двум людям разместить одну и ту же тему в разных ветках, поэтому для экземпляра Wiki.js нужен один ответственный за структуру дерева.
Outline использует коллекции с документами, вложенными в другие документы. Перемещение документа выполняется перетаскиванием мышью. Это наиболее гибкий из трёх вариантов, поэтому в нём проще всего допустить беспорядок.
BookStack: минимальная установка
BookStack — это PHP-приложение, работающее на базе MySQL. По состоянию на июль 2026 года документация требует наличия PHP 8.2 или новее, а также MySQL 8.0 или MariaDB 10.6 или новее. Если установка выполняется из исходного кода, также потребуется Composer 2.2 или новее. Текущая ветка релизов — 26.05.
Проект выпускает по одному скрипту установки для каждого релиза Ubuntu. Скрипт для версии 24.04 автоматически устанавливает Apache, MySQL 8.0 и PHP 8.3.
wget https://codeberg.org/bookstack/devops/raw/branch/main/scripts/installation-ubuntu-24.04.sh
chmod a+x installation-ubuntu-24.04.sh
sudo ./installation-ubuntu-24.04.shПеред запуском скрипта ознакомьтесь с предупреждением. В документации указано, что он предназначен «ТОЛЬКО ДЛЯ ЧИСТОЙ ОС, он установит Apache, MySQL 8.0 и PHP 8.3 и может ПЕРЕЗАПИСАТЬ любую существующую веб-конфигурацию на машине». На сервере, который уже отвечает на порту 80, скрипт займет этот порт и перезапишет конфигурацию Apache. В таких случаях используйте контейнеры или установите BookStack вручную поверх существующего стека LAMP на Ubuntu 24.04.
Вариант с контейнерами предполагает использование образа LinuxServer.io, на который ссылается документация BookStack. BookStack требует ключ шифрования сессий и не будет отображать страницы без него, поэтому сначала сгенерируйте его.
docker run -it --rm --entrypoint /bin/bash lscr.io/linuxserver/bookstack:latest appkeyСкопируйте полученное значение в APP_KEY, затем создайте сервис:
services:
bookstack:
image: lscr.io/linuxserver/bookstack:latest
container_name: bookstack
environment:
- PUID=1000
- PGID=1000
- TZ=Etc/UTC
- APP_URL=https://wiki.example.com
- APP_KEY=paste_the_generated_key_here
- DB_HOST=bookstack_db
- DB_PORT=3306
- DB_USERNAME=bookstack
- DB_PASSWORD=change_me
- DB_DATABASE=bookstackapp
volumes:
- ./config:/config
ports:
- 6875:80
restart: unless-stoppedЗначение APP_URL должно соответствовать адресу, который вводят пользователи, включая схему и порт. Установите его в http://localhost. Если этого не сделать и использовать HTTPS, сгенерированные ссылки и перенаправления будут указывать на неверный хост, что приведет к циклической переадресации на странице входа. Если вы не знакомы с файлами compose, начните с основ Docker Compose на VPS, прежде чем переходить к этому руководству.
Запустите проект и убедитесь, что приложение отвечает, а не просто работает контейнер:
docker compose up -d
docker compose ps
curl -sI http://127.0.0.1:6875/loginКод 200 OK означает, что PHP-приложение успешно загрузилось и подключилось к базе данных. Код 500 почти всегда означает, что APP_KEY пуст или учетные данные базы данных неверны; команда docker compose logs bookstack покажет, какая именно из этих двух причин вызвала ошибку.
Wiki.js: одно дерево, несколько редакторов
Wiki.js — это приложение на Node.js. Документированная установка через Docker предполагает использование PostgreSQL, хотя программное обеспечение также поддерживает MySQL, MariaDB, MSSQL и SQLite. Ниже приведен файл compose с официальной страницы проекта в Docker:
services:
db:
image: postgres:15-alpine
environment:
POSTGRES_DB: wiki
POSTGRES_PASSWORD: wikijsrocks
POSTGRES_USER: wikijs
logging:
driver: none
restart: unless-stopped
volumes:
- db-data:/var/lib/postgresql/data
wiki:
image: ghcr.io/requarks/wiki:2
depends_on:
- db
init: true
environment:
DB_TYPE: postgres
DB_HOST: db
DB_PORT: 5432
DB_USER: wikijs
DB_PASS: wikijsrocks
DB_NAME: wiki
restart: unless-stopped
ports:
- "80:3000"
volumes:
db-data:Измените POSTGRES_PASSWORD и DB_PASS одновременно перед запуском, так как они представляют собой единую пару учетных данных, а пример значения является публичным. Тег намеренно зафиксирован на ghcr.io/requarks/wiki:2. Документация не рекомендует использовать latest, поскольку переход на мажорную версию изменяет схему базы данных в работающем экземпляре.
Версия 2 — это ветка для использования. По состоянию на июль 2026 года новейшим релизом версии 2 является 2.5.314 от мая 2026 года. Существует версия 3, и в ее документации указано: «Этот сайт предназначен для нестабильного бета-релиза Wiki.js 3.0. Вы НЕ должны устанавливать его в производственной среде». Рассматривайте тег :3 как ознакомительный.
При первой загрузке Wiki.js предложит пройти настройку в браузере, которая создает учетную запись администратора. Пока вы не завершите этот процесс, любой, кто обратится к порту, получит доступ к мастеру настройки. Поэтому разместите сервис за обратным прокси-сервером и настройте TLS (transport layer security), прежде чем открывать брандмауэр. Вики на собственном доменном имени естественным образом размещается за Traefik перед несколькими Docker-приложениями, если сервер обслуживает более одного сервиса.
Выбор редактора — причина, по которой пользователи выбирают Wiki.js. Один экземпляр может содержать страницы в формате Markdown, визуальные страницы, страницы с чистым HTML и страницы AsciiDoc одновременно. Это помогает при импорте старого контента в формате, который вы не хотите конвертировать. Это также способ получить четыре разных стиля оформления в одной вики, поэтому определитесь с редактором по умолчанию в первый же день и зафиксируйте это решение.
Обзор: лучший редактор, тяжелые системные требования
Outline — это то, что обычно имеют в виду пользователи, когда ищут инструмент для заметок коммерческого уровня. Это приложение на Node.js, текущий релиз которого по состоянию на июль 2026 года имеет версию 1.9.2. В образце файла окружения перечислены необходимые компоненты: PostgreSQL через DATABASE_URL, Redis через REDIS_URL, два случайных секретных ключа и общедоступный URL.
openssl rand -hex 32
openssl rand -hex 32Выполните эту команду дважды и сохраните оба значения. Первое станет SECRET_KEY, второе — UTILS_SECRET. Основная часть файла окружения выглядит следующим образом:
NODE_ENV=production
URL=https://docs.example.com
PORT=3000
SECRET_KEY=<first openssl value>
UTILS_SECRET=<second openssl value>
DATABASE_URL=postgres://outline:change_me@postgres:5432/outline
PGSSLMODE=disable
REDIS_URL=redis://redis:6379
FILE_STORAGE=local
FILE_STORAGE_LOCAL_ROOT_DIR=/var/lib/outline/dataПараметр PGSSLMODE=disable корректен только в том случае, если база данных находится на том же сервере или в той же сети Docker. Не используйте его для базы данных, доступной через сеть, иначе соединение будет передаваться в открытом виде. Вложения больше не требуют обязательного использования объектного хранилища: FILE_STORAGE=local записывает загружаемые файлы в директорию уровнем выше, которая должна быть томом с правами записи для контейнера и включаться в ваши резервные копии. Установите FILE_STORAGE=s3 вместе со значениями AWS_*, если хотите хранить эти файлы в S3-совместимом бакете.
Теперь часть, которая удивляет пользователей. В Outline нет встроенной системы входа по имени пользователя и паролю. Согласно образцу конфигурации, требуются учетные данные стороннего провайдера: «для работы установки требуется хотя бы ОДИН из этих вариантов, иначе у вас не будет способов входа». Документированные провайдеры включают Google, Slack, Microsoft Entra, Discord и любой стандартный сервер OpenID Connect (OIDC) через OIDC_CLIENT_ID, OIDC_CLIENT_SECRET, OIDC_AUTH_URI, OIDC_TOKEN_URI и OIDC_USERINFO_URI.
Таким образом, реальная стоимость Outline — это сам Outline плюс PostgreSQL, плюс Redis, плюс провайдер идентификации. Если ваша команда уже использует для входа Google Workspace или Microsoft Entra, то последний компонент потребует десяти минут настройки, и Outline станет очень привлекательным решением. Если нет, вам придется дополнительно развертывать и поддерживать что-то вроде Keycloak или Authentik, что означает еще один сервис для обновления и резервного копирования. Планируйте объем оперативной памяти соответствующим образом: согласно рекомендациям Outline, требуется примерно 512 МБ на веб-процесс, задаваемый параметром WEB_CONCURRENCY, сверх ресурсов для базы данных и Redis.
Как каждый из них управляет правами доступа
BookStack по умолчанию поддерживает локальные учетные записи с электронной почтой и паролем, а также альтернативные методы аутентификации: LDAP, SAML2 и OIDC. Права доступа настраиваются для каждой роли и могут быть переопределены для отдельной полки, книги, главы или страницы. Поскольку иерархия фиксирована, права наследуются предсказуемым образом.
Wiki.js также поддерживает локальные учетные записи и предлагает обширный список стратегий, которые можно активировать в панели администратора. Правила доступа к страницам разрешают или запрещают действия на основе шаблонов путей. Это мощный, но потенциально опасный инструмент, так как правило, созданное для ops/*, автоматически распространяется на все страницы, которые вы добавите по этому пути в будущем.
Outline полностью делегирует управление доступом внешним системам. Членство в группах определяется вашим поставщиком идентификационных данных, а внутри Outline вы управляете доступом на уровне коллекций и групп. В системе не остается локальных учетных записей после увольнения сотрудника, что является существенным преимуществом, если поставщик идентификационных данных уже является основной системой для управления доступом.
Как работает поиск в каждой системе
Поиск — это функция, которая определяет, станет ли вики полезным инструментом или превратится в хранилище забытых файлов.
BookStack выполняет поиск по базе данных и предоставляет пользователям язык запросов, который можно освоить за минуту. Использование кавычек для фразы, как в "london meeting", требует точного совпадения строки. Квадратные скобки используются для поиска по тегам: [location=london] выполняет поиск по имени тега, значению или обоим параметрам, поддерживая сравнения с помощью !=, >= и like. Фигурные скобки позволяют фильтровать результаты по метаданным, как в {created_after:2016-12-30}. Любой точный термин, тег или фильтр можно инвертировать, добавив префикс -. BookStack ограничивает количество терминов каждого типа в одном запросе, поэтому слишком длинные запросы обрезаются, а не выполняются.
Wiki.js рассматривает поиск как подключаемый модуль. Документированные движки включают базовый движок базы данных, движок PostgreSQL, Elasticsearch, Algolia, AWS CloudSearch и Azure Search. Базовый движок подходит для нескольких сотен страниц. Если вы используете PostgreSQL, переключитесь на движок PostgreSQL в панели администратора, так как он использует полнотекстовый индекс самой базы данных вместо простого сопоставления. Оставьте Elasticsearch для вики такого размера, при котором вы готовы поддерживать и обновлять отдельную поисковую службу.
Outline выполняет поиск по полнотекстовым индексам PostgreSQL. Здесь нет выбора движка и параметров для настройки, при этом система также индексирует текст внутри загруженных документов. Для командной вики объемом в несколько тысяч документов это наименее трудозатратный вариант из трех. Однако здесь нет инструментов для оптимизации, если скорость работы системы станет недостаточной.
Что выбрать
Выбирайте BookStack, если хотите запустить вики сегодня же и предпочитаете спорить о содержании, а не о структуре. У него минимум компонентов: одно приложение PHP и одна база данных MySQL. Он подходит для внутренних руководств и документации для клиентов, а также для команд, где большинство авторов не являются инженерами. Его также проще всего резервировать из всех трех вариантов, так как все состояние системы — это один дамп базы данных плюс каталог с загруженными файлами.
Выбирайте Wiki.js, если вам нужен специфический редактор или особый метод аутентификации, которые не предлагают другие решения, или если вы импортируете большой объем существующего контента в формате Markdown или AsciiDoc и хотите сохранить структуру путей. Будьте готовы к тому, что стек будет тяжелее, и обязательно фиксируйте тег мажорной версии.
Выбирайте Outline, если качество текста имеет первостепенное значение, вики предназначена для команды, а не для публичного доступа, и у вас уже есть провайдер идентификации. Система вознаграждает за такую настройку редактором, которым действительно удобно пользоваться. Не выбирайте его в качестве своего первого self-hosted приложения.
Если ни один из трех вариантов не подходит, проблема обычно заключается в типе контента. Отсканированные счета и договоры следует хранить в системе управления документами, такой как Paperless-ngx, а не в вики; попытки принудительно разместить их там — основная причина, по которой многие вики забрасываются. Более широкий обзор того, что еще стоит разместить на собственном сервере, см. в списке рекомендуемых self-hosted решений на 2026 год.
Оценка ресурсов и резервное копирование
Все три приложения могут работать на небольшом VPS, однако минимальные требования зависят от используемого стека. BookStack состоит из одного процесса приложения и MySQL. Wiki.js использует процесс Node и PostgreSQL. Outline требует процесс Node, PostgreSQL и Redis, а также, как правило, внешний провайдер идентификации, поэтому для него требуется больше оперативной памяти.
Выполняйте резервное копирование базы данных и загружаемых файлов одновременно. Перед тем как полагаться на резервную копию, один раз восстановите её в тестовом экземпляре. Резервная копия вики, которая ни разу не была восстановлена, не гарантирует сохранность данных. Для BookStack это означает mysqldump и том /config. Для Wiki.js и Outline это означает pg_dump и том с данными, а для Outline также содержимое FILE_STORAGE_LOCAL_ROOT_DIR.
FAQ
Какую self-hosted вики проще всего установить?
BookStack. Это единое приложение на PHP с базой данных MySQL, а проект выпускает скрипт установки для Ubuntu 24.04, который за один проход настраивает Apache, MySQL 8.0 и PHP 8.3. Образу контейнера требуется только APP_KEY и учетные данные базы данных. Wiki.js добавляет среду выполнения Node и сервер PostgreSQL, а Outline дополнительно требует Redis и внешний провайдер идентификации.
Можно ли использовать Outline без Google или другого SSO-провайдера?
Нет. В Outline отсутствует вход по локальному имени пользователя и паролю. В примере конфигурации указано, что требуется как минимум один сторонний провайдер для входа, иначе у вас не будет никаких вариантов авторизации. Вы можете использовать Google, Slack, Microsoft Entra, Discord или любой стандартный сервер OpenID Connect, например, self-hosted Keycloak или Authentik. Запуск этого провайдера является частью затрат на эксплуатацию Outline.
Что лучше установить: Wiki.js 3 или Wiki.js 2?
Версию 2. По состоянию на июль 2026 года новейший релиз версии 2 — это 2.5.314 от мая 2026 года, а в документации к версии 3 прямо сказано, что это нестабильная бета-версия, которую не следует устанавливать в продуктовой среде. Зафиксируйте версию образа на ghcr.io/requarks/wiki:2, а не на latest, так как смена мажорной версии изменяет схему базы данных в работающем экземпляре.
У кого лучший поиск?
У каждого свои сильные стороны. BookStack предоставляет пользователям язык запросов с точными фразами, фильтрами по тегам, такими как [location=london], и фильтрами по метаданным, такими как {created_after:2016-12-30}; любой из этих терминов можно исключить, добавив в начале -. Outline не требует настройки и выполняет поиск по тексту внутри загруженных файлов. Wiki.js наиболее гибкая, так как вы сами выбираете движок, и на движок PostgreSQL стоит перейти, как только ваша вики перерастет несколько сотен страниц.
Смогу ли я позже перенести контент из одной системы в другую?
Частично, и вам следует рассчитывать на ручную работу. Все три системы поддерживают экспорт и импорт Markdown, поэтому текст страниц обычно сохраняется. Структура переносится не полностью: книги и главы BookStack не имеют аналогов во вложенных документах Outline, а пути Wiki.js не соответствуют фиксированной иерархии BookStack. Вложения, права доступа и история правок — это те элементы, которые вероятнее всего будут потеряны, поэтому перед окончательным переходом экспортируйте образец и проверьте их сохранность.