SSD Nodes Learn Hosting plans →
Руководства Matt ConnorАвтор: Matt Connor · Обновлено 2026-08-13

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

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

Какой self-hosted wiki выбрать

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

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

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

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

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 по умолчанию использует локальные учетные записи с email и паролем, а также поддерживает 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, переключитесь на соответствующий движок в панели администратора, так как он использует встроенный полнотекстовый индекс базы данных вместо простого сопоставления строк. Оставьте Elasticsearch для вики такого размера, при котором вы готовы поддерживать и обновлять отдельный поисковый сервис.

Outline выполняет поиск по полнотекстовым индексам PostgreSQL. Здесь нет выбора движка и параметров для настройки, при этом система также индексирует текст внутри загруженных документов. Для командной вики объемом в несколько тысяч документов это решение требует наименьших усилий из трех представленных. Однако в нем нет инструментов для оптимизации, если скорость поиска перестанет вас устраивать.

Что выбрать вам

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

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

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

Если ни один из трех вариантов не подходит, проблема обычно заключается в типе контента. Отсканированные счета и договоры должны храниться в системе управления документами, такой как Paperless-ngx, а не в вики; попытки принудительно разместить их там — причина, по которой многие вики в итоге забрасываются. Другое частое несоответствие — желание иметь рабочее пространство (workspace) вместо вики, где документы, таблицы и доска для рисования находятся на одном холсте. В этом случае self-hosted рабочее пространство AFFiNE подойдет лучше, чем любой из трех вышеперечисленных вариантов. Чтобы получить более широкое представление о том, что еще стоит разместить на собственном сервере, ознакомьтесь с кратким списком self-hosting решений на 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 прямо сказано, что это нестабильная бета-версия, которую не следует устанавливать в production. Закрепите версию образа на ghcr.io/requarks/wiki:2, а не на latest, так как смена мажорной версии изменяет схему базы данных в работающем экземпляре.

У кого лучший поиск?

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

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

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

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