SSD Nodes Learn Hosting plans →
Руководства Matt ConnorАвтор: Matt Connor

Выбор self-hosted wiki: BookStack, Wiki.js или Outline

Сравнение популярных систем для документации по сложности настройки, редакторам и методам авторизации. Узнайте, какое решение лучше подходит для соло или команд.

Какую self-hosted wiki запустить

Self-hosted wiki размещает документы вашей команды в одном доступном для поиска месте на сервере под вашим контролем. BookStack, Wiki.js и Outline решают эту задачу. В основном они различаются объёмом настройки до загрузки первой страницы и тем, кому разрешён вход.

BookStack проще всего развернуть, и он строже всего задаёт структуру. Wiki.js предоставляет самый широкий выбор редакторов в рамках одного дерева страниц. Outline обеспечивает лучший из этих трёх редакторов для написания текста, но его документированная production-конфигурация требует внешнего identity provider для создания исходного workspace.

Всё ниже основано на документации самих проектов и опубликованных ими конфигурационных файлах. Это сравнение возможностей, а не benchmark. Номера версий и требования привязаны к дате, поскольку все три проекта активно развиваются.

Структура — это главный выбор

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.09, выпущенная 24 сентября 2026 года, а последний стабильный релиз — 26.09.2, релиз безопасности от 20 октября 2026 года. Начиная с 26.09 необходимо задать значение APP_KEY; приведённые ниже шаги для контейнера уже это учитывают. 21 октября 2026 года BookStack также опубликовал критическое уведомление о безопасности PHP: обновите базовые пакеты PHP либо загрузите и пересоздайте контейнер с исправленным образом, поскольку сама версия BookStack не подтверждает, что PHP исправлен.

Проект официально поддерживает скрипты установки и инструкции для перечисленных им выпусков Ubuntu LTS: сейчас это 22.04, 24.04 и 26.04. Для других сред проект иногда публикует неподдерживаемые инструкции и скрипты. Скрипт для 24.04 устанавливает Apache, MySQL 8.0 и PHP 8.3. В 26.04 вместо этого используйте installation-ubuntu-26.04.sh в приведённых ниже командах; он устанавливает MySQL 8.4 и PHP 8.5.

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

Перед запуском прочитайте предупреждение в этом скрипте. В документации указано: "ONLY FOR A FRESH OS, it will install Apache, MySQL 8.0 & PHP 8.3 and could OVERWRITE any existing web setup on the machine". Скрипт для 24.04 проверяет существующую конфигурацию Apache и данные MySQL и прерывает установку, если находит что-либо из этого. В такой ситуации используйте контейнеры либо установите BookStack вручную поверх существующего LAMP-стека на Ubuntu 24.04.

Для контейнера используется образ LinuxServer.io — один из двух вариантов контейнерной установки от сообщества, перечисленных в документации BookStack. BookStack требуется ключ шифрования сессий, и без него он не будет обслуживать страницы, поэтому сначала сгенерируйте его.

docker run -it --rm --entrypoint /bin/bash lscr.io/linuxserver/bookstack:latest appkey

Скопируйте выведенное значение в APP_KEY, затем запишите сервис. Этому сервису также требуется существующая база данных MySQL или MariaDB. Задайте значения DB_* в соответствии с этой базой, поскольку данный фрагмент не создаёт сервис базы данных.

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 для диагностики нужен журнал ошибок приложения. По умолчанию BookStack записывает ошибки в файл журнала, а не в вывод контейнера, поэтому откройте на хосте ./config/log/bookstack/laravel.log, чтобы увидеть причину. 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. По состоянию на October 27, 2026 новейшим выпуском версии 2 является 2.5.317 — сборка с исправлениями ошибок от October 23, 2026, в которой образ пересобран с последними обновлениями безопасности Node. Выпуски версии 2 теперь публикуются из отдельного репозитория requarks/wiki-v2, а тег образа :2 по-прежнему указывает на них. Версия 3 находится в публичной бета-версии. В документации по её установке указано, что её образы имеют тег 3.0.0-beta, а обычные теги 3 и 3.0 не будут работать до завершения бета-фазы. Считайте её предварительной версией, а не целью для production. Предыдущий выпуск, 2.5.316 от October 2, 2026, добавил утилиту экспорта для последующего переноса содержимого в версию 3.

При первой загрузке Wiki.js проводит вас через настройку в браузере, которая создаёт учётную запись администратора. Пока настройка не завершена, этот мастер доступен всем, кто подключается к порту. Поэтому разместите сервис за reverse proxy и TLS (transport layer security) до открытия порта в firewall. Wiki с отдельным именем хоста естественно размещать за Traefik перед несколькими приложениями Docker, если на сервере работает больше одного сервиса.

Причина выбора Wiki.js — выбор редактора. Один экземпляр может одновременно содержать страницы Markdown, страницы визуального редактора, страницы с исходным HTML и страницы AsciiDoc. Это помогает при импорте старого содержимого в формате, который вы предпочли бы не преобразовывать. Одновременно это может привести к появлению в одной wiki четырёх внутренних стандартов оформления. Поэтому определите редактор по умолчанию в первый день и зафиксируйте это решение.

