BookStack, Wiki.js чи Outline: яку wiki обрати
Порівнюємо BookStack, Wiki.js і Outline за складністю запуску, редакторами, входом і пошуком. Є окремий вибір для solo-адміна та команди.
Яку self-hosted wiki варто розгорнути
Self-hosted wiki зберігає документи вашої команди в одному місці на сервері, яким ви керуєте. 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-stoppedAPP_URL має відповідати адресі, яку фактично вводять читачі, включно зі схемою та портом, якщо його вказано. Установіть його в http://localhost, а потім обслуговуйте сайт через HTTPS. Інакше згенеровані посилання та перенаправлення вестимуть на неправильний вузол, і читачі бачитимуть сторінку входу, яка постійно перенаправляє сама на себе. Якщо compose-файли для вас нові, перед цим матеріалом ознайомтеся з основами Docker Compose на VPS.
Запустіть застосунок і перевірте, що він відповідає, а не лише те, що контейнер працює:
docker compose up -d
docker compose ps
curl -sI http://127.0.0.1:6875/login200 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. Станом на July 2026 найновіший випуск версії 2 — 2.5.314, опублікований у May 2026. Версія 3 існує, і в її документації зазначено: «Цей сайт призначено для нестабільного бета-випуску Wiki.js 3.0. НЕ встановлюйте його у production». Вважайте тег :3 попередньою версією.
Під час першого відкриття Wiki.js проводить вас через налаштування у браузері, де створюється обліковий запис адміністратора. Поки ви не завершите налаштування, майстер буде доступний кожному, хто може підключитися до порту. Тому розмістіть сервіс за reverse proxy і TLS (захист транспортного рівня), перш ніж відкривати порт у firewall. Вікі на власному імені хоста природно розміщується за Traefik перед кількома застосунками Docker, якщо сервер розміщує більше одного такого сервісу.
Саме вибір редактора є причиною, через яку обирають Wiki.js. Один екземпляр може одночасно містити сторінки Markdown, сторінки у візуальному редакторі, сторінки з необробленим HTML і сторінки AsciiDoc. Це зручно під час імпорту старого вмісту у форматі, який ви не хочете конвертувати. Водночас так в одній вікі можуть з’явитися чотири внутрішні стилі оформлення. Тому визначте редактор за замовчуванням у перший день і зафіксуйте це рішення в документації.
Outline: найкращий редактор, найвимогливіші передумови
Outline — це те, що зазвичай мають на увазі, коли хочуть інструмент для нотаток, схожий на комерційні рішення. Це застосунок Node.js, а поточний випуск станом на July 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/dataPGSSLMODE=disable правильний лише тоді, коли база даних розміщена на тій самій машині або в тій самій мережі Docker. Не вказуйте його для бази даних, доступної через мережу, інакше з’єднання передаватиметься у відкритому вигляді. Вкладення більше не змушують використовувати об’єктне сховище: FILE_STORAGE=local записує завантажені файли до наведеної вище директорії. Ця директорія має бути томом, до якого контейнер може записувати, і вона має входити до резервних копій. Натомість задайте FILE_STORAGE=s3 зі значеннями AWS_*, якщо хочете зберігати ці файли у сумісному з S3 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.
Отже, реальна вартість Outline — це Outline, PostgreSQL, Redis і постачальник ідентифікації. Якщо ваша команда вже входить через Google Workspace або Microsoft Entra, останній компонент потребує десяти хвилин налаштування, і Outline стає дуже привабливим. Якщо ні, вам також доведеться самостійно розміщувати щось на кшталт Keycloak або Authentik. Це ще один сервіс, який потрібно оновлювати та резервувати. Плануйте обсяг пам’яті відповідно: за власними рекомендаціями Outline, потрібно приблизно 512 MB на кожен веб-процес. Значення задається через WEB_CONCURRENCY, додатково до ресурсів бази даних і Redis.
Як кожна система визначає, кому дозволено читати певні матеріали
BookStack з коробки підтримує локальні облікові записи з адресою електронної пошти та паролем, а також LDAP, SAML2 і OIDC як альтернативи. Дозволи налаштовують для кожної ролі. Їх також можна перевизначити для окремої полиці, книги, розділу або сторінки. Оскільки ієрархія фіксована, дозволи передаються вниз нею передбачуваним чином.
Wiki.js також постачається з локальними обліковими записами та підтримує довгий перелік стратегій автентифікації, які можна ввімкнути в адміністративній області. Правила для сторінок дозволяють або забороняють доступ за шаблоном шляху. Це дає широкі можливості, але водночас легко припуститися помилки, оскільки правило, написане для ops/*, непомітно охопить кожну сторінку, яку згодом буде розміщено за цим шляхом.
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. Він підходить для внутрішніх інструкцій і документації для клієнтів, а також для команд, де більшість авторів не є інженерами. Його також найпростіше резервувати, оскільки весь стан складається з дампа бази даних і каталогу uploads.
Вибирайте Wiki.js, якщо вам потрібен конкретний редактор або стратегія автентифікації, яких немає в інших варіантах, або якщо ви імпортуєте великий масив наявних матеріалів у форматі Markdown чи AsciiDoc і хочете зберегти структуру шляхів. Змиріться з тим, що запускатимете складніший стек, і зафіксуйте тег основної версії.
Вибирайте Outline, якщо якість написання має найвище значення, wiki призначена для команди, а не для публічного доступу, і у вас уже є постачальник ідентифікації. Така конфігурація дає редактор, яким людям справді зручно користуватися. Не вибирайте його як свій перший застосунок із самостійним розгортанням.
Якщо жоден із трьох варіантів не підходить, проблема зазвичай у типі вмісту. Скановані рахунки та договори слід зберігати в системі керування документами, як-от Paperless-ngx, а не у wiki. Саме спроби зберігати їх у wiki часто призводять до того, що такі wiki залишають без супроводу. Щоб ширше оцінити, які ще системи варто розмістити на власному сервері, дивіться короткий список варіантів для самостійного розгортання на 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
Яку самостійно розгорнуту wiki найпростіше встановити?
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, наприклад самостійно розгорнуті Keycloak чи Authentik. Розгортання такого постачальника є частиною витрат на використання Outline.
Встановлювати Wiki.js 3 чи Wiki.js 2?
Версію 2. Станом на July 2026 найновішим випуском версії 2 є 2.5.314 від May 2026. У документації версії 3 прямо зазначено, що це нестабільна бета-версія, яку не слід встановлювати у виробничому середовищі. Зафіксуйте образ на ghcr.io/requarks/wiki:2, а не на latest, оскільки зміна основної версії змінює схему бази даних у запущеному екземплярі.
Яка з них має найкращий пошук?
Кожна система має свої переваги. BookStack надає читачам мову запитів із точними фразами, фільтрами тегів, такими як [location=london], і фільтрами метаданих, такими як {created_after:2016-12-30}. Будь-який із цих термінів можна виключити, додавши на початку -. Outline не потребує налаштування та шукає текст у завантажених файлах. Wiki.js має найбільше можливостей налаштування, оскільки можна вибрати рушій. На рушій PostgreSQL варто перейти, щойно wiki перевищить кілька сотень сторінок.
Чи можна пізніше перенести вміст з однієї системи до іншої?
Частково, але слід очікувати ручної роботи. Усі три системи експортують та імпортують Markdown, тому текст сторінок зазвичай зберігається. Структура не переноситься належним чином: книги й розділи BookStack не мають відповідників у вкладених документах Outline, а шляхи Wiki.js не відповідають фіксованій ієрархії BookStack. Найімовірніше буде втрачено вкладення, дозволи та історію сторінок. Тому перед початком міграції експортуйте зразок і перевірте ці дані.