SSD Nodes Learn Hosting plans →
Przewodniki Matt ConnorAutor: Matt Connor · Zaktualizowano 2026-08-13

BookStack, Wiki.js czy Outline: którą wiki wybrać?

Porównanie systemów wiki typu self-hosted. Analiza wymagań konfiguracyjnych, edytorów oraz metod autoryzacji. Sprawdź, która aplikacja najlepiej sprawdzi się w pracy zespołowej.

Którą wiki z własnym hostingiem wybrać

Wiki z własnym hostingiem pozwala zgromadzić dokumentację zespołu w jednym przeszukiwalnym miejscu na serwerze pod Twoją kontrolą. BookStack, Wiki.js oraz Outline realizują to zadanie. Różnią się one głównie zakresem konfiguracji wymaganej przed załadowaniem pierwszej strony oraz zasadami dostępu dla użytkowników.

BookStack jest najlżejszy w uruchomieniu i narzuca najbardziej konkretną strukturę. Wiki.js oferuje największy wybór edytorów w ramach jednego drzewa stron. Outline zapewnia najlepsze wrażenia z pisania spośród całej trójki, jednak nie pozwala na logowanie, dopóki nie zostanie skonfigurowany zewnętrzny dostawca tożsamości.

Poniższe zestawienie opracowano na podstawie dokumentacji projektów oraz opublikowanych plików konfiguracyjnych. Jest to porównanie możliwości, a nie test wydajności. Numery wersji oraz wymagania zostały opatrzone datą, ponieważ wszystkie trzy projekty podlegają ciągłym zmianom.

Struktura to kluczowy wybór

BookStack narzuca określoną formę treści. Strona znajduje się wewnątrz książki, książka może zawierać rozdziały, a półki grupują książki. Nie ma możliwości utworzenia piątego poziomu. To ograniczenie stanowi o wartości produktu: nowy autor wie, gdzie umieścić stronę, ponieważ istnieje tylko jedno poprawne miejsce. Kosztem jest konieczność dopasowania treści, która nie wpisuje się w ten schemat.

Wiki.js wykorzystuje drzewo ścieżek, podobnie jak foldery na dysku. Strona w ops/backup/restic znajduje się tam, gdzie zostanie umieszczona, a użytkownik sam decyduje o głębokości struktury. Nic nie stoi na przeszkodzie, aby dwie osoby sklasyfikowały ten sam temat w dwóch różnych gałęziach, dlatego instancja Wiki.js wymaga osoby odpowiedzialnej za utrzymanie porządku w drzewie.

Outline korzysta z kolekcji, w których dokumenty są zagnieżdżone w innych dokumentach. Przenoszenie dokumentu odbywa się za pomocą przeciągnięcia myszą. Jest to najbardziej elastyczne z omawianych rozwiązań, przez co najłatwiej doprowadzić do utraty przejrzystości struktury.

BookStack: minimalna instalacja

BookStack to aplikacja PHP korzystająca z bazy danych MySQL. Według stanu na lipiec 2026 r. udokumentowane wymagania to PHP 8.2 lub nowszy oraz MySQL 8.0 lub MariaDB 10.6 (lub nowsze), a także Composer 2.2 lub nowszy w przypadku instalacji ze źródeł. Obecna linia wydawnicza to 26.05.

Projekt publikuje jeden skrypt instalacyjny dla każdego wydania Ubuntu. Skrypt dla wersji 24.04 automatycznie instaluje Apache, MySQL 8.0 oraz 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

Przed uruchomieniem skryptu należy zapoznać się z ostrzeżeniem. Dokumentacja wskazuje, że jest on przeznaczony „WYŁĄCZNIE DLA CZYSTEGO SYSTEMU, zainstaluje Apache, MySQL 8.0 oraz PHP 8.3 i może NADPISAĆ każdą istniejącą konfigurację serwera WWW na maszynie”. Na serwerze, który już obsługuje ruch na porcie 80, skrypt przejmie ten port i nadpisze konfigurację Apache. W takim przypadku należy użyć kontenerów lub zainstalować BookStack ręcznie na istniejącym stosie LAMP na Ubuntu 24.04.