Лучший редактор: наиболее сложные предварительные требования

Outline — это то, что обычно имеют в виду, когда хотят инструмент для заметок, похожий на коммерческие продукты. Это приложение Node.js. По состоянию на October 27, 2026 текущая версия — 1.12.0, выпущенная October 23, 2026. В этой версии Docker image переведён на Node, устраняющий несколько недавно раскрытых уязвимостей Node, поэтому обновите старые установки. В примере файла окружения перечислены необходимые компоненты: 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 network. Не указывайте его для базы данных, доступной по сети, иначе соединение будет передавать данные без шифрования. Вложения больше не требуют object storage: FILE_STORAGE=local сохраняет загруженные файлы в указанном выше каталоге. Этот каталог должен быть volume, доступным контейнеру для записи, и входить в резервные копии. Вместо этого задайте FILE_STORAGE=s3, используя значения AWS_*, если хотите хранить эти файлы в S3 compatible bucket.

Теперь о том, что часто становится неожиданностью. В Outline нет встроенной аутентификации по имени пользователя и паролю. В собственной примерной конфигурации указано, что нужны учётные данные для входа через стороннего провайдера: «для работающей установки требуется хотя бы ОДИН из этих вариантов, иначе у вас не будет способов входа». В документации перечислены Google, Slack, Microsoft Entra, Discord и любой сервер OpenID Connect (OIDC) через OIDC_CLIENT_ID, OIDC_CLIENT_SECRET, OIDC_AUTH_URI, OIDC_TOKEN_URI и OIDC_USERINFO_URI. В существующих рабочих пространствах также можно включить passkeys и ссылки или коды, отправляемые по электронной почте. Для входа по электронной почте требуется SMTP. Он не отменяет SSO для учётных записей, связанных с SSO-провайдером.

Таким образом, реальные затраты на документированную production-конфигурацию Outline включают Outline, PostgreSQL, Redis и identity provider. Если команда уже выполняет вход через Google Workspace или Microsoft Entra, Outline становится очень привлекательным вариантом. Если нет, придётся самостоятельно размещать что-то вроде Keycloak или Authentik. Это ещё один сервис, который нужно обновлять и включать в резервное копирование. Учтите это при расчёте памяти: согласно рекомендациям Outline, требуется примерно 512 MB на каждый web process. Значение задаётся через WEB_CONCURRENCY, не считая потребности базы данных и Redis.

Как каждая система определяет, кому что разрешено читать

BookStack изначально предоставляет локальные учётные записи с email и паролем, а также поддерживает LDAP, SAML2 и OIDC в качестве альтернатив. Разрешения задаются для каждой роли и могут переопределяться на уровне отдельной полки, книги, главы или страницы. Разрешения книги и главы наследуются дочерним содержимым, если их явно не переопределить; разрешения полки необходимо явно скопировать в книги.

