BookStack, Wiki.js o Outline: Alin ang para sa iyo?
Ihambing ang BookStack, Wiki.js, at Outline sa setup, editor, login, at search. Alamin kung alin ang praktikal para sa solo admin at alin ang bagay sa teams.
Aling self-hosted wiki ang dapat mong patakbuhin
Inilalagay ng self-hosted wiki ang mga dokumento ng iyong team sa isang searchable na lugar sa server na kontrolado mo. Magagawa ito ng BookStack, Wiki.js, at Outline. Pinakamalaki ang pagkakaiba nila sa dami ng kailangang i-assemble bago mag-load ang unang page, at sa kung sino ang pinapayagang mag-log in.
Pinakamadaling i-set up ang BookStack at ito rin ang may pinakamatibay na sinusunod na structure. Pinakamalawak naman ang mapagpipiliang editor ng Wiki.js para sa iisang page tree. Pinakamaganda ang writing experience ng Outline sa tatlo, at hindi nito papayagang mag-sign in ang sinuman hangga't hindi ka kumokonekta sa isang external identity provider.
Ang lahat ng nasa ibaba ay batay sa sariling documentation ng mga project at sa mga inilabas nilang configuration file. Capability comparison ito, hindi benchmark. Nilagyan ng petsa ang mga version number at requirement dahil patuloy na nagbabago ang tatlo.
Ang tunay na pagpipilian ay ang structure
Inaayos ng BookStack ang structure ng iyong content. Ang isang page ay nasa loob ng isang book, maaaring maglaman ng mga chapter ang isang book, at pinagsasama-sama ng shelves ang mga book. Hindi ka maaaring gumawa ng ikalimang level. Iyan ang pangunahing katangian ng product: alam ng bagong writer kung saan ilalagay ang isang page dahil iisa lamang ang puwesto nito. Ang kapalit nito, napipilitang ipasok sa structure ang content na hindi nito akma.
Gumagamit ang Wiki.js ng path tree, na katulad ng mga folder sa isang disk. Ang page sa ops/backup/restic ay napupunta kung saan mo ito ilalagay, at ikaw ang pumipili ng depth. Walang pumipigil sa dalawang tao na ilagay ang parehong subject sa magkaibang branch, kaya kailangan ng isang Wiki.js instance ng isang taong responsable sa tree.
Gumagamit ang Outline ng collections na may mga document na nakapugad sa loob ng ibang document. Ang paglipat ng document ay ginagawa sa pamamagitan ng pag-drag gamit ang mouse. Ito ang pinaka-flexible sa tatlo, kaya ito rin ang pinakamadaling hayaang mawalan ng maayos na structure.
BookStack: ang pinakamaliit na install
Ang BookStack ay isang PHP application na gumagamit ng MySQL bilang backend. Noong July 2026, ang nakadokumentong requirements ay PHP 8.2 o mas bago at alinman sa MySQL 8.0 o MariaDB 10.6 o mas bago, kasama ang Composer 2.2 o mas bago kung mag-i-install ka mula sa source. Ang kasalukuyang release line ay 26.05.
Naglalabas ang project ng isang installation script para sa bawat Ubuntu release. Awtomatikong ini-install ng 24.04 script ang Apache, MySQL 8.0, at 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.shBasahin ang warning sa script bago ito patakbuhin. Nakasaad sa documentation na ito ay "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". Kung may server nang tumatanggap ng requests sa port 80, kukunin ng script ang port na iyon at papalitan ang Apache configuration. Sa halip, gumamit ng containers, o manu-manong i-install ang BookStack sa ibabaw ng kasalukuyang LAMP stack sa Ubuntu 24.04.
Gumagamit ang container route ng LinuxServer.io image, na siyang option na itinuturo ng BookStack documentation. Kailangan ng BookStack ng session encryption key at hindi ito magse-serve ng pages kung wala nito, kaya buuin muna ito.
docker run -it --rm --entrypoint /bin/bash lscr.io/linuxserver/bookstack:latest appkeyKopyahin ang value na lumabas papunta sa APP_KEY, pagkatapos ay isulat ang service:
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-stoppedDapat tumugma ang APP_URL sa address na aktuwal na tina-type ng mga reader, kasama ang scheme at anumang port. Itakda ito sa http://localhost at pagkatapos ay i-serve ang site gamit ang HTTPS. Kung hindi, sa maling host ituturo ang mga generated link at redirect, kaya makikita ng mga reader ang login page na paulit-ulit na bumabalik sa sarili nito. Kung bago sa iyo ang compose files, magsimula sa mga pangunahing kaalaman sa Docker Compose sa isang VPS bago ang tutorial na ito.
I-start ito at tiyaking sumasagot ang application, hindi lamang na tumatakbo ang container:
docker compose up -d
docker compose ps
curl -sI http://127.0.0.1:6875/loginAng 200 OK ay nangangahulugang nag-boot ang PHP application at nakakonekta ito sa database. Ang 500 ay halos palaging nangangahulugang walang laman ang APP_KEY o hindi tugma ang database credentials, at ipinapakita ng docker compose logs bookstack kung alin sa dalawa ang sanhi.
Wiki.js: isang tree, maraming editor
Ang Wiki.js ay isang Node.js application. Ang documented Docker setup nito ay gumagamit ng PostgreSQL, bagama't tumatanggap din ang software ng MySQL, MariaDB, MSSQL, at SQLite. Ito ang compose file mula sa sariling Docker page ng project:
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:Palitan nang sabay ang POSTGRES_PASSWORD at DB_PASS bago mo ito patakbuhin, dahil iisang credential ang mga ito at public ang sample value. Naka-pin sa ghcr.io/requarks/wiki:2 ang tag para sa isang dahilan. Hindi inirerekomenda ng documentation ang latest, dahil binabago ng pagtalon sa major version ang database schema habang tumatakbo ang instance.
Ang Version 2 ang dapat patakbuhin. Noong July 2026, ang pinakabagong Version 2 release ay 2.5.314, mula May 2026. May Version 3 na, at nakasaad sa sarili nitong documentation: "Ang site na ito ay para sa unstable beta release ng Wiki.js 3.0. HUWAG itong i-install sa production." Ituring na preview ang :3 tag.
Sa unang pag-load, gagabayan ka ng Wiki.js sa isang in-browser setup na lumilikha ng administrator account. Hangga't hindi mo ito natatapos, makikita ng sinumang makakaabot sa port ang wizard na iyon. Kaya ilagay ang service sa likod ng reverse proxy at TLS (transport layer security) bago mo buksan ang firewall. Ang wiki na may sarili nitong hostname ay natural na mailalagay sa likod ng Traefik sa harap ng ilang Docker app kapag higit sa service na ito ang naka-host sa server.
Ang pagpili ng editor ang dahilan kung bakit pinipili ng mga tao ang Wiki.js. Maaaring maglaman ang isang instance ng Markdown pages, visual editor pages, raw HTML pages, at AsciiDoc pages nang magkakatabi. Nakakatulong ito kapag nag-i-import ka ng lumang content sa format na ayaw mong i-convert. Maaari rin itong humantong sa apat na house style sa iisang wiki, kaya piliin ang default editor sa unang araw at itala ang desisyong iyon.
Outline: ang pinakamahusay na editor, pero pinakamabigat ang prerequisites
Ang Outline ang karaniwang tinutukoy ng mga taong naghahanap ng notes tool na parang commercial na produkto. Node.js application ito, at ang kasalukuyang release noong July 2026 ay 1.9.2. Nakalista sa sample environment file nito ang mga kailangan: PostgreSQL sa pamamagitan ng DATABASE_URL, Redis sa pamamagitan ng REDIS_URL, dalawang random secret, at isang publicly reachable na URL.
openssl rand -hex 32
openssl rand -hex 32Patakbuhin ito nang dalawang beses at itago ang dalawang value. Ang una ay magiging SECRET_KEY, at ang pangalawa ay UTILS_SECRET. Ganito ang magiging hitsura ng pangunahing bahagi ng environment file:
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/dataTama lamang ang PGSSLMODE=disable kapag nasa parehong machine o parehong Docker network ang database. Huwag itong isama kung network ang dinaanan papunta sa database, dahil magiging unencrypted ang connection. Hindi ka na pinipilit ng attachments na gumamit ng object storage: isinusulat ng FILE_STORAGE=local ang uploads sa directory sa itaas. Dapat itong volume na maaaring sulatan ng container at kasama sa iyong backups. I-set ang FILE_STORAGE=s3 gamit ang mga value ng AWS_* kung gusto mong ilagay ang mga file sa isang S3 compatible bucket.
Ito ang bahaging ikinagugulat ng maraming tao. Walang built-in na username at password login ang Outline. Ayon sa sarili nitong sample configuration, kailangan ang credentials para sa third-party sign-in: "at least ONE OF these is required for a working installation or you'll have no sign-in options". Kabilang sa documented provider ang Google, Slack, Microsoft Entra, Discord, at anumang generic OpenID Connect (OIDC) server sa pamamagitan ng OIDC_CLIENT_ID, OIDC_CLIENT_SECRET, OIDC_AUTH_URI, OIDC_TOKEN_URI at OIDC_USERINFO_URI.
Kaya ang aktuwal na kailangan ng Outline ay Outline kasama ang PostgreSQL, Redis, at isang identity provider. Kung gumagamit na ang team mo ng Google Workspace o Microsoft Entra para sa sign-in, sampung minuto lamang ang gugugulin mo sa huling bahaging iyon at magiging kaakit-akit ang Outline. Kung hindi, magse-self-host ka rin ng gaya ng Keycloak o Authentik. Iyon ay isa pang service na kailangang i-patch at i-back up. Maglaan nang naaayon ng memory: ang sariling gabay ng Outline ay humigit-kumulang 512 MB bawat web process, na sine-set ng WEB_CONCURRENCY, bukod pa sa database at Redis.
Paano hinahawakan ng bawat isa kung sino ang maaaring magbasa ng ano
May mga local email at password account na agad ang BookStack, at sinusuportahan nito ang LDAP, SAML2, at OIDC bilang mga alternatibo. Itinatakda ang permissions ayon sa role at maaaring i-override sa isang shelf, book, chapter, o page. Dahil fixed ang hierarchy, predictable ang pagmamana ng permissions sa bawat antas nito.
May mga local account din agad ang Wiki.js at nagdaragdag ito ng mahabang listahan ng mga strategy na maaari mong i-enable sa admin area. Nagbibigay o nagkakait ng access ang mga page rule batay sa path pattern. Makapangyarihan ito ngunit madaling magkamali, dahil ang rule na ginawa para sa ops/* ay tahimik na sasaklaw sa bawat page na ilalagay mo sa path na iyon sa hinaharap.
Ganap na ipinauubaya ng Outline ang usaping ito. Nakabatay ang membership sa iyong identity provider, at sa loob ng Outline ay kinokontrol mo ang access ayon sa collection at group. Walang naiiwang local account kapag umalis ang isang tao sa kumpanya. Malaking bentahe ito kapag ang identity provider na rin ang system na ginagamit mo para mag-deprovision ng mga account.
Paano gumagana ang search sa bawat isa
Ang search ang nagtatakda kung magiging kapaki-pakinabang ang isang wiki o magiging folder ito ng mga nakalimutang file.
Hinahanap ng BookStack ang database at nagbibigay ito sa mga reader ng query language na matututunan sa loob ng isang minuto. Kapag naglagay ka ng phrase sa quotation marks, gaya ng "london meeting", kailangan nitong tumugma sa eksaktong string. Ginagamit ang square brackets para maghanap ng tags: tumutugma ang [location=london] sa tag name, value, o pareho, gamit ang mga comparison gaya ng !=, >=, at like. Ginagamit ang curly braces para mag-filter batay sa metadata, gaya ng {created_after:2016-12-30}. Maaaring i-negate ang anumang exact, tag, o filter term sa pamamagitan ng paglalagay ng - sa unahan nito. Nililimitahan ng BookStack kung ilang term ng bawat uri ang maaaring nasa isang query, kaya tina-trim ang napakahabang query sa halip na patakbuhin.
Itinuturing ng Wiki.js ang search bilang isang pluggable module. Ang mga documented engine ay basic database engine, PostgreSQL engine, Elasticsearch, Algolia, AWS CloudSearch, at Azure Search. Sapat ang basic engine para sa ilang daang page. Kung PostgreSQL ang ginagamit mo, lumipat sa PostgreSQL engine sa admin area dahil ginagamit nito ang sariling full text index ng database sa halip na simpleng matching. Gamitin lamang ang Elasticsearch kapag sapat nang malaki ang wiki para tanggapin mo ang pagpapatakbo at pag-patch ng pangalawang search service.
Gumagamit ang Outline ng PostgreSQL full text indexes para sa search. Walang engine na kailangang piliin at walang kailangang i-tune, at hinahanap din nito ang text sa loob ng mga uploaded document. Para sa team wiki na may ilang libong document, ito ang nangangailangan ng pinakamaliit na trabaho sa tatlo. Wala ring setting na maaari mong baguhin kung sakaling hindi na sapat ang bilis nito.
Alin ang angkop sa iyo
Piliin ang BookStack kung gusto mong gumana na ang wiki ngayong hapon at mas gusto mong pagtalunan ang content kaysa ang structure. Pinakakaunti ang kailangang bahagi nito: isang PHP application at isang MySQL database. Angkop ito para sa internal runbook at documentation para sa customer, pati sa mga team na karamihan sa writers ay hindi engineers. Ito rin ang pinakamadaling i-back up sa tatlo, dahil ang buong state ay binubuo lamang ng isang database dump at ng uploads directory.
Piliin ang Wiki.js kung kailangan mo ng partikular na editor o authentication strategy na hindi iniaalok ng dalawa, o kung mag-i-import ka ng malaking koleksiyon ng kasalukuyang Markdown o AsciiDoc at gusto mong mapanatili ang path structure. Tanggapin na mas mabigat ang stack na patatakbuhin mo, at i-pin ang major version tag.
Piliin ang Outline kung pinakamahalaga ang kalidad ng pagsusulat, para sa team at hindi para sa publiko ang wiki, at mayroon ka nang identity provider. Gagantimpalaan ng setup na ito ang team ng editor na talagang madaling gamitin. Huwag itong piliin bilang una mong self-hosted application.
Kung walang angkop sa tatlo, karaniwang content type ang hindi tugma. Mas angkop ang mga na-scan na invoice at kontrata sa document management system gaya ng Paperless-ngx kaysa sa wiki, at ang sapilitang paglalagay ng mga ito sa wiki ang dahilan kung bakit maraming wiki ang tuluyang napapabayaan. Ang isa pang karaniwang hindi tugma ay kapag workspace ang kailangan mo sa halip na wiki, na may documents, tables, at whiteboard sa iisang canvas. Dito mas angkop ang self-hosted AFFiNE workspace kaysa sa alinman sa tatlong nabanggit. Para sa mas malawak na pagtingin sa iba pang maaaring ilagay sa sarili mong server, tingnan ang shortlist ng self-hosting para sa 2026.
Sizing at mga backup
Kasya ang tatlo sa isang maliit na VPS, pero magkakaiba ang realistic na minimum dahil sa mga component na nasa likod ng bawat isa. Isang application process at MySQL ang BookStack. Isang Node process at PostgreSQL ang Wiki.js. May Node process, PostgreSQL, at Redis ang Outline. Karaniwan ding may identity provider itong kasama, kaya ito ang nangangailangan ng dagdag na memory.
I-back up nang magkasama ang database at mga upload, at i-restore ang mga ito sa isang pansamantalang instance kahit isang beses bago umasa sa backup na iyon. Tantya lamang ang backup ng wiki na hindi pa na-restore. Para sa BookStack, nangangahulugan ito ng mysqldump at ng /config volume. Para sa Wiki.js at Outline, nangangahulugan ito ng pg_dump at ng data volume. Para sa Outline, isama rin ang anumang nasa FILE_STORAGE_LOCAL_ROOT_DIR.
FAQ
Aling self-hosted wiki ang pinakamadaling i-install?
BookStack. Isang PHP application ito na gumagamit ng MySQL database, at naglalabas ang project ng installation script para sa Ubuntu 24.04 na sabay na nagse-set up ng Apache, MySQL 8.0, at PHP 8.3. Kailangan lamang ng container image ng isang APP_KEY at database credentials. Nagdaragdag ang Wiki.js ng Node runtime at PostgreSQL server, habang nagdaragdag naman ang Outline ng Redis at external identity provider.
Magagamit ko ba ang Outline nang walang Google o ibang SSO provider?
Hindi. Walang local username at password login ang Outline. Nakasaad sa sample configuration nito na kailangan ng kahit isang third-party sign-in provider; kung wala, wala kang anumang sign-in option. Maaari mong gamitin ang Google, Slack, Microsoft Entra, Discord, o anumang generic OpenID Connect server gaya ng self-hosted Keycloak o Authentik. Bahagi ng gastos sa pagpapatakbo ng Outline ang pagpapatakbo ng provider na iyon.
Dapat ko bang i-install ang Wiki.js 3 o Wiki.js 2?
Version 2. Noong July 2026, ang pinakabagong release ng version 2 ay 2.5.314, na inilabas noong May 2026. Malinaw na sinasabi sa documentation ng version 3 na unstable beta ito at hindi dapat i-install sa production. I-pin ang image sa ghcr.io/requarks/wiki:2 sa halip na latest, dahil binabago ng major version change ang database schema habang tumatakbo ang instance.
Alin sa mga ito ang may pinakamagandang search?
Magkakaiba ang kanilang mga kalakasan. Nagbibigay ang BookStack sa mga reader ng query language para sa exact phrases, mga tag filter gaya ng [location=london], at mga metadata filter gaya ng {created_after:2016-12-30}. Maaari ring i-negate ang alinman sa mga terminong ito gamit ang nauunang -. Walang kailangang configuration ang Outline at hinahanap nito ang text sa loob ng mga uploaded file. Pinakamadaling i-tune ang Wiki.js dahil ikaw ang pumipili ng engine. Mainam na lumipat sa PostgreSQL engine kapag lumampas na ang wiki mo sa ilang daang page.
Maaari ko bang ilipat ang content ko mula sa isa papunta sa iba sa hinaharap?
Bahagya lamang, at dapat mong asahan ang manual na trabaho. Nakakapag-export at nakakapag-import ng Markdown ang lahat ng tatlo, kaya karaniwang nananatili ang text ng page. Hindi maayos na naililipat ang structure: walang katumbas sa nested documents ng Outline ang books at chapters ng BookStack, at hindi tumutugma ang mga path ng Wiki.js sa fixed hierarchy ng BookStack. Ang attachments, permissions, at page history ang pinakamalamang na mawala. Kaya mag-export muna ng sample at suriin ang mga ito bago ka magpatuloy sa migration.