Metoda kontenerowa wykorzystuje obraz LinuxServer.io, co jest opcją zalecaną przez dokumentację BookStack. BookStack wymaga klucza szyfrowania sesji i nie będzie wyświetlał stron bez jego posiadania, dlatego należy go najpierw wygenerować.

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

Skopiuj wyświetloną wartość do APP_KEY, a następnie utwórz usługę:

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 musi odpowiadać adresowi, który faktycznie wpisują użytkownicy, wliczając w to schemat oraz ewentualny port. Ustaw go na http://localhost; w przeciwnym razie serwis będzie serwowany przez HTTPS, a wygenerowane linki i przekierowania będą wskazywać na błędny host, co użytkownicy zobaczą jako stronę logowania zapętlającą się w nieskończoność. Jeśli pliki compose są nowością, przed przystąpieniem do tej konfiguracji zapoznaj się z podstawami Docker Compose na VPS.

Uruchom usługę i sprawdź, czy aplikacja odpowiada, a nie tylko czy kontener działa:

docker compose up -d
docker compose ps
curl -sI http://127.0.0.1:6875/login

Kod 200 OK oznacza, że aplikacja PHP uruchomiła się i uzyskała połączenie z bazą danych. Kod 500 niemal zawsze oznacza, że APP_KEY jest puste lub poświadczenia bazy danych są nieprawidłowe, a docker compose logs bookstack wyświetla, który z tych dwóch problemów występuje.

Wiki.js: jedno drzewo, wielu redaktorów

Wiki.js to aplikacja Node.js. Udokumentowana konfiguracja Docker łączy ją z PostgreSQL, chociaż oprogramowanie obsługuje również MySQL, MariaDB, MSSQL oraz SQLite. Poniżej znajduje się plik compose pochodzący z oficjalnej strony projektu 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:

Zmień POSTGRES_PASSWORD oraz DB_PASS przed uruchomieniem, ponieważ stanowią one jedną parę poświadczeń, a przykładowa wartość jest publicznie znana. Tag został celowo przypięty do ghcr.io/requarks/wiki:2. Dokumentacja odradza stosowanie latest, ponieważ skok między głównymi wersjami zmienia schemat bazy danych w działającej instancji.

Wersja 2 jest linią produkcyjną. Według stanu na lipiec 2026 najnowsze wydanie wersji 2 to 2.5.314 z maja 2026. Istnieje wersja 3, a jej dokumentacja stwierdza: "Ta strona dotyczy niestabilnego wydania beta Wiki.js 3.0. NIE należy instalować jej w środowisku produkcyjnym". Traktuj tag :3 jako wersję poglądową.

Przy pierwszym uruchomieniu Wiki.js przeprowadza użytkownika przez konfigurację w przeglądarce, która tworzy konto administratora. Do momentu zakończenia tego procesu każdy, kto uzyska dostęp do portu, zobaczy kreator, dlatego umieść usługę za reverse proxy i TLS (transport layer security) przed otwarciem firewalla. Wiki z własną nazwą hosta naturalnie wpisuje się w schemat Traefik przed kilkoma aplikacjami Docker, gdy serwer obsługuje więcej niż tę jedną usługę.

Wybór edytora jest powodem, dla którego użytkownicy wybierają Wiki.js. Jedna instancja może przechowywać strony Markdown, strony edytora wizualnego, surowy kod HTML oraz strony AsciiDoc obok siebie. Pomaga to podczas importowania starych treści w formacie, którego nie chcesz konwertować. Jest to również sposób na uzyskanie czterech różnych stylów w jednej wiki, dlatego ustal domyślny edytor pierwszego dnia i zapisz tę decyzję.

Zarys: najlepszy edytor, wymagające wymagania wstępne

Zarys (Outline) jest tym, czego użytkownicy oczekują, gdy poszukują narzędzia do notatek o jakości komercyjnej. Jest to aplikacja Node.js, a jej bieżące wydanie z lipca 2026 roku to 1.9.2. Przykładowy plik środowiskowy zawiera listę niezbędnych komponentów: PostgreSQL przez DATABASE_URL, Redis przez REDIS_URL, dwa losowe klucze tajne oraz publicznie dostępny URL.

openssl rand -hex 32
openssl rand -hex 32