Wiki.js также выпускается с поддержкой локальных учётных записей и добавляет большой список стратегий аутентификации, которые можно включить в панели администратора. Правила для страниц разрешают или запрещают доступ по шаблону пути. Это даёт широкие возможности, но такие правила легко настроить неправильно: правило, написанное для ops/*, без предупреждения охватит все страницы, которые позднее будут размещены по этому пути.

Outline использует ваш identity provider для членства через SSO, а внутри Outline доступ управляется на уровне коллекции, документа и группы. Пользователи, удалённые из identity provider, выйдут из системы при следующей загрузке Outline; чтобы немедленно завершить существующие сеансы, приостановите их учётные записи в Outline.

Как работает поиск в каждой системе

Поиск показывает, насколько wiki полезна, или превращает её в папку с забытыми файлами.

BookStack ищет по базе данных и предоставляет читателям язык запросов, который можно освоить за минуту. Кавычки вокруг фразы, как в "london meeting", требуют точного совпадения этой строки. Квадратные скобки используются для поиска тегов: [location=london] выполняет поиск по имени тега, его значению или обоим параметрам, а также поддерживает сравнения !=, >= и like. Фигурные скобки фильтруют результаты по метаданным, как в {created_after:2016-12-30}. Любой точный запрос, запрос по тегу или фильтр можно исключить, добавив перед ним -. BookStack ограничивает количество условий каждого типа в одном запросе, поэтому слишком длинный запрос обрезается, а не выполняется.

Wiki.js использует подключаемый модуль поиска. В документации указаны базовый поисковый движок базы данных, PostgreSQL, Elasticsearch, Algolia, AWS CloudSearch и Azure Search. Базовый движок ищет по заголовкам, описаниям и путям, но не по содержимому страниц. Если вы используете PostgreSQL, переключите поисковый движок на PostgreSQL в административной области, поскольку он использует собственный полнотекстовый индекс базы данных, а не простое сопоставление. Elasticsearch имеет смысл использовать для wiki, которая достаточно велика, чтобы оправдать запуск и обновление второго поискового сервиса.

Outline выполняет поиск по полнотекстовым индексам PostgreSQL. Встроенный поиск по ключевым словам не требует отдельного поискового сервиса. Для командной wiki с несколькими тысячами документов это самый простой в обслуживании вариант из трёх систем.

Что подходит именно вам

Выбирайте BookStack, если хотите запустить wiki уже сегодня и предпочитаете обсуждать содержание, а не структуру. В нём меньше всего компонентов: одно PHP-приложение и одна база данных MySQL. Он подходит для внутренних runbook и документации для клиентов, а также для команд, где большинство авторов не являются инженерами. Из этих трёх систем его также проще всего резервировать, поскольку достаточно одного дампа базы данных, загруженных файлов и конфигурации .env, включая APP_KEY.

Выбирайте Wiki.js, если вам нужен определённый редактор или стратегия аутентификации, которых нет в других системах, либо если вы импортируете большой объём существующих файлов Markdown или AsciiDoc и хотите сохранить структуру путей. При этом учитывайте, что будете запускать более сложный стек, и зафиксируйте tag основной версии.

Выбирайте Outline, если для вас важнее всего качество текста, wiki предназначена для команды, а не для общего доступа, и у вас уже есть identity provider. При такой конфигурации вы получите редактор, которым действительно удобно пользоваться. Не выбирайте Outline в качестве первого self-hosted приложения.

Если ни одна из трёх систем вам не подходит, причина обычно связана с типом содержимого. Сканированные счета и договоры следует хранить в системе управления документами, например Paperless-ngx, а не в wiki. Попытка использовать wiki для таких документов часто приводит к тому, что её забрасывают. Ещё одна распространённая проблема — когда требуется workspace, а не wiki: документы, таблицы и whiteboard должны находиться на одном canvas. В таком случае self-hosted workspace AFFiNE подходит лучше любой из трёх систем выше. Чтобы узнать, какие ещё приложения стоит разместить на собственном сервере, см. краткий список 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 wiki проще всего установить?

BookStack. Это одно PHP-приложение с базой данных MySQL. Проект выпускает скрипт установки для Ubuntu 24.04, который за один запуск настраивает Apache, MySQL 8.0 и PHP 8.3. Для образа контейнера нужны APP_KEY, APP_URL и учётные данные существующей базы данных. Wiki.js добавляет среду выполнения Node и сервер PostgreSQL, а Outline — Redis и внешнего провайдера идентификации для документированной первоначальной настройки.

Можно ли использовать Outline без Google или другого SSO-провайдера?

Для документированной настройки production-среды требуется провайдер, чтобы создать первоначальное рабочее пространство. В Outline нет локального входа по имени пользователя и паролю. В примере конфигурации указано, что требуется как минимум один сторонний провайдер входа, иначе варианты входа будут полностью отсутствовать. Можно использовать Google, Slack, Microsoft Entra, Discord или любой сервер OpenID Connect, например self-hosted Keycloak или Authentik. В существующих рабочих пространствах можно включить passkeys либо ссылки и коды, отправляемые по электронной почте. Для входа по электронной почте требуется SMTP. Учётные записи, связанные с SSO, по-прежнему используют этого провайдера.

Следует устанавливать Wiki.js 3 или Wiki.js 2?

Версию 2. По состоянию на 27 октября 2026 года последний релиз версии 2 — 2.5.317 от 23 октября 2026 года, а версия 3 всё ещё находится в статусе beta, и её образы содержат тег 3.0.0-beta. Зафиксируйте образ на ghcr.io/requarks/wiki:2, а не на latest, поскольку смена основной версии изменяет схему базы данных в работающем экземпляре.

У какой системы лучший поиск?

Они сильны в разных аспектах. BookStack предоставляет читателям язык запросов с точными фразами, фильтрами по тегам, такими как [location=london], и фильтрами по метаданным, такими как {created_after:2016-12-30}. Любой из этих терминов можно исключить с помощью ведущего -. Встроенному поиску Outline по ключевым словам не требуется отдельный поисковый сервис. Wiki.js лучше всего настраивается, поскольку движок выбираете вы, а движок PostgreSQL выполняет поиск по содержимому страниц, чего не делает базовый движок.

Можно ли позднее перенести содержимое из одной системы в другую?

Частично, и следует ожидать ручной работы. Все три системы экспортируют Markdown, но встроенный импорт BookStack принимает формат Portable ZIP, поэтому один только Markdown нельзя напрямую импортировать в BookStack. Структура переносится некорректно: книгам и главам BookStack нет эквивалента во вложенных документах Outline, а пути Wiki.js не соответствуют фиксированной иерархии BookStack. Вложения, разрешения и история страниц — это те части, которые с наибольшей вероятностью будут утрачены, поэтому перед тем, как принять решение о миграции, экспортируйте пример и проверьте их.

Была ли эта статья полезной?

#bookstack#wikijs#outline#wiki#self-hosting#knowledge-base