Wiki bora ya kujihostia: BookStack, Wiki.js au Outline?
Linganisha BookStack, Wiki.js na Outline kulingana na urahisi wa usanidi, mfumo wa uhariri na usalama. Pata mwongozo wa kuchagua wiki sahihi kwa matumizi ya mtu binafsi au timu.
Ni wiki ipi ya kujihostia unayopaswa kutumia
Wiki ya kujihostia huweka nyaraka za timu yako katika sehemu moja inayotafutika kwenye seva unayoimiliki. BookStack, Wiki.js na Outline zote hufanya kazi hiyo. Zinapishana zaidi katika kiasi cha usanidi unaohitajika kabla ya ukurasa wa kwanza kupakiwa, na katika nani anayeruhusiwa kuingia kwenye mfumo.
BookStack ndiyo nyepesi zaidi kusanidiwa na ina msimamo thabiti kuhusu muundo wake. Wiki.js inakupa chaguo pana zaidi la wahariri (editors) juu ya mti mmoja wa kurasa. Outline ina uzoefu bora zaidi wa uandishi kati ya hizo tatu, na haitamruhusu mtu yeyote kuingia hadi utakapounganisha mtoa huduma wa utambulisho (identity provider) wa nje.
Kila kitu hapa chini kimesomwa kutoka kwenye nyaraka za miradi hiyo yenyewe na faili zao za usanidi zilizochapishwa. Huu ni ulinganisho wa uwezo, si kipimo cha utendaji (benchmark). Namba za toleo na mahitaji zimewekwa alama ya tarehe kwa sababu zote tatu hubadilika mara kwa mara.
Muundo ndio chaguo la msingi
BookStack hurekebisha umbo la maudhui yako. Ukurasa hukaa ndani ya kitabu, kitabu kinaweza kuwa na sura, na rafu huweka vitabu pamoja. Huwezi kubuni ngazi ya tano. Kikomo hicho ndicho bidhaa yenyewe: mwandishi mpya anajua ukurasa unapoenda kwa sababu kuna sehemu moja tu unayoweza kuuweka. Gharama yake ni kwamba maudhui ambayo hayalingani na umbo hilo hulazimishwa kuingia humo.
Wiki.js hutumia mti wa njia (path tree), kama folda kwenye diski. Ukurasa kwenye ops/backup/restic hukaa popote unapouweka, na wewe huchagua kina cha folda. Hakuna kinachozuia watu wawili kuweka mada moja chini ya matawi mawili tofauti, kwa hivyo mfano wa Wiki.js unahitaji mtu mmoja anayesimamia mti huo.
Outline hutumia makusanyo yenye hati zilizowekwa ndani ya hati nyingine. Kusogeza hati ni kazi ya kuburuta kwa kipanya (mouse). Hii ndiyo inayonyumbulika zaidi kati ya hizo tatu, kwa hivyo ndiyo iliyo rahisi zaidi kupoteza mpangilio wake.
BookStack: usakinishaji mdogo zaidi
BookStack ni programu ya PHP inayotumia MySQL kama hifadhidata. Kufikia Julai 2026, mahitaji yaliyotajwa ni PHP 8.2 au mpya zaidi na MySQL 8.0 au MariaDB 10.6 au mpya zaidi, pamoja na Composer 2.2 au mpya zaidi ikiwa utasakinisha kutoka kwenye source code. Toleo la sasa ni 26.05.
Mradi huu hutoa script moja ya usakinishaji kwa kila toleo la Ubuntu. Script ya 24.04 husakinisha Apache, MySQL 8.0 na PHP 8.3 kwa ajili yako.
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.shSoma onyo lililopo kwenye script hiyo kabla ya kuiendesha. Nyaraka zinasema kuwa ni "KWA AJILI YA OS MPYA PEKEE, itasakinisha Apache, MySQL 8.0 & PHP 8.3 na inaweza KUFUTA usanidi wowote wa wavuti uliopo kwenye mashine". Kwenye seva ambayo tayari inajibu kwenye port 80, script hiyo itachukua port hiyo na kuandika upya usanidi wa Apache. Tumia containers badala yake, au sakinisha BookStack kwa mikono juu ya LAMP stack iliyopo kwenye Ubuntu 24.04.
Njia ya container hutumia image ya LinuxServer.io, ambayo ndiyo chaguo linalopendekezwa na nyaraka za BookStack. BookStack inahitaji ufunguo wa usimbaji wa session (session encryption key) na haitafungua kurasa bila ufunguo huo, kwa hivyo uunde kwanza.
docker run -it --rm --entrypoint /bin/bash lscr.io/linuxserver/bookstack:latest appkeyNakili thamani iliyochapishwa kwenye APP_KEY, kisha andika huduma hiyo:
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 lazima ilingane na anwani ambayo wasomaji wanaiandika, ikijumuisha scheme na port yoyote. Iweke kwenye http://localhost na kisha utoe huduma ya tovuti kupitia HTTPS, vinginevyo viungo vilivyoundwa na redirects vitaelekeza kwenye host isiyo sahihi, jambo ambalo wasomaji wataliona kama ukurasa wa kuingia (login page) unaojizungusha wenyewe. Ikiwa faili za compose ni ngeni kwako, anza na misingi ya Docker Compose kwenye VPS kabla ya hii.
Iwashe na uhakikishe kuwa programu inajibu, si tu kwamba container inaendelea kufanya kazi:
docker compose up -d
docker compose ps
curl -sI http://127.0.0.1:6875/login200 OK inamaanisha kuwa programu ya PHP imewaka na kufikia hifadhidata. 500 karibu kila mara inamaanisha kuwa APP_KEY haina kitu au vitambulisho vya hifadhidata havilingani, na docker compose logs bookstack huchapisha ni kipi kati ya hivyo viwili ndicho tatizo.
Wiki.js: mti mmoja, wahariri kadhaa
Wiki.js ni programu ya Node.js. Usanidi wa Docker uliopendekezwa huioanisha na PostgreSQL, ingawa programu hii pia inakubali MySQL, MariaDB, MSSQL na SQLite. Hii hapa ni faili ya compose kutoka ukurasa wa Docker wa mradi wenyewe:
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:Badilisha POSTGRES_PASSWORD na DB_PASS kwa pamoja kabla ya kuiendesha, kwa sababu ni kitambulisho kimoja na thamani ya mfano iko wazi kwa umma. Tag imefungwa kwenye ghcr.io/requarks/wiki:2 kwa makusudi. Nyaraka zinashauri dhidi ya latest, kwa sababu kuruka toleo kuu hubadilisha schema ya database chini ya instance inayofanya kazi.
Toleo la 2 ndilo la kuendesha. Kufikia Julai 2026, toleo jipya zaidi la 2 ni 2.5.314, la Mei 2026. Toleo la 3 lipo, na nyaraka zake zinasema: "Tovuti hii ni kwa ajili ya toleo lisilo thabiti la beta la Wiki.js 3.0. Hupaswi kusakinisha hili katika mazingira ya production." Ichukulie tag ya :3 kama onyesho la awali.
Katika mzigo wa kwanza, Wiki.js inakuongoza kupitia usanidi wa ndani ya kivinjari unaounda akaunti ya msimamizi. Hadi utakapomaliza, mtu yeyote anayefikia port hiyo atapata mchawi huo, kwa hivyo iweke huduma hiyo nyuma ya reverse proxy yako na TLS (transport layer security) kabla ya kufungua firewall. Wiki iliyo kwenye hostname yake yenyewe hukaa vizuri nyuma ya Traefik mbele ya programu kadhaa za Docker wakati seva inapohifadhi zaidi ya huduma hii moja.
Chaguo la mhariri ndiyo sababu watu huchagua Wiki.js. Instance moja inaweza kuhifadhi kurasa za Markdown, kurasa za mhariri wa kuona (visual editor), kurasa za raw HTML na kurasa za AsciiDoc kwa pamoja. Hilo husaidia unapokuwa unaingiza maudhui ya zamani katika umbizo ambalo ungependelea kutoligeuza. Pia ni njia ya kuishia na mitindo minne ya nyumba katika wiki moja, kwa hivyo amua mhariri chaguo-msingi siku ya kwanza na uandike uamuzi huo.
Muhtasari: kihariri bora, mahitaji mazito
Muhtasari (Outline) ndicho watu wanachomaanisha wanaposema wanataka kitu kinachohisi kama zana ya kibiashara ya kuandikia madokezo. Hii ni programu ya Node.js, na toleo la sasa kufikia Julai 2026 ni 1.9.2. Faili lake la sampuli ya mazingira linaorodhesha mahitaji yake: PostgreSQL kupitia DATABASE_URL, Redis kupitia REDIS_URL, siri mbili (secrets) nasibu, na URL inayoweza kufikiwa hadharani.
openssl rand -hex 32
openssl rand -hex 32Endesha amri hiyo mara mbili na uhifadhi thamani zote mbili. Ya kwanza inakuwa SECRET_KEY, ya pili inakuwa UTILS_SECRET. Kiini cha faili la mazingira kinaonekana hivi:
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 ni sahihi tu wakati database iko kwenye mashine hiyo hiyo au kwenye Docker network moja. Iache wazi kwa database inayofikiwa kupitia mtandao, vinginevyo muunganisho utapita bila usimbaji fiche. Viambatisho havikulazimishi tena kutumia hifadhi ya vitu (object storage): FILE_STORAGE=local huandika faili zilizopakiwa kwenye saraka iliyo juu yake, ambayo lazima iwe volume inayoweza kuandikwa na container na kitu ambacho backups zako zinajumuisha. Weka FILE_STORAGE=s3 pamoja na thamani za AWS_* badala yake ikiwa unataka faili hizo ziwe kwenye ndoo (bucket) inayooana na S3.
Sasa sehemu inayowashangaza watu. Outline haina mfumo wa kuingia kwa jina la mtumiaji na nenosiri. Usanidi wake wa sampuli unasema vitambulisho vya kuingia vya wahusika wengine vinahitajika: "angalau MOJA ya hizi inahitajika kwa usakinishaji unaofanya kazi au hutakuwa na chaguo la kuingia". Watoa huduma walioorodheshwa ni pamoja na Google, Slack, Microsoft Entra, Discord, na seva yoyote ya kawaida ya OpenID Connect (OIDC) kupitia OIDC_CLIENT_ID, OIDC_CLIENT_SECRET, OIDC_AUTH_URI, OIDC_TOKEN_URI na OIDC_USERINFO_URI.
Kwa hivyo, gharama halisi ya Outline ni Outline pamoja na PostgreSQL pamoja na Redis pamoja na mtoa huduma wa utambulisho (identity provider). Ikiwa timu yako tayari inaingia kwa kutumia Google Workspace au Microsoft Entra, kipande hicho cha mwisho kinakuchukua dakika kumi na Outline inakuwa ya kuvutia sana. Ikiwa sivyo, unajihudumia mwenyewe kitu kama Keycloak au Authentik, ambayo ni huduma ya pili ya kusasisha na kuhifadhi nakala. Panga kumbukumbu (memory) ipasavyo: mwongozo wa Outline wenyewe ni takriban 512 MB kwa kila mchakato wa wavuti, uliowekwa na WEB_CONCURRENCY, juu ya database na Redis.
Jinsi kila moja inavyoshughulikia nani anayeweza kusoma nini
BookStack ina akaunti za barua pepe na nywila za ndani kama ilivyo, na inasaidia LDAP, SAML2, na OIDC kama njia mbadala. Ruhusa huwekwa kwa kila jukumu na zinaweza kubadilishwa kwenye rafu, kitabu, sura, au ukurasa mmoja. Kwa sababu muundo wa daraja umewekwa, ruhusa hurithiwa kuelekea chini kwa njia unayoweza kuitabiri.
Wiki.js pia inakuja na akaunti za ndani na inaongeza orodha ndefu ya mikakati unayoweza kuwezesha katika eneo la usimamizi. Sheria zake za ukurasa hutoa au kukataa ufikiaji kulingana na muundo wa njia (path pattern). Hii ni nguvu na ni rahisi kukosea, kwa sababu sheria iliyoandikwa kwa ajili ya ops/* inashughulikia kimyakimya kila ukurasa utakaouhifadhi chini ya njia hiyo baadaye.
Outline inakabidhi swali hili kikamilifu. Uanachama hufuata mtoa huduma wako wa utambulisho (identity provider), na ndani ya Outline unadhibiti ufikiaji kwa mkusanyiko na kwa kikundi. Hakuna akaunti ya ndani inayobaki wakati mtu anapoondoka kwenye kampuni, jambo ambalo ni faida halisi wakati mtoa huduma wa utambulisho ndiye mfumo unaotumia kufuta ufikiaji wa watumiaji.
Jinsi utafutaji unavyofanya kazi katika kila mfumo
Utafutaji ndio sehemu ambayo wiki hujipatia thamani au kugeuka kuwa mkusanyiko wa faili zilizosahaulika.
BookStack hutafuta kwenye database na kuwapa wasomaji lugha ya utafutaji inayoweza kujifunza kwa dakika moja. Kunukuu maneno, kama ilivyo katika "london meeting", kunahitaji mfuatano kamili wa herufi hizo. Mabano ya mraba hutafuta vitambulisho (tags): [location=london] hulinganisha kwa jina la tag, thamani, au vyote viwili, huku kukiwa na uwezo wa kulinganisha kwa kutumia !=, >= na like. Mabano ya mawimbi huchuja kulingana na metadata, kama ilivyo katika {created_after:2016-12-30}. Neno lolote la msingi, tag, au kichujio linaweza kukataliwa kwa kuweka - mbele yake. BookStack huweka ukomo wa idadi ya maneno ya kila aina ambayo hoja moja inaweza kuwa nayo, hivyo hoja ndefu sana hupunguzwa badala ya kuendeshwa.
Wiki.js huchukulia utafutaji kama moduli inayoweza kuongezwa. Injini zilizoorodheshwa ni injini ya msingi ya database, injini ya PostgreSQL, Elasticsearch, Algolia, AWS CloudSearch, na Azure Search. Injini ya msingi inafaa kwa kurasa chache mia kadhaa. Ikiwa unaendesha PostgreSQL, badilisha kwenda kwenye injini ya PostgreSQL katika eneo la admin, kwa sababu hutumia index ya full text ya database yenyewe badala ya kulinganisha kwa njia rahisi. Hifadhi Elasticsearch kwa ajili ya wiki kubwa kiasi kwamba unakubali kuendesha na kufanyia marekebisho huduma ya pili ya utafutaji.
Outline hutafuta kwa kutumia index za full text za PostgreSQL. Hakuna injini ya kuchagua na hakuna cha kurekebisha, na pia hutafuta maandishi yaliyo ndani ya nyaraka zilizopakiwa. Kwa wiki ya timu yenye nyaraka elfu chache, hii ndiyo njia inayohitaji kazi ndogo zaidi kati ya hizo tatu. Pia, hakuna njia ya kuboresha utendaji ikiwa itaacha kuwa ya haraka vya kutosha.
Ni ipi inayokufaa
Chagua BookStack ikiwa unataka wiki iwe inafanya kazi mchana huu na unapendelea kubishana kuhusu maudhui badala ya muundo. Ina sehemu chache zaidi zinazohitaji usimamizi: programu moja ya PHP na database moja ya MySQL. Inafaa kwa runbooks za ndani na nyaraka za wateja, na inafaa timu ambazo waandishi wengi si wahandisi. Pia ni rahisi zaidi kati ya hizo tatu kuhifadhi nakala (backup), kwa sababu hali nzima ya programu ni dump moja ya database pamoja na saraka ya uploads.
Chagua Wiki.js ikiwa unahitaji kihariri maalum au mkakati maalum wa uthibitishaji (authentication) ambao nyingine hazitoi, au ikiwa unaingiza kiasi kikubwa cha Markdown au AsciiDoc iliyopo na unataka muundo wa njia (path structure) uhifadhiwe. Kubali kuwa unaendesha stack nzito zaidi, na uweke version tag kuu (pin).
Chagua Outline ikiwa ubora wa uandishi ndio jambo muhimu zaidi, wiki ni kwa ajili ya timu badala ya umma, na tayari una identity provider. Inalipa usanidi huo kwa kihariri ambacho watu hufurahia kukitumia. Usiichague kama programu yako ya kwanza ya kujihostia (self-hosted).
Ikiwa hakuna hata moja kati ya hizo tatu inayofaa, kutokulingana huko kwa kawaida kunatokana na aina ya maudhui. Ankara zilizochanganuliwa (scanned invoices) na mikataba inapaswa kuwekwa kwenye mfumo wa usimamizi wa hati kama vile Paperless-ngx badala ya wiki, na kuzilazimisha kuingia kwenye wiki ndiyo sababu wiki nyingi huachwa bila kutumiwa. Kutokulingana kwingine kwa kawaida ni kutaka nafasi ya kazi (workspace) badala ya wiki, yenye hati, majedwali na ubao mweupe kwenye turubai moja, ambapo nafasi ya kazi ya AFFiNE inayojihostiwa inafaa zaidi kuliko yoyote kati ya hizo tatu hapo juu. Kwa mtazamo mpana wa nini kingine kinachostahili nafasi kwenye seva yako, angalia orodha fupi ya self-hosting kwa mwaka 2026.
Ukubwa na nakala za akiba (backups)
Zote tatu zinafaa kwenye VPS ndogo, na kiwango cha chini cha rasilimali kinatofautiana kulingana na kile kilichopo nyuma ya kila moja. BookStack ni mchakato mmoja wa programu na MySQL. Wiki.js ni mchakato wa Node na PostgreSQL. Outline ni mchakato wa Node, PostgreSQL na Redis, kwa kawaida ikiwa na mtoa utambulisho (identity provider) kando, ndiyo maana hii ndiyo inayohitaji kumbukumbu (memory) ya ziada.
Hifadhi database na faili zilizopakiwa (uploads) pamoja, na uzirejeshe zote mbili kwenye mfano wa majaribio (throwaway instance) mara moja kabla ya kutegemea nakala hiyo ya akiba. Nakala ya akiba ya wiki ambayo haijawahi kurejeshwa ni kubahatisha tu. Kwa BookStack, hii inamaanisha mysqldump pamoja na volume ya /config. Kwa Wiki.js na Outline, inamaanisha pg_dump pamoja na volume ya data, na kwa Outline pia chochote kilichopo kwenye FILE_STORAGE_LOCAL_ROOT_DIR.
FAQ
Ni wiki ipi ya self-hosted iliyo rahisi zaidi kusakinisha?
BookStack. Hii ni programu moja ya PHP yenye database ya MySQL, na mradi huu hutoa script ya usakinishaji kwa Ubuntu 24.04 inayoweka Apache, MySQL 8.0 na PHP 8.3 kwa wakati mmoja. Image ya container inahitaji tu APP_KEY na vitambulisho vya database. Wiki.js huongeza Node runtime na seva ya PostgreSQL, na Outline huongeza Redis pamoja na mtoa huduma wa utambulisho wa nje juu ya hayo.
Je, ninaweza kutumia Outline bila Google au mtoa huduma mwingine wa SSO?
Hapana. Outline haina mfumo wa kuingia kwa kutumia jina la mtumiaji na nenosiri la ndani. Usanidi wake wa mfano unaeleza kuwa angalau mtoa huduma mmoja wa nje wa kuingia (sign-in provider) anahitajika, vinginevyo hutakuwa na chaguo lolote la kuingia. Unaweza kutumia Google, Slack, Microsoft Entra, Discord, au seva yoyote ya kawaida ya OpenID Connect kama vile Keycloak au Authentik unayojiendeshea mwenyewe. Kuendesha mtoa huduma huyo ni sehemu ya gharama ya kuendesha Outline.
Je, nifunge Wiki.js 3 au Wiki.js 2?
Toleo la 2. Kufikia Julai 2026, toleo jipya zaidi la 2 ni 2.5.314, la Mei 2026, na nyaraka za toleo la 3 zinasema wazi kuwa ni beta isiyo thabiti ambayo hupaswi kuisakinisha katika mazingira ya production. Funga image yako kwenye ghcr.io/requarks/wiki:2 badala ya latest, kwa sababu mabadiliko ya toleo kuu hubadilisha schema ya database chini ya instance inayofanya kazi.
Ni ipi ina utafutaji bora zaidi?
Zina nguvu kwa njia tofauti. BookStack huwapa wasomaji lugha ya kutafuta (query language) yenye misemo kamili, vichujio vya tag kama [location=london] na vichujio vya metadata kama {created_after:2016-12-30}, na maneno yoyote kati ya hayo yanaweza kukataliwa kwa kuweka - mwanzoni. Outline haihitaji usanidi wowote na hutafuta maandishi ndani ya faili zilizopakiwa. Wiki.js ndiyo inayoweza kurekebishika zaidi, kwa kuwa unachagua injini ya utafutaji, na injini ya PostgreSQL inafaa kubadilishiwa mara tu wiki yako inapozidi kurasa mia chache.
Je, ninaweza kuhamisha maudhui yangu kutoka moja kwenda nyingine baadaye?
Kwa kiasi fulani, na unapaswa kutarajia kazi ya mikono. Zote tatu husafirisha (export) na kuingiza (import) Markdown, kwa hivyo maandishi ya kurasa kwa kawaida hubaki salama. Muundo haubaki vizuri: vitabu na sura za BookStack havina mlinganisho katika hati zilizopangwa (nested documents) za Outline, na njia za Wiki.js hazilingani na uongozi uliowekwa wa BookStack. Viambatisho, ruhusa, na historia ya kurasa ndizo sehemu zinazoweza kupotea zaidi, kwa hivyo safirisha sampuli na uzikague kabla ya kuamua kufanya uhamiaji kamili.