BookStack, Wiki.js atau Outline: Wiki Pelayan Sendiri
Bandingkan BookStack, Wiki.js dan Outline dari segi pemasangan, editor, log masuk serta carian. Ketahui pilihan terbaik untuk pentadbir solo dan pasukan.
Wiki yang patut anda jalankan pada pelayan sendiri
Wiki yang dihoskan sendiri menyimpan dokumen pasukan anda di satu tempat yang boleh dicari pada pelayan yang anda kawal. BookStack, Wiki.js dan Outline semuanya boleh melaksanakan tugas itu. Perbezaan utama ialah jumlah komponen yang perlu anda sediakan sebelum halaman pertama dipaparkan, serta pihak yang dibenarkan untuk log masuk.
BookStack paling mudah disediakan dan paling ketat dari segi strukturnya. Wiki.js memberikan pilihan editor yang paling luas pada satu pepohon halaman. Outline menawarkan pengalaman penulisan terbaik antara ketiga-tiganya, dan tidak membenarkan sesiapa log masuk sehingga anda menyambungkannya kepada pembekal identiti luaran.
Semua maklumat di bawah diambil daripada dokumentasi projek dan fail konfigurasi yang diterbitkan oleh projek tersebut. Ini ialah perbandingan keupayaan, bukan penanda aras. Nombor versi dan keperluan disertakan tarikh kerana ketiga-tiga projek ini terus berubah.
Struktur ialah pilihan sebenar
BookStack menetapkan bentuk kandungan anda. Halaman berada dalam buku, buku boleh mengandungi bab, dan rak mengumpulkan buku. Anda tidak boleh mencipta aras kelima. Had itu ialah ciri produk ini: penulis baharu tahu tempat untuk meletakkan halaman kerana hanya terdapat satu tempat yang sesuai. Kesannya, kandungan yang tidak sepadan dengan bentuk tersebut perlu dipaksa mengikutnya.
Wiki.js menggunakan pepohon laluan, seperti folder pada cakera. Halaman di ops/backup/restic berada di mana-mana lokasi yang anda tentukan, dan anda memilih kedalamannya. Tiada perkara yang menghalang dua orang daripada meletakkan subjek yang sama di bawah dua cabang berbeza. Oleh itu, tika Wiki.js memerlukan seorang pemilik pepohon.
Outline menggunakan koleksi dengan dokumen yang disarang di dalam dokumen lain. Untuk memindahkan dokumen, seret dokumen tersebut menggunakan tetikus. Antara ketiga-tiganya, Outline paling fleksibel. Oleh itu, kandungannya juga paling mudah menjadi tidak tersusun.
BookStack: pemasangan paling ringkas
BookStack ialah aplikasi PHP yang menggunakan MySQL sebagai pangkalan data. Setakat Julai 2026, keperluan yang didokumenkan ialah PHP 8.2 atau lebih baharu dan sama ada MySQL 8.0 atau MariaDB 10.6 atau lebih baharu, serta Composer 2.2 atau lebih baharu jika anda memasangnya daripada kod sumber. Siri keluaran semasa ialah 26.05.
Projek ini menerbitkan satu skrip pemasangan bagi setiap keluaran Ubuntu. Skrip 24.04 memasang Apache, MySQL 8.0 dan PHP 8.3 untuk anda.
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.shBaca amaran pada skrip itu sebelum menjalankannya. Dokumentasi menyatakan bahawa skrip tersebut "HANYA UNTUK OS BAHARU, ia akan memasang Apache, MySQL 8.0 & PHP 8.3 dan boleh MENIMPA sebarang persediaan web sedia ada pada mesin". Pada pelayan yang sudah menerima sambungan pada port 80, skrip itu akan mengambil alih port tersebut dan menulis semula konfigurasi Apache. Gunakan container di situ, atau pasang BookStack secara manual di atas stack LAMP sedia ada pada Ubuntu 24.04.
Laluan container menggunakan imej LinuxServer.io, iaitu pilihan yang dirujuk oleh dokumentasi BookStack. BookStack memerlukan kunci penyulitan sesi dan tidak akan menyajikan halaman tanpanya, jadi jana kunci itu terlebih dahulu.
docker run -it --rm --entrypoint /bin/bash lscr.io/linuxserver/bookstack:latest appkeySalin nilai yang dicetak ke dalam APP_KEY, kemudian tulis perkhidmatan tersebut:
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 mesti sepadan dengan alamat yang benar-benar ditaip oleh pembaca, termasuk skema dan sebarang port. Tetapkannya kepada http://localhost, kemudian sajikan laman melalui HTTPS. Jika tidak, pautan dan ubah hala yang dijana akan menunjuk kepada hos yang salah, lalu pembaca akan melihat halaman log masuk yang berulang kembali kepada halaman itu sendiri. Jika fail compose masih baharu bagi anda, mulakan dengan asas Docker Compose pada VPS sebelum mengikuti panduan ini.
Hidupkan perkhidmatan tersebut dan semak bahawa aplikasi memberikan respons, bukan sekadar memastikan container sedang berjalan:
docker compose up -d
docker compose ps
curl -sI http://127.0.0.1:6875/login200 OK bermaksud aplikasi PHP telah dimulakan dan berjaya mencapai pangkalan data. 500 hampir selalu bermaksud APP_KEY kosong atau kelayakan pangkalan data tidak sepadan, dan docker compose logs bookstack mencetak yang mana satu daripada kedua-duanya berlaku.
Wiki.js: satu pepohon, beberapa editor
Wiki.js ialah aplikasi Node.js. Persediaan Docker yang didokumenkan menggunakannya bersama PostgreSQL, walaupun perisian ini turut menerima MySQL, MariaDB, MSSQL dan SQLite. Berikut ialah fail compose daripada halaman Docker projek itu sendiri:
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:Ubah POSTGRES_PASSWORD dan DB_PASS bersama-sama sebelum menjalankannya kerana kedua-duanya membentuk satu kelayakan dan nilai contoh itu diketahui umum. Tag ditetapkan kepada ghcr.io/requarks/wiki:2 dengan sengaja. Dokumentasi tidak mengesyorkan latest kerana lonjakan versi utama mengubah skema pangkalan data ketika tika berjalan.
Versi 2 ialah siri yang perlu dijalankan. Setakat Julai 2026, keluaran versi 2 yang terbaru ialah 2.5.314, yang dikeluarkan pada Mei 2026. Versi 3 wujud, dan dokumentasinya sendiri menyatakan: "Laman ini adalah untuk keluaran beta Wiki.js 3.0 yang tidak stabil. Anda TIDAK sepatutnya memasangnya dalam persekitaran produksi." Anggap tag :3 sebagai pratonton.
Pada muatan pertama, Wiki.js membimbing anda melalui persediaan dalam pelayar untuk mencipta akaun pentadbir. Sehingga anda menyelesaikannya, sesiapa sahaja yang dapat mencapai port tersebut akan melihat wizard itu. Oleh itu, letakkan perkhidmatan di belakang proksi songsang dan TLS (keselamatan lapisan pengangkutan) sebelum membuka firewall. Wiki pada nama hos khusus secara semula jadi boleh diletakkan di belakang Traefik di hadapan beberapa aplikasi Docker apabila pelayan mengehoskan lebih daripada perkhidmatan ini.
Pilihan editor ialah sebab orang memilih Wiki.js. Satu tika boleh mengandungi halaman Markdown, halaman editor visual, halaman HTML mentah dan halaman AsciiDoc secara bersebelahan. Ini membantu apabila anda mengimport kandungan lama dalam format yang tidak ingin anda tukarkan. Namun, ini juga boleh menyebabkan satu wiki mempunyai empat gaya penulisan organisasi. Oleh itu, tetapkan editor lalai pada hari pertama dan rekodkan keputusan itu.
Outline: editor terbaik, prasyarat paling berat
Outline biasanya merujuk kepada aplikasi yang dicari apabila pengguna mahukan pengalaman seperti alat nota komersial. Outline ialah aplikasi Node.js, dan keluaran semasanya pada Julai 2026 ialah 1.9.2. Fail persekitaran contoh menyenaraikan keperluannya: PostgreSQL melalui DATABASE_URL, Redis melalui REDIS_URL, dua rahsia rawak dan URL yang boleh dicapai secara umum.
openssl rand -hex 32
openssl rand -hex 32Jalankan perintah itu dua kali dan simpan kedua-dua nilai. Nilai pertama menjadi SECRET_KEY, manakala nilai kedua menjadi UTILS_SECRET. Bahagian utama fail persekitaran kemudiannya kelihatan seperti ini:
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 hanya betul apabila pangkalan data berada pada mesin yang sama atau rangkaian Docker yang sama. Jangan sertakannya untuk pangkalan data yang dicapai melalui rangkaian. Jika tidak, sambungan dihantar tanpa penyulitan. Lampiran tidak lagi memaksa anda menggunakan storan objek: FILE_STORAGE=local menyimpan muat naik ke direktori di atas. Direktori itu mestilah volume yang boleh ditulis oleh container dan mesti termasuk dalam sandaran anda. Tetapkan FILE_STORAGE=s3 menggunakan nilai AWS_* jika anda mahu menyimpan fail tersebut dalam bucket yang serasi dengan S3.
Sekarang bahagian yang sering mengejutkan pengguna. Outline tidak mempunyai log masuk terbina dalam menggunakan nama pengguna dan kata laluan. Konfigurasi contoh Outline sendiri menyatakan bahawa kelayakan log masuk pihak ketiga diperlukan: "sekurang-kurangnya SATU DARIPADA pilihan ini diperlukan untuk pemasangan yang berfungsi; jika tidak, anda tidak mempunyai pilihan log masuk". Pembekal yang didokumenkan termasuk Google, Slack, Microsoft Entra, Discord dan mana-mana pelayan OpenID Connect (OIDC) generik melalui OIDC_CLIENT_ID, OIDC_CLIENT_SECRET, OIDC_AUTH_URI, OIDC_TOKEN_URI dan OIDC_USERINFO_URI.
Oleh itu, kos sebenar Outline ialah Outline serta PostgreSQL, Redis dan pembekal identiti. Jika pasukan anda sudah menggunakan Google Workspace atau Microsoft Entra untuk log masuk, komponen terakhir itu hanya mengambil masa sepuluh minit dan Outline menjadi pilihan yang sangat menarik. Jika tidak, anda juga perlu mengehos sendiri sesuatu seperti Keycloak atau Authentik. Ini ialah perkhidmatan kedua yang perlu ditampal dan disandarkan. Peruntukkan memori yang mencukupi: panduan Outline sendiri mengesyorkan kira-kira 512 MB bagi setiap proses web, yang ditetapkan oleh WEB_CONCURRENCY, selain memori untuk pangkalan data dan Redis.
Cara setiap satu mengurus pihak yang boleh membaca kandungan tertentu
BookStack menyediakan akaun e-mel dan kata laluan tempatan secara lalai, serta menyokong LDAP, SAML2 dan OIDC sebagai alternatif. Keizinan ditetapkan mengikut peranan dan boleh digantikan pada satu shelf, book, chapter atau page tertentu. Oleh sebab hierarkinya tetap, keizinan diwarisi ke peringkat di bawahnya secara yang boleh dijangka.
Wiki.js turut menyediakan akaun tempatan dan menambah senarai panjang strategi yang boleh diaktifkan dalam kawasan pentadbiran. Peraturan halamannya memberikan atau menafikan akses berdasarkan corak laluan. Ciri ini berkuasa dan mudah tersilap digunakan kerana peraturan yang ditulis untuk ops/* akan meliputi secara senyap setiap halaman yang kemudian anda simpan di bawah laluan tersebut.
Outline menyerahkan perkara ini sepenuhnya kepada penyedia identiti anda. Keahlian mengikuti penyedia identiti, manakala dalam Outline anda mengawal akses mengikut koleksi dan kumpulan. Tiada akaun tempatan yang tertinggal apabila seseorang meninggalkan syarikat. Ini merupakan kelebihan sebenar apabila penyedia identiti itu memang digunakan sebagai sistem untuk menyahperuntukkan akses.
Cara carian berfungsi bagi setiap satu
Carian menentukan sama ada wiki benar-benar berguna atau sekadar menjadi folder fail yang dilupakan.
BookStack mencari dalam pangkalan data dan menyediakan bahasa pertanyaan yang boleh dipelajari pembaca dalam masa seminit. Tanda petikan untuk frasa, seperti dalam "london meeting", memerlukan rentetan yang sama tepat. Tanda kurung siku digunakan untuk mencari tag: [location=london] memadankan nama tag, nilai atau kedua-duanya, dengan perbandingan termasuk !=, >= dan like. Tanda kurung berkelompok menapis metadata, seperti dalam {created_after:2016-12-30}. Mana-mana istilah tepat, tag atau penapis boleh dinafikan dengan menambah awalan -. BookStack mengehadkan bilangan istilah bagi setiap jenis dalam satu pertanyaan. Oleh itu, pertanyaan yang terlalu panjang dipendekkan dan bukannya dilaksanakan.
Wiki.js menganggap carian sebagai modul yang boleh dipasang. Enjin yang didokumenkan ialah enjin pangkalan data asas, enjin PostgreSQL, Elasticsearch, Algolia, AWS CloudSearch dan Azure Search. Enjin asas sesuai untuk beberapa ratus halaman. Jika anda menjalankan PostgreSQL, tukar kepada enjin PostgreSQL dalam bahagian pentadbiran kerana enjin ini menggunakan indeks teks penuh pangkalan data itu sendiri, bukannya padanan mudah. Gunakan Elasticsearch hanya untuk wiki yang cukup besar sehingga anda bersedia menjalankan dan menampal perkhidmatan carian kedua.
Outline mencari dalam indeks teks penuh PostgreSQL. Tiada enjin untuk dipilih atau ditala. Outline juga mencari teks dalam dokumen yang dimuat naik. Untuk wiki pasukan dengan jumlah dokumen dalam lingkungan beberapa ribu, pilihan ini memerlukan usaha paling sedikit antara ketiga-tiganya. Namun, tiada tetapan yang boleh diubah jika carian itu tidak lagi cukup pantas.
Yang mana sesuai untuk anda
Pilih BookStack jika anda mahu wiki beroperasi petang ini dan lebih rela membincangkan kandungan daripada strukturnya. Ia mempunyai komponen paling sedikit: satu aplikasi PHP dan satu pangkalan data MySQL. Ia sesuai untuk runbook dalaman dan dokumentasi pelanggan, serta sesuai untuk pasukan yang kebanyakan penulisnya bukan jurutera. Ia juga paling mudah disandarkan antara ketiga-tiganya kerana keseluruhan keadaannya terdiri daripada satu pembuangan pangkalan data dan direktori uploads.
Pilih Wiki.js jika anda memerlukan editor tertentu atau strategi pengesahan tertentu yang tidak ditawarkan oleh pilihan lain, atau jika anda mengimport sejumlah besar Markdown atau AsciiDoc sedia ada dan mahu struktur laluannya dikekalkan. Terima bahawa anda menjalankan tindanan yang lebih berat dan tetapkan tag versi utama.
Pilih Outline jika kualiti penulisan paling penting, wiki itu untuk pasukan dan bukan untuk orang awam, serta anda sudah mempunyai pembekal identiti. Persediaan itu memberikan ganjaran berupa editor yang benar-benar digemari pengguna. Jangan pilihnya sebagai aplikasi pertama yang dihoskan sendiri.
Jika tiada satu pun daripada ketiga-tiganya sesuai, ketidakpadanan itu biasanya berpunca daripada jenis kandungan. Invois dan kontrak yang diimbas lebih sesuai disimpan dalam sistem pengurusan dokumen seperti Paperless-ngx berbanding wiki, dan memaksanya ke dalam wiki ialah sebab begitu banyak wiki akhirnya ditinggalkan. Untuk gambaran lebih luas tentang perkara lain yang sesuai ditempatkan pada pelayan anda sendiri, lihat senarai pendek pengehosan sendiri untuk 2026.
Saiz dan sandaran
Ketiga-tiganya boleh dijalankan pada VPS kecil, tetapi keperluan minimum yang realistik berbeza kerana komponen yang diperlukan setiap satu berbeza. BookStack menggunakan satu proses aplikasi dan MySQL. Wiki.js menggunakan satu proses Node dan PostgreSQL. Outline menggunakan satu proses Node, PostgreSQL dan Redis, biasanya bersama pembekal identiti. Oleh itu, Outline memerlukan lebih banyak memori.
Sandarkan pangkalan data dan muat naik bersama-sama. Kemudian pulihkan kedua-duanya ke dalam instance sementara sekali sebelum anda bergantung pada sandaran itu. Sandaran wiki yang belum pernah dipulihkan hanyalah anggaran. Untuk BookStack, ini bermaksud mysqldump serta volume /config. Untuk Wiki.js dan Outline, ini bermaksud pg_dump serta volume data. Bagi Outline, sandarkan juga apa-apa yang berada dalam FILE_STORAGE_LOCAL_ROOT_DIR.
FAQ
Wiki yang manakah dihoskan sendiri paling mudah dipasang?
BookStack. Ia ialah aplikasi PHP tunggal dengan pangkalan data MySQL, dan projek ini menyediakan skrip pemasangan untuk Ubuntu 24.04 yang menyediakan Apache, MySQL 8.0 dan PHP 8.3 dalam satu pelaksanaan. Imej kontena hanya memerlukan APP_KEY dan kelayakan pangkalan data. Wiki.js menambah masa jalan Node dan pelayan PostgreSQL, manakala Outline turut menambah Redis dan penyedia identiti luaran.
Bolehkah saya menggunakan Outline tanpa Google atau penyedia SSO lain?
Tidak. Outline tidak mempunyai log masuk nama pengguna dan kata laluan tempatan. Konfigurasi contoh Outline menyatakan bahawa sekurang-kurangnya satu penyedia log masuk pihak ketiga diperlukan. Jika tidak, anda tidak mempunyai sebarang pilihan log masuk. Anda boleh menggunakan Google, Slack, Microsoft Entra, Discord atau mana-mana pelayan OpenID Connect generik seperti Keycloak atau Authentik yang dihoskan sendiri. Menjalankan penyedia tersebut ialah sebahagian daripada kos menjalankan Outline.
Patutkah saya memasang Wiki.js 3 atau Wiki.js 2?
Versi 2. Setakat July 2026, keluaran versi 2 yang terbaharu ialah 2.5.314, dari May 2026. Dokumentasi versi 3 menyatakan dengan jelas bahawa versi tersebut ialah beta yang tidak stabil dan tidak patut dipasang dalam persekitaran produksi. Tetapkan imej anda kepada ghcr.io/requarks/wiki:2 dan bukannya latest, kerana perubahan versi utama mengubah skema pangkalan data pada tika yang sedang berjalan.
Yang manakah mempunyai carian terbaik?
Setiap satunya kuat dalam cara yang berbeza. BookStack menyediakan bahasa pertanyaan kepada pembaca, dengan frasa tepat, penapis tag seperti [location=london] dan penapis metadata seperti {created_after:2016-12-30}. Mana-mana istilah tersebut boleh dinafikan dengan - di hadapan. Outline tidak memerlukan konfigurasi dan mencari teks dalam fail yang dimuat naik. Wiki.js paling mudah dilaraskan kerana anda memilih enjinnya. Enjin PostgreSQL wajar ditukar kepadanya sebaik sahaja wiki anda melebihi beberapa ratus halaman.
Bolehkah saya memindahkan kandungan saya daripada satu sistem ke sistem lain kemudian?
Sebahagiannya, dan anda harus menjangkakan kerja manual. Ketiga-tiga sistem boleh mengeksport dan mengimport Markdown, jadi teks halaman biasanya kekal. Struktur tidak dipindahkan dengan sempurna. Buku dan bab BookStack tidak mempunyai padanan dalam dokumen bersarang Outline, manakala laluan Wiki.js tidak dapat dipetakan kepada hierarki tetap BookStack. Lampiran, keizinan dan sejarah halaman ialah bahagian yang paling berkemungkinan hilang. Oleh itu, eksport satu sampel dan semak bahagian tersebut sebelum anda meneruskan migrasi.