Uruchom to polecenie dwukrotnie i zachowaj obie wartości. Pierwsza stanie się SECRET_KEY, druga UTILS_SECRET. Rdzeń pliku środowiskowego wygląda następująco:

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 jest poprawne tylko wtedy, gdy baza danych znajduje się na tej samej maszynie lub w tej samej sieci Docker. W przypadku bazy danych dostępnej przez sieć należy pominąć ten parametr, w przeciwnym razie połączenie będzie przesyłane otwartym tekstem. Załączniki nie wymagają już korzystania z pamięci obiektowej: FILE_STORAGE=local zapisuje pliki w powyższym katalogu, który musi być wolumenem z uprawnieniami do zapisu dla kontenera i być uwzględniony w kopiach zapasowych. Jeśli pliki mają trafiać do zasobnika zgodnego z S3, należy skonfigurować FILE_STORAGE=s3 przy użyciu wartości AWS_*.

Teraz część, która zaskakuje użytkowników. Outline nie posiada wbudowanego mechanizmu logowania za pomocą nazwy użytkownika i hasła. Przykładowa konfiguracja wskazuje na konieczność użycia zewnętrznych poświadczeń: „wymagane jest przynajmniej JEDNO z poniższych, w przeciwnym razie instalacja nie będzie posiadać opcji logowania”. Dokumentacja wymienia dostawców takich jak Google, Slack, Microsoft Entra, Discord oraz dowolny serwer OpenID Connect (OIDC) poprzez OIDC_CLIENT_ID, OIDC_CLIENT_SECRET, OIDC_AUTH_URI, OIDC_TOKEN_URI oraz OIDC_USERINFO_URI.

Rzeczywisty koszt utrzymania Outline to Outline plus PostgreSQL, Redis oraz dostawca tożsamości. Jeśli zespół korzysta już z Google Workspace lub Microsoft Entra, ostatni element zajmie dziesięć minut konfiguracji, co czyni Outline bardzo atrakcyjnym rozwiązaniem. W przeciwnym razie konieczne jest samodzielne hostowanie usług typu Keycloak lub Authentik, co oznacza kolejną usługę do aktualizacji i tworzenia kopii zapasowych. Należy odpowiednio zaplanować zasoby pamięci: według wytycznych Outline, jeden proces webowy wymaga około 512 MB pamięci, co określa WEB_CONCURRENCY, nie wliczając w to bazy danych oraz Redis.

Sposób zarządzania uprawnieniami do odczytu

BookStack oferuje wbudowaną obsługę kont lokalnych z uwierzytelnianiem e-mail i hasłem, a także wspiera LDAP, SAML2 oraz OIDC jako alternatywne metody. Uprawnienia definiuje się dla poszczególnych ról i można je nadpisywać na poziomie pojedynczej półki, książki, rozdziału lub strony. Ze względu na stałą hierarchię, uprawnienia są dziedziczone w sposób przewidywalny.

