BookStack, Wiki.js чи Outline: яку 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Перед запуском прочитайте попередження в цьому скрипті. У документації зазначено: "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". Якщо сервер уже приймає з’єднання на порту 80, скрипт займає цей порт і перезаписує конфігурацію Apache. У такому випадку використовуйте контейнери або встановіть BookStack вручну поверх наявного LAMP stack на 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 існує, і в її документації зазначено: "Цей сайт призначено для нестабільного beta-випуску Wiki.js 3.0. НЕ встановлюйте його в production." Вважайте тег :3 попередньою версією.
Під час першого відкриття Wiki.js проводить налаштування в браузері та створює обліковий запис адміністратора. Поки ви не завершите цей процес, майстер налаштування буде доступний кожному, хто має доступ до порту. Тому перед відкриттям порту у firewall розмістіть сервіс за reverse proxy та налаштуйте TLS (transport layer security). Якщо сервер розміщує кілька Docker-застосунків, wiki на власному імені хоста природно розміщується за Traefik перед кількома Docker-застосунками.
Саме вибір редактора є причиною, через яку обирають Wiki.js. Один екземпляр може одночасно містити сторінки Markdown, сторінки у візуальному редакторі, сторінки з raw HTML і сторінки AsciiDoc. Це зручно під час імпорту старого вмісту у форматі, який ви не хочете конвертувати. Водночас так в одній wiki можна отримати чотири внутрішні стилі оформлення. Тому визначте редактор за замовчуванням у перший день і зафіксуйте це рішення в документації.
Структура: найкращий редактор і найскладніші залежності
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 network. Для бази даних, до якої підключаються через мережу, не вказуйте його, інакше з’єднання передаватиметься у відкритому вигляді. Вкладення більше не змушують використовувати object storage: FILE_STORAGE=local записує завантажені файли до вказаного вище каталогу. Цей каталог має бути volume, доступним контейнеру для запису, і входити до резервних копій. Якщо потрібно зберігати ці файли в S3 compatible bucket, задайте FILE_STORAGE=s3 замість цього, використовуючи значення AWS_*.
Тепер про те, що часто дивує користувачів. Outline не має вбудованої автентифікації за іменем користувача та паролем. У власному прикладі конфігурації Outline зазначає, що облікові дані для входу через стороннього провайдера є обов’язковими: "at least ONE OF these is required for a working installation or you'll have no sign-in options". Документовані провайдери включають Google, Slack, Microsoft Entra, Discord і будь-який generic OpenID Connect (OIDC) server через OIDC_CLIENT_ID, OIDC_CLIENT_SECRET, OIDC_AUTH_URI, OIDC_TOKEN_URI та OIDC_USERINFO_URI.
Отже, фактичний склад Outline — це Outline, PostgreSQL, Redis і identity provider. Якщо ваша команда вже входить через Google Workspace або Microsoft Entra, налаштування останнього компонента займає приблизно десять хвилин, і Outline стає дуже привабливим варіантом. Якщо ні, вам також доведеться самостійно розгортати щось на зразок Keycloak або Authentik. Це ще один сервіс, який потрібно оновлювати та включати до резервних копій. Плануйте обсяг пам’яті відповідно: власні рекомендації Outline передбачають приблизно 512 MB на один web process, що задається через WEB_CONCURRENCY, додатково до ресурсів для бази даних і Redis.
Як кожна система визначає, хто може читати певний вміст
BookStack з коробки має локальні облікові записи з електронною поштою та паролем і підтримує LDAP, SAML2 та OIDC як альтернативи. Дозволи задаються для кожної ролі, а для окремих shelves, books, chapters або pages їх можна перевизначити. Оскільки ієрархія фіксована, дозволи успадковуються в ній передбачуваним способом.
Wiki.js також постачається з локальними обліковими записами та додає довгий список стратегій, які можна ввімкнути в адміністративній області. Правила для сторінок надають або забороняють доступ за шаблоном шляху. Це потужний механізм, у якому легко помилитися, оскільки правило, написане для ops/*, непомітно охоплює кожну сторінку, яку ви пізніше розмістите за цим шляхом.
Outline повністю делегує це питання зовнішній системі. Членство визначається вашим identity provider, а в Outline доступом можна керувати на рівні collections і groups. Після звільнення працівника в системі не залишається локального облікового запису, що є важливою перевагою, якщо identity provider уже використовується як система для деактивації доступу.
Як працює пошук у кожній системі
Пошук визначає, наскільки 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 і документації для клієнтів, а також для команд, де більшість авторів не є інженерами. Його також найпростіше резервувати, оскільки весь стан складається з дампа бази даних і каталогу uploads.
Оберіть Wiki.js, якщо вам потрібен певний редактор або конкретна стратегія автентифікації, яких немає в інших варіантах, або якщо ви імпортуєте великий масив наявних файлів Markdown чи AsciiDoc і хочете зберегти структуру шляхів. Врахуйте, що запускатимете складніший стек, і зафіксуйте тег основної версії.
Оберіть Outline, якщо найважливішою є якість написання, wiki призначена для команди, а не для публічного доступу, і у вас уже є identity provider. За таке налаштування ви отримуєте редактор, яким користувачам справді зручно користуватися. Не обирайте його як перший self-hosted застосунок.
Якщо жоден із трьох варіантів не підходить, зазвичай проблема в типі вмісту. Скановані рахунки та договори слід зберігати в системі керування документами, наприклад Paperless-ngx, а не у wiki. Спроба зберігати їх у wiki часто призводить до того, що її залишають без супроводу. Інша поширена невідповідність — коли вам потрібен workspace, а не wiki: документи, таблиці та whiteboard на одному полотні. У такому разі self-hosted workspace AFFiNE підходить краще, ніж будь-який із трьох наведених варіантів. Щоб ширше оцінити, які ще рішення варто розмістити на власному сервері, див. список рекомендованих self-hosted рішень на 2026 рік.
Розміри та резервні копії
Усі три системи можна розмістити на невеликому VPS. Мінімальні реалістичні вимоги відрізняються через компоненти, які працюють за кожною з них. BookStack — це один процес застосунку та MySQL. Wiki.js — це процес Node і PostgreSQL. Outline — це процес Node, PostgreSQL і Redis, зазвичай також identity provider. Тому для нього слід передбачити більше пам’яті.
Створюйте резервні копії бази даних і завантажених файлів разом. Перед використанням резервної копії відновіть їх у тимчасовому екземплярі. Резервна копія wiki, яку ніхто не перевіряв відновленням, є лише припущенням. Для 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 і облікові дані бази даних. 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. Станом на July 2026 найновішим випуском версії 2 є 2.5.314 від May 2026. У документації до версії 3 прямо зазначено, що це нестабільна бета-версія, яку не слід встановлювати в production. Зафіксуйте образ на ghcr.io/requarks/wiki:2, а не на latest, оскільки зміна major version змінює схему бази даних у запущеному екземплярі.
У якої системи найкращий пошук?
Вони мають різні переваги. BookStack надає читачам мову запитів із пошуком точних фраз, фільтрами тегів, наприклад [location=london], і фільтрами метаданих, наприклад {created_after:2016-12-30}. Будь-який із цих термінів можна виключити, додавши на початку -. Outline не потребує налаштування та шукає текст усередині завантажених файлів. Wiki.js має найбільше можливостей для налаштування, оскільки можна вибрати рушій. Перейти на рушій PostgreSQL варто одразу, щойно wiki виросте до кількох сотень сторінок.
Чи можна пізніше перенести вміст з однієї системи в іншу?
Частково. Слід очікувати ручної роботи. Усі три системи експортують та імпортують Markdown, тому текст сторінок зазвичай зберігається. Структура не переноситься належним чином: книги й розділи BookStack не мають відповідників у вкладених документах Outline, а шляхи Wiki.js не відповідають фіксованій ієрархії BookStack. Найімовірніше буде втрачено вкладення, дозволи та історію сторінок. Тому спочатку експортуйте зразок і перевірте ці елементи, перш ніж розпочинати міграцію.