BookStack vs Wiki.js vs Outline: Wiki Self-hosted
Bandingkan BookStack, Wiki.js, dan Outline berdasarkan bobot setup, model editor, login, serta pencarian. Temukan pilihan tepat untuk admin tunggal atau tim.
Wiki self-hosted mana yang sebaiknya Anda jalankan
Wiki self-hosted menempatkan dokumen tim Anda di satu tempat yang dapat dicari pada server yang Anda kendalikan. BookStack, Wiki.js, dan Outline semuanya menjalankan fungsi tersebut. Perbedaan terbesar terletak pada seberapa banyak komponen yang harus Anda siapkan sebelum halaman pertama dimuat dan siapa yang diizinkan untuk login.
BookStack paling mudah disiapkan dan paling ketat dalam hal struktur. Wiki.js memberi Anda pilihan editor paling luas dalam satu hierarki halaman. Outline memiliki pengalaman menulis terbaik di antara ketiganya, dan tidak mengizinkan siapa pun untuk login sampai Anda menghubungkannya ke penyedia identitas eksternal.
Semua informasi di bawah ini diambil dari dokumentasi resmi proyek dan file konfigurasi yang mereka publikasikan. Ini adalah perbandingan kemampuan, bukan benchmark. Nomor versi dan persyaratan disertai tanggal karena ketiganya terus berkembang.
Struktur adalah pilihan yang sebenarnya
BookStack menetapkan struktur konten Anda. Sebuah halaman berada di dalam buku, sebuah buku dapat memuat bab, dan rak mengelompokkan buku. Anda tidak dapat membuat tingkat kelima. Batasan itu adalah inti produk: penulis baru mengetahui lokasi halaman karena hanya ada satu tempat untuk menaruhnya. Konsekuensinya, konten yang tidak sesuai dengan struktur tersebut harus dipaksakan masuk ke dalamnya.
Wiki.js menggunakan struktur pohon berbasis jalur, seperti folder pada disk. Halaman di ops/backup/restic berada di lokasi yang Anda tentukan, dan Anda memilih kedalamannya. Tidak ada yang mencegah dua orang menyimpan subjek yang sama di dua cabang berbeda. Karena itu, instance Wiki.js memerlukan satu orang yang bertanggung jawab atas struktur pohon tersebut.
Outline menggunakan koleksi dengan dokumen yang disarangkan di dalam dokumen lain. Anda dapat memindahkan dokumen dengan menyeretnya menggunakan mouse. Dari ketiganya, Outline paling fleksibel. Karena itu, strukturnya juga paling mudah menjadi tidak konsisten.
BookStack: instalasi paling sederhana
BookStack adalah aplikasi PHP yang menggunakan MySQL sebagai basis data. Per Juli 2026, persyaratan yang didokumentasikan adalah PHP 8.2 atau yang lebih baru serta MySQL 8.0 atau MariaDB 10.6 atau yang lebih baru. Composer 2.2 atau yang lebih baru juga diperlukan jika Anda memasang dari kode sumber. Lini rilis saat ini adalah 26.05.
Proyek ini menyediakan satu skrip instalasi untuk setiap rilis Ubuntu. Skrip untuk 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 peringatan pada skrip tersebut sebelum menjalankannya. Dokumentasi menyatakan bahwa skrip itu "HANYA UNTUK OS BARU, skrip ini akan memasang Apache, MySQL 8.0 & PHP 8.3 dan dapat MENIMPA konfigurasi web yang sudah ada pada mesin". Pada server yang sudah melayani koneksi pada port 80, skrip mengambil alih port tersebut dan menulis ulang konfigurasi Apache. Gunakan container di server itu, atau pasang BookStack secara manual di atas stack LAMP yang sudah ada di Ubuntu 24.04.
Rute container menggunakan image LinuxServer.io, yaitu opsi yang dirujuk oleh dokumentasi BookStack. BookStack memerlukan kunci enkripsi sesi dan tidak akan menyajikan halaman tanpa kunci tersebut, jadi buat kunci itu terlebih dahulu.
docker run -it --rm --entrypoint /bin/bash lscr.io/linuxserver/bookstack:latest appkeySalin nilai yang dicetak ke dalam APP_KEY, lalu tulis service 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 harus cocok dengan alamat yang benar-benar diketik pembaca, termasuk skema dan port apa pun. Atur nilainya ke http://localhost, lalu sajikan situs melalui HTTPS. Jika tidak, tautan dan pengalihan yang dibuat akan mengarah ke host yang salah, sehingga pembaca melihat halaman login yang terus kembali ke halaman itu sendiri. Jika file compose masih baru bagi Anda, pelajari dasar-dasar Docker Compose di VPS terlebih dahulu.
Jalankan aplikasi dan periksa bahwa aplikasi merespons, bukan hanya bahwa container sedang berjalan:
docker compose up -d
docker compose ps
curl -sI http://127.0.0.1:6875/login200 OK berarti aplikasi PHP berhasil melakukan boot dan terhubung ke basis data. 500 hampir selalu berarti APP_KEY kosong atau kredensial basis data tidak cocok. docker compose logs bookstack menampilkan penyebabnya.
Wiki.js: satu hierarki, beberapa editor
Wiki.js adalah aplikasi Node.js. Konfigurasi Docker yang didokumentasikan memasangkannya dengan PostgreSQL, meskipun perangkat lunak ini juga mendukung MySQL, MariaDB, MSSQL, dan SQLite. Berikut adalah file compose dari halaman Docker milik proyek tersebut:
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 secara bersamaan sebelum menjalankannya, karena keduanya merupakan satu kredensial dan nilai contoh tersebut bersifat publik. Tag dikunci pada ghcr.io/requarks/wiki:2 dengan sengaja. Dokumentasi tidak menyarankan latest, karena loncatan versi mayor mengubah skema database pada instance yang sedang berjalan.
Version 2 adalah lini yang digunakan. Per Juli 2026, rilis version 2 terbaru adalah 2.5.314, yang dirilis pada Mei 2026. Version 3 sudah tersedia, dan dokumentasinya sendiri menyatakan: "Situs ini ditujukan untuk rilis beta Wiki.js 3.0 yang tidak stabil. Anda TIDAK BOLEH memasangnya di lingkungan produksi." Perlakukan tag :3 sebagai pratinjau.
Saat pertama kali dimuat, Wiki.js memandu Anda melalui penyiapan di browser untuk membuat akun administrator. Sebelum penyiapan selesai, siapa pun yang dapat menjangkau port tersebut akan melihat wizard itu. Karena itu, tempatkan layanan di belakang reverse proxy dan TLS (keamanan lapisan transport) sebelum membuka firewall. Wiki dengan hostname sendiri secara alami dapat ditempatkan di belakang Traefik di depan beberapa aplikasi Docker ketika server menghosting lebih dari satu layanan ini.
Pilihan editor adalah alasan orang memilih Wiki.js. Satu instance dapat menampung halaman Markdown, halaman editor visual, halaman HTML mentah, dan halaman AsciiDoc secara berdampingan. Hal ini membantu ketika Anda mengimpor konten lama dalam format yang tidak ingin Anda konversi. Namun, hal ini juga dapat menghasilkan empat gaya penulisan internal dalam satu wiki. Karena itu, tentukan editor default sejak hari pertama dan catat keputusan tersebut.
Outline: editor terbaik, prasyarat terberat
Outline adalah aplikasi yang biasanya dimaksud orang ketika menginginkan sesuatu yang terasa seperti alat catatan komersial. Outline adalah aplikasi Node.js, dan rilis saat ini per Juli 2026 adalah 1.9.2. File lingkungan contohnya mencantumkan kebutuhan aplikasi: PostgreSQL melalui DATABASE_URL, Redis melalui REDIS_URL, dua secret acak, dan URL yang dapat dijangkau secara publik.
openssl rand -hex 32
openssl rand -hex 32Jalankan perintah tersebut dua kali dan simpan kedua nilainya. Nilai pertama menjadi SECRET_KEY, sedangkan nilai kedua menjadi UTILS_SECRET. Bagian inti file lingkungan kemudian terlihat 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 tepat jika database berada di mesin yang sama atau jaringan Docker yang sama. Jangan gunakan nilai tersebut untuk database yang diakses melalui jaringan, karena koneksi akan dikirim tanpa enkripsi. Lampiran tidak lagi mengharuskan Anda menggunakan object storage: FILE_STORAGE=local menulis unggahan ke direktori di atas. Direktori tersebut harus berupa volume yang dapat ditulisi container dan disertakan dalam pencadangan Anda. Atur FILE_STORAGE=s3 menggunakan nilai AWS_* jika Anda ingin menyimpan file tersebut dalam bucket yang kompatibel dengan S3.
Sekarang bagian yang mengejutkan bagi banyak orang. Outline tidak memiliki login bawaan menggunakan nama pengguna dan kata sandi. Contoh konfigurasi Outline sendiri menyatakan bahwa kredensial login pihak ketiga diperlukan: "setidaknya SATU DARI opsi ini diperlukan agar instalasi berfungsi, atau Anda tidak memiliki opsi login". Provider yang didokumentasikan mencakup Google, Slack, Microsoft Entra, Discord, dan server OpenID Connect (OIDC) generik apa pun melalui OIDC_CLIENT_ID, OIDC_CLIENT_SECRET, OIDC_AUTH_URI, OIDC_TOKEN_URI, dan OIDC_USERINFO_URI.
Jadi, biaya sebenarnya Outline mencakup Outline, PostgreSQL, Redis, dan identity provider. Jika tim Anda sudah login menggunakan Google Workspace atau Microsoft Entra, komponen terakhir tersebut hanya memerlukan waktu sepuluh menit dan Outline menjadi sangat menarik. Jika belum, Anda juga harus melakukan self-hosting terhadap sesuatu seperti Keycloak atau Authentik. Itu berarti ada layanan kedua yang harus ditambal dan dicadangkan. Sesuaikan alokasi memori: panduan Outline sendiri menyarankan sekitar 512 MB per proses web, yang ditetapkan melalui WEB_CONCURRENCY, di luar kebutuhan database dan Redis.
Cara masing-masing mengatur siapa yang dapat membaca apa
BookStack menyediakan akun email dan kata sandi lokal sejak awal, serta mendukung LDAP, SAML2, dan OIDC sebagai alternatif. Izin ditetapkan berdasarkan peran dan dapat diganti pada satu shelf, book, chapter, atau page. Karena hierarkinya tetap, izin diwariskan ke tingkat di bawahnya secara konsisten dan dapat diprediksi.
Wiki.js juga menyediakan akun lokal dan menambahkan banyak strategi yang dapat diaktifkan di area admin. Aturan halamannya memberikan atau menolak akses berdasarkan pola path. Fitur ini fleksibel dan mudah salah digunakan, karena aturan yang ditulis untuk ops/* secara diam-diam mencakup setiap page yang nantinya Anda simpan di bawah path tersebut.
Outline menyerahkan pengelolaan ini sepenuhnya kepada penyedia identitas Anda. Keanggotaan mengikuti penyedia identitas, sedangkan di dalam Outline Anda mengatur akses berdasarkan collection dan group. Tidak ada akun lokal yang tertinggal ketika seseorang keluar dari perusahaan. Ini merupakan keuntungan nyata jika penyedia identitas tersebut sudah menjadi sistem yang Anda gunakan untuk mencabut akses.
Cara kerja pencarian pada masing-masing platform
Pencarian menentukan apakah wiki benar-benar berguna atau hanya menjadi folder berisi berkas yang terlupakan.
BookStack mencari di basis data dan menyediakan bahasa kueri yang dapat dipelajari pembaca dalam satu menit. Tanda kutip untuk frasa, seperti pada "london meeting", mengharuskan string tersebut sama persis. Tanda kurung siku digunakan untuk mencari tag: [location=london] mencocokkan nama tag, nilai, atau keduanya, dengan perbandingan termasuk !=, >=, dan like. Tanda kurung kurawal digunakan untuk memfilter metadata, seperti pada {created_after:2016-12-30}. Setiap istilah pencocokan persis, tag, atau filter dapat dinegasikan dengan menambahkan - di awal. BookStack membatasi jumlah istilah untuk setiap jenis yang dapat dimuat dalam satu kueri. Karena itu, kueri yang sangat panjang akan dipangkas, bukan dijalankan.
Wiki.js memperlakukan pencarian sebagai modul yang dapat dicolokkan. Mesin yang didokumentasikan mencakup mesin basis data dasar, mesin PostgreSQL, Elasticsearch, Algolia, AWS CloudSearch, dan Azure Search. Mesin dasar memadai untuk beberapa ratus halaman. Jika Anda menggunakan PostgreSQL, beralihlah ke mesin PostgreSQL di area administrasi karena mesin tersebut menggunakan indeks teks lengkap milik basis data, bukan pencocokan sederhana. Gunakan Elasticsearch untuk wiki yang cukup besar sehingga Anda bersedia menjalankan dan menambal layanan pencarian kedua.
Outline mencari menggunakan indeks teks lengkap PostgreSQL. Tidak ada mesin yang perlu dipilih atau pengaturan yang perlu disesuaikan. Outline juga mencari teks di dalam dokumen yang diunggah. Untuk wiki tim dengan jumlah dokumen beberapa ribu, Outline memerlukan pekerjaan paling sedikit di antara ketiganya. Namun, jika kinerjanya tidak lagi cukup cepat, tidak ada pengaturan yang dapat diubah untuk memperbaikinya.
Yang paling sesuai untuk Anda
Pilih BookStack jika Anda ingin wiki aktif siang ini dan lebih suka membahas konten daripada struktur. Komponennya paling sedikit: satu aplikasi PHP dan satu database MySQL. BookStack cocok untuk runbook internal dan dokumentasi pelanggan, serta cocok untuk tim yang sebagian besar penulisnya bukan engineer. BookStack juga paling mudah dicadangkan dari ketiganya, karena seluruh statusnya terdiri atas satu dump database dan satu direktori uploads.
Pilih Wiki.js jika Anda memerlukan editor tertentu atau strategi autentikasi tertentu yang tidak ditawarkan oleh pilihan lain, atau jika Anda mengimpor banyak Markdown atau AsciiDoc yang sudah ada dan ingin mempertahankan struktur path. Terima bahwa Anda menjalankan stack yang lebih berat, lalu tetapkan tag versi mayor.
Pilih Outline jika kualitas penulisan adalah hal terpenting, wiki ditujukan untuk tim dan bukan untuk publik, serta Anda sudah memiliki identity provider. Konfigurasi tersebut memberi Anda editor yang benar-benar nyaman digunakan. Jangan memilihnya sebagai aplikasi self-hosted pertama Anda.
Jika tidak satu pun dari ketiganya sesuai, biasanya penyebabnya adalah ketidakcocokan jenis konten. Invoice dan kontrak hasil pemindaian sebaiknya disimpan dalam sistem manajemen dokumen seperti Paperless-ngx, bukan dalam wiki. Memaksakan konten tersebut ke wiki menjadi alasan banyak wiki akhirnya ditinggalkan. Untuk gambaran yang lebih luas tentang aplikasi lain yang layak ditempatkan di server Anda sendiri, lihat daftar pilihan self-hosting untuk 2026.
Penentuan ukuran dan pencadangan
Ketiganya dapat berjalan pada VPS kecil, tetapi kebutuhan minimum realistisnya berbeda karena komponen pendukungnya berbeda. BookStack menggunakan satu proses aplikasi dan MySQL. Wiki.js menggunakan satu proses Node dan PostgreSQL. Outline menggunakan satu proses Node, PostgreSQL, dan Redis. Biasanya Outline juga berjalan bersama penyedia identitas. Karena itu, Outline memerlukan memori tambahan.
Cadangkan database dan unggahan secara bersamaan. Kemudian, pulihkan keduanya ke instance sementara sekali sebelum Anda mengandalkan cadangan tersebut. Cadangan wiki yang belum pernah dipulihkan hanya merupakan perkiraan. Untuk BookStack, ini berarti mysqldump dan volume /config. Untuk Wiki.js dan Outline, ini berarti pg_dump serta volume data. Untuk Outline, sertakan juga apa pun yang berada di FILE_STORAGE_LOCAL_ROOT_DIR.
FAQ
Wiki yang di-hosting sendiri mana yang paling mudah dipasang?
BookStack. Aplikasi ini merupakan satu aplikasi PHP dengan database MySQL. Proyek ini menyediakan skrip instalasi untuk Ubuntu 24.04 yang menyiapkan Apache, MySQL 8.0, dan PHP 8.3 dalam satu kali eksekusi. Image container hanya memerlukan APP_KEY dan kredensial database. Wiki.js menambahkan runtime Node dan server PostgreSQL, sedangkan Outline juga menambahkan Redis dan penyedia identitas eksternal.
Dapatkah saya menggunakan Outline tanpa Google atau penyedia SSO lainnya?
Tidak. Outline tidak memiliki login lokal dengan nama pengguna dan kata sandi. Konfigurasi contoh Outline menyatakan bahwa setidaknya satu penyedia login pihak ketiga diperlukan. Jika tidak, Anda sama sekali tidak memiliki opsi login. Anda dapat menggunakan Google, Slack, Microsoft Entra, Discord, atau server OpenID Connect generik seperti Keycloak atau Authentik yang di-hosting sendiri. Menjalankan penyedia tersebut merupakan bagian dari biaya menjalankan Outline.
Sebaiknya saya memasang Wiki.js 3 atau Wiki.js 2?
Versi 2. Per Juli 2026, rilis terbaru versi 2 adalah 2.5.314 dari Mei 2026. Dokumentasi versi 3 menyatakan dengan jelas bahwa versi tersebut merupakan beta yang tidak stabil dan tidak boleh dipasang di lingkungan produksi. Tetapkan image ke ghcr.io/requarks/wiki:2, bukan latest, karena perubahan versi utama mengubah skema database pada instance yang sedang berjalan.
Mana yang memiliki pencarian terbaik?
Ketiganya unggul dalam aspek yang berbeda. BookStack menyediakan bahasa kueri dengan frasa persis, filter tag seperti [location=london], dan filter metadata seperti {created_after:2016-12-30}. Setiap istilah tersebut dapat dinegasikan dengan - di bagian awal. Outline tidak memerlukan konfigurasi dan dapat mencari teks di dalam file yang diunggah. Wiki.js paling mudah disesuaikan karena Anda dapat memilih mesinnya. Mesin PostgreSQL layak digunakan segera setelah wiki Anda melampaui beberapa ratus halaman.
Dapatkah saya memindahkan konten dari satu platform ke platform lain nanti?
Sebagian, tetapi Anda harus mengantisipasi pekerjaan manual. Ketiganya dapat mengekspor dan mengimpor Markdown, sehingga teks halaman biasanya tetap tersedia. Struktur tidak dipertahankan dengan baik. Buku dan bab BookStack tidak memiliki padanan dalam dokumen bertingkat Outline, dan jalur Wiki.js tidak dapat dipetakan ke hierarki tetap BookStack. Lampiran, izin, dan riwayat halaman merupakan bagian yang paling mungkin hilang. Karena itu, ekspor sampel dan periksa bagian-bagian tersebut sebelum memulai migrasi.