Wiki.js również udostępnia konta lokalne i oferuje szeroką listę strategii uwierzytelniania, które można aktywować w panelu administracyjnym. Reguły dotyczące stron pozwalają na przyznawanie lub odbieranie dostępu na podstawie wzorców ścieżek. Jest to rozwiązanie potężne, ale podatne na błędy, ponieważ reguła utworzona dla ops/* automatycznie obejmuje każdą stronę, która zostanie później umieszczona w tej ścieżce.

Outline całkowicie deleguje kwestię zarządzania tożsamością. Członkostwo jest synchronizowane z dostawcą tożsamości, a wewnątrz Outline dostęp kontroluje się na poziomie kolekcji i grup. Dzięki temu po odejściu pracownika z firmy nie pozostają żadne aktywne konta lokalne, co stanowi istotną zaletę w przypadku, gdy dostawca tożsamości jest głównym systemem służącym do wygaszania uprawnień.

Jak działa wyszukiwanie w poszczególnych rozwiązaniach

Wyszukiwanie decyduje o tym, czy wiki staje się użytecznym narzędziem, czy jedynie zbiorem zapomnianych plików.

BookStack przeszukuje bazę danych i udostępnia użytkownikom język zapytań, którego można nauczyć się w minutę. Ujęcie frazy w cudzysłów, jak w "london meeting", wymusza wyszukanie dokładnie tego ciągu znaków. Nawiasy kwadratowe służą do wyszukiwania tagów: [location=london] dopasowuje wyniki według nazwy tagu, wartości lub obu tych elementów, przy czym dostępne operatory porównania to !=, >= oraz like. Nawiasy klamrowe pozwalają filtrować metadane, jak w {created_after:2016-12-30}. Każdy termin – dokładny, tag lub filtr – można wykluczyć, poprzedzając go znakiem -. BookStack ogranicza liczbę terminów każdego typu w jednym zapytaniu, więc zbyt długie zapytania są przycinane zamiast wykonywane.

Wiki.js traktuje wyszukiwanie jako moduł typu plug-in. Udokumentowane silniki obejmują podstawowy silnik bazodanowy, silnik PostgreSQL, Elasticsearch, Algolia, AWS CloudSearch oraz Azure Search. Silnik podstawowy sprawdza się w przypadku kilkuset stron. W przypadku korzystania z PostgreSQL należy przełączyć się na silnik PostgreSQL w panelu administracyjnym, ponieważ wykorzystuje on natywny indeks pełnotekstowy bazy danych zamiast prostego dopasowywania ciągów. Elasticsearch warto zachować dla wiki na tyle dużych, że utrzymywanie i aktualizowanie dodatkowej usługi wyszukiwania jest uzasadnione.

Outline przeszukuje indeksy pełnotekstowe PostgreSQL. Nie ma tu możliwości wyboru silnika ani opcji dostrajania, system przeszukuje również treść przesłanych dokumentów. Dla wiki zespołowej liczącej kilka tysięcy dokumentów jest to rozwiązanie wymagające najmniej pracy z całej trójki. Nie ma jednak żadnych mechanizmów optymalizacji, jeśli wydajność przestanie być wystarczająca.

Wybór odpowiedniego rozwiązania

Wybierz BookStack, jeśli chcesz uruchomić wiki jeszcze dziś i wolisz dyskutować o treści niż o strukturze. To rozwiązanie ma najmniej ruchomych elementów: jedną aplikację PHP i jedną bazę danych MySQL. Sprawdza się w przypadku wewnętrznych podręczników operacyjnych (runbooks) i dokumentacji dla klientów, a także w zespołach, w których większość autorów nie jest inżynierami. Jest to również najłatwiejsze do tworzenia kopii zapasowych z całej trójki, ponieważ cały stan to jeden zrzut bazy danych oraz katalog z przesłanymi plikami.

Wybierz Wiki.js, jeśli potrzebujesz konkretnego edytora lub określonej strategii uwierzytelniania, której inne rozwiązania nie oferują, albo jeśli importujesz duży zbiór istniejących plików Markdown lub AsciiDoc i chcesz zachować strukturę ścieżek. Zaakceptuj fakt, że uruchamiasz cięższy stos technologiczny i przypnij tag głównej wersji.

Wybierz Outline, jeśli jakość pisania jest najważniejsza, wiki jest przeznaczone dla zespołu, a nie dla odbiorców publicznych, oraz jeśli posiadasz już dostawcę tożsamości. W zamian za taką konfigurację otrzymasz edytor, z którego użytkownicy faktycznie lubią korzystać. Nie wybieraj tego rozwiązania jako swojej pierwszej samodzielnie hostowanej aplikacji.

Jeśli żadne z powyższych trzech rozwiązań nie pasuje, przyczyną jest zazwyczaj niedopasowanie do typu treści. Zeskanowane faktury i umowy powinny trafiać do systemu zarządzania dokumentami, takiego jak Paperless-ngx, a nie do wiki; wymuszanie ich przechowywania w wiki jest powodem, dla którego tak wiele projektów tego typu zostaje porzuconych. Innym częstym niedopasowaniem jest potrzeba posiadania przestrzeni roboczej zamiast wiki, łączącej dokumenty, tabele i tablicę na jednym płótnie – w takim przypadku samodzielnie hostowana przestrzeń robocza AFFiNE sprawdzi się lepiej niż którekolwiek z powyższych rozwiązań. Szerszy przegląd tego, co jeszcze warto uruchomić na własnym serwerze, znajduje się w skróconej liście self-hosting na rok 2026.

Dobór zasobów i kopie zapasowe

Wszystkie trzy aplikacje mogą działać na małym VPS, jednak realne zapotrzebowanie na zasoby zależy od wymagań poszczególnych komponentów. BookStack to jeden proces aplikacji oraz MySQL. Wiki.js to proces Node oraz PostgreSQL. Outline wymaga procesu Node, PostgreSQL oraz Redis, a zazwyczaj także zewnętrznego dostawcy tożsamości, dlatego wymaga większej ilości pamięci RAM.

Należy tworzyć kopie zapasowe bazy danych oraz plików przesłanych przez użytkowników jednocześnie. Przed poleganiem na kopii zapasowej należy przynajmniej raz przeprowadzić proces przywracania danych na instancji testowej. Kopia zapasowa wiki, która nigdy nie została przywrócona, jest jedynie przypuszczeniem. W przypadku BookStack oznacza to wykonanie mysqldump oraz zabezpieczenie wolumenu /config. Dla Wiki.js i Outline oznacza to pg_dump oraz wolumen z danymi, a w przypadku Outline dodatkowo zawartość FILE_STORAGE_LOCAL_ROOT_DIR.

FAQ

Które wiki typu self-hosted jest najłatwiejsze w instalacji?

BookStack. Jest to pojedyncza aplikacja PHP z bazą danych MySQL, a projekt udostępnia skrypt instalacyjny dla Ubuntu 24.04, który konfiguruje Apache, MySQL 8.0 oraz PHP 8.3 w jednym przebiegu. Obraz kontenera wymaga jedynie APP_KEY oraz danych uwierzytelniających do bazy danych. Wiki.js wymaga dodatkowo środowiska uruchomieniowego Node oraz serwera PostgreSQL, a Outline wymaga ponadto Redis oraz zewnętrznego dostawcy tożsamości.

Czy mogę używać Outline bez Google lub innego dostawcy SSO?

Nie. Outline nie posiada lokalnego logowania za pomocą nazwy użytkownika i hasła. Przykładowa konfiguracja wskazuje, że wymagany jest co najmniej jeden zewnętrzny dostawca logowania, w przeciwnym razie użytkownik nie będzie miał żadnych opcji logowania. Można użyć Google, Slack, Microsoft Entra, Discord lub dowolnego ogólnego serwera OpenID Connect, takiego jak self-hosted Keycloak lub Authentik. Utrzymanie takiego dostawcy jest częścią kosztów związanych z uruchomieniem Outline.

Czy powinienem zainstalować Wiki.js 3 czy Wiki.js 2?

Wersję 2. Na lipiec 2026 najnowsze wydanie wersji 2 to 2.5.314 z maja 2026, a dokumentacja wersji 3 wprost informuje, że jest to niestabilna wersja beta, której nie należy instalować w środowisku produkcyjnym. Należy przypiąć obraz do ghcr.io/requarks/wiki:2 zamiast latest, ponieważ zmiana głównej wersji zmienia schemat bazy danych w działającej instancji.

Które z nich posiada najlepszą wyszukiwarkę?

Każde z nich ma inne mocne strony. BookStack oferuje czytelnikom język zapytań z dokładnymi frazami, filtrami tagów takimi jak [location=london] oraz filtrami metadanych takimi jak {created_after:2016-12-30}, a każdy z tych terminów można zanegować za pomocą przedrostka -. Outline nie wymaga konfiguracji i przeszukuje tekst wewnątrz przesłanych plików. Wiki.js jest najbardziej konfigurowalne, ponieważ użytkownik wybiera silnik wyszukiwania, a na silnik PostgreSQL warto przejść, gdy wiki przekroczy kilkaset stron.

Czy mogę później przenieść zawartość z jednego systemu do drugiego?

Częściowo, jednak należy spodziewać się pracy ręcznej. Wszystkie trzy systemy obsługują eksport i import Markdown, więc tekst stron zazwyczaj zostaje zachowany. Struktura nie przenosi się w sposób czysty: książki i rozdziały w BookStack nie mają odpowiednika w zagnieżdżonych dokumentach Outline, a ścieżki w Wiki.js nie mapują się na sztywną hierarchię BookStack. Załączniki, uprawnienia oraz historia stron to elementy najbardziej narażone na utratę, dlatego przed podjęciem decyzji o migracji należy wyeksportować próbkę danych i sprawdzić ich poprawność.

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