SSD Nodes Learn 8GB RAM — yılda $66
Rehberler Matt ConnorYazan Matt Connor · Güncellendi 2026-08-01

BookStack mi Wiki.js mi Outline mı? Self-hosted wiki

BookStack, Wiki.js ve Outline; kurulum yükü, düzenleme modeli, giriş seçenekleri ve aramayı karşılaştırır. Tek yönetici ve ekipler için seçim açıklanır.

Hangi self-hosted wiki çalıştırılmalı

Self-hosted wiki, ekibinizin belgelerini denetiminizdeki bir sunucuda aranabilir tek bir yerde toplar. BookStack, Wiki.js ve Outline bu işi yapar. En büyük farkları, ilk sayfa yüklenmeden önce ne kadar bileşen kurmanız gerektiği ve kimlerin oturum açmasına izin verildiğidir.

BookStack kurulumu en kolay olanıdır ve yapı konusunda en katı yaklaşımı benimser. Wiki.js, tek bir sayfa ağacı üzerinde en geniş düzenleyici seçeneklerini sunar. Outline, üçü arasında en iyi yazma deneyimini sağlar ve harici bir kimlik sağlayıcı bağlanana kadar hiç kimsenin oturum açmasına izin vermez.

Aşağıdaki bilgilerin tamamı projelerin kendi belgelerinden ve yayımlanmış yapılandırma dosyalarından alınmıştır. Bu bir performans karşılaştırması değil, özellik karşılaştırmasıdır. Üçü de sürekli geliştirildiği için sürüm numaraları ve gereksinimler bir tarih ile belirtilmiştir.

Yapı asıl tercihtir

BookStack, içeriğinizin yapısını belirler. Bir sayfa bir kitabın içinde bulunur, bir kitap bölümler içerebilir ve raflar kitapları gruplandırır. Beşinci bir düzey oluşturamazsınız. Ürünün temel özelliği bu sınırlamadır: Bir yazar, sayfanın nereye gideceğini bilir; çünkü gidebileceği yalnızca tek bir yer vardır. Bunun bedeli, bu yapıya uymayan içeriğin yapıya zorla uydurulmasıdır.

Wiki.js, diskteki klasörlere benzer bir yol ağacı kullanır. ops/backup/restic konumundaki bir sayfa, onu nereye yerleştirirseniz orada bulunur ve derinliği siz belirlersiniz. İki kişinin aynı konuyu iki farklı dal altında sınıflandırmasını engelleyen bir unsur yoktur. Bu nedenle bir Wiki.js örneğinde ağacın sorumluluğunu üstlenen tek bir kişi bulunmalıdır.

Outline, belgelerin diğer belgelerin içinde iç içe bulunduğu koleksiyonları kullanır. Bir belgeyi taşımak için fareyle sürüklemek yeterlidir. Üç seçenek arasındaki en esnek ürün olduğundan, yapının zamanla dağılmasına izin vermek de en kolay bu üründe gerçekleşir.

BookStack: en küçük kurulum

BookStack, MySQL tarafından desteklenen bir PHP uygulamasıdır. Temmuz 2026 itibarıyla belgelenen gereksinimler PHP 8.2 veya üzeri ile MySQL 8.0 ya da MariaDB 10.6 veya üzeridir. Kaynak koddan kurulum yapılıyorsa Composer 2.2 veya üzeri de gerekir. Güncel sürüm serisi 26.05'tir.

Proje, her Ubuntu sürümü için bir kurulum betiği yayımlar. 24.04 betiği Apache, MySQL 8.0 ve PHP 8.3 bileşenlerini sizin için kurar.

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

Betiği çalıştırmadan önce betikteki uyarıyı okuyun. Belgelerde bunun “YALNIZCA TEMİZ BİR İŞLETİM SİSTEMİ İÇİNDİR; Apache, MySQL 8.0 ve PHP 8.3'ü kurar ve makinedeki mevcut web kurulumlarının ÜZERİNE YAZABİLİR” olduğu belirtilir. 80 numaralı portta zaten yanıt veren bir sunucuda betik bu portu kullanır ve Apache yapılandırmasını yeniden yazar. Bu durumda container kullanın veya BookStack'i Ubuntu 24.04 üzerinde mevcut bir LAMP yığınına elle kurun.

Container yöntemi, BookStack belgelerinin işaret ettiği LinuxServer.io imajını kullanır. BookStack bir oturum şifreleme anahtarına ihtiyaç duyar ve bu anahtar olmadan sayfa sunmaz. Bu nedenle önce anahtarı oluşturun.

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

Yazdırılan değeri APP_KEY içine kopyalayın ve ardından servisi yazın:

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, okuyucuların şema ve varsa port dahil olmak üzere gerçekten yazdığı adresle eşleşmelidir. Bunu http://localhost olarak ayarlayıp siteyi HTTPS üzerinden sunun. Aksi durumda oluşturulan bağlantılar ve yönlendirmeler yanlış ana bilgisayara işaret eder ve okuyucular kendisine geri yönlenen bir giriş sayfası görür. Compose dosyaları sizin için yeniyse, bu adımdan önce VPS üzerinde Docker Compose temelleri ile başlayın.

Uygulamayı başlatın ve yalnızca container'ın çalıştığını değil, uygulamanın yanıt verdiğini de denetleyin:

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

200 OK, PHP uygulamasının başlatıldığı ve veritabanına ulaştığı anlamına gelir. 500, neredeyse her zaman APP_KEY değerinin boş olduğu veya veritabanı kimlik bilgilerinin eşleşmediği anlamına gelir. docker compose logs bookstack bu iki durumdan hangisinin geçerli olduğunu gösterir.

Wiki.js: tek ağaç, birkaç düzenleyici

Wiki.js, Node.js uygulamasıdır. Belgelenen Docker kurulumu PostgreSQL ile birlikte kullanılır, ancak yazılım MySQL, MariaDB, MSSQL ve SQLite veritabanlarını da kabul eder. Aşağıdaki dosya, projenin kendi Docker sayfasındaki compose dosyasıdır:

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:

Çalıştırmadan önce POSTGRES_PASSWORD ve DB_PASS değerlerini birlikte değiştirin; bunlar tek bir kimlik bilgisinin parçalarıdır ve örnek değer herkese açıktır. Etiketin ghcr.io/requarks/wiki:2 sürümüne sabitlenmesinin nedeni budur. Belgelerde latest kullanılması önerilmez; çünkü ana sürüm yükseltmesi, çalışan bir örnekte veritabanı şemasını değiştirir.

Çalıştırılması gereken sürüm serisi 2'dir. Temmuz 2026 itibarıyla en yeni version 2 sürümü, Mayıs 2026 tarihli 2.5.314 sürümüdür. Version 3 mevcuttur ve kendi belgelerinde şu ifade yer alır: "Bu site, Wiki.js 3.0'ın kararlı olmayan beta sürümü içindir. Bunu production ortamına KURMAMALISINIZ." :3 etiketini önizleme olarak değerlendirin.

İlk yüklemede Wiki.js, administrator hesabını oluşturan tarayıcı içi kurulum adımlarını gösterir. Kurulum tamamlanana kadar porta ulaşabilen herkes bu sihirbazı görür. Bu nedenle firewall'u açmadan önce servisi reverse proxy ve TLS'nin (transport layer security) arkasına alın. Sunucu bu servisten fazlasını barındırıyorsa, kendi hostname'i olan bir wiki birden fazla Docker uygulamasının önünde Traefik arkasında doğal biçimde çalışır.

Düzenleyici seçimi, Wiki.js'in tercih edilmesinin nedenidir. Tek bir örnekte Markdown sayfaları, görsel düzenleyici sayfaları, ham HTML sayfaları ve AsciiDoc sayfaları yan yana tutulabilir. Bu özellik, dönüştürmek istemediğiniz bir biçimdeki eski içeriği içe aktarırken yararlıdır. Ancak tek bir wiki'de dört farklı kurum stilinin oluşmasına da yol açabilir. Bu nedenle varsayılan düzenleyiciye ilk günden karar verin ve bu kararı belgeleyin.

Outline: en iyi düzenleyici, en ağır ön koşullar

Outline, ticari bir not aracını andıran bir çözüm isteyenlerin genellikle kastettiği üründür. Node.js uygulamasıdır ve Temmuz 2026 itibarıyla mevcut sürümü 1.9.2'dir. Örnek ortam dosyasında gerekenler listelenir: DATABASE_URL üzerinden PostgreSQL, REDIS_URL üzerinden Redis, iki rastgele gizli değer ve genel erişime açık bir URL.

openssl rand -hex 32
openssl rand -hex 32

Bu komutu iki kez çalıştırın ve her iki değeri de saklayın. İlk değer SECRET_KEY, ikinci değer UTILS_SECRET olur. Ortam dosyasının temel bölümü şu şekildedir:

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 yalnızca veritabanı aynı makinede veya aynı Docker ağı üzerindeyse doğrudur. Ağ üzerinden erişilen bir veritabanı için bu ayarı kullanmayın. Aksi durumda bağlantı şifrelenmeden iletilir. Ekler artık object storage kullanımını zorunlu kılmaz: FILE_STORAGE=local, yüklemeleri yukarıdaki dizine yazar. Bu dizin, container'ın yazabildiği bir volume olmalı ve yedeklerinize dahil edilmelidir. Bu dosyaları S3 uyumlu bir bucket'a kaydetmek istiyorsanız FILE_STORAGE=s3 değerini AWS_* değerleriyle ayarlayın.

Şimdi çoğu kişinin gözden kaçırdığı noktaya gelelim. Outline'da yerleşik kullanıcı adı ve parola ile oturum açma özelliği yoktur. Kendi örnek yapılandırması, üçüncü taraf oturum açma kimlik bilgilerinin gerekli olduğunu belirtir: "çalışan bir kurulum için bunlardan EN AZ BİRİ gereklidir; aksi durumda oturum açma seçeneğiniz olmaz". Belgelenen sağlayıcılar arasında Google, Slack, Microsoft Entra, Discord ve OIDC_CLIENT_ID, OIDC_CLIENT_SECRET, OIDC_AUTH_URI, OIDC_TOKEN_URI ve OIDC_USERINFO_URI üzerinden kullanılan genel bir OpenID Connect (OIDC) sunucusu bulunur.

Bu nedenle Outline'ın gerçek maliyeti Outline, PostgreSQL, Redis ve bir kimlik sağlayıcısından oluşur. Ekibiniz zaten Google Workspace veya Microsoft Entra ile oturum açıyorsa bu son bileşenin kurulumu on dakikanızı alır ve Outline oldukça cazip hale gelir. Böyle bir sistem yoksa Keycloak veya Authentik gibi bir ürünü de kendiniz barındırmanız gerekir. Bu, güncellenmesi ve yedeklenmesi gereken ikinci bir hizmet anlamına gelir. Bellek planlamasını buna göre yapın: Outline'ın kendi önerisi, veritabanı ve Redis'e ek olarak WEB_CONCURRENCY ile belirlenen web process başına yaklaşık 512 MB'tır.

Her birinin kimlerin neyi okuyabileceğini ele alma biçimi

BookStack, varsayılan olarak yerel e-posta ve parola hesapları sunar. Alternatif olarak LDAP, SAML2 ve OIDC desteği sağlar. İzinler rol başına ayarlanabilir. Tek bir shelf, book, chapter veya page üzerinde bu izinler geçersiz kılınabilir. Hiyerarşi sabit olduğundan izinler öngörülebilir şekilde alt düzeylere devredilir.

Wiki.js de yerel hesaplarla birlikte gelir. Ayrıca yönetim alanından etkinleştirebileceğiniz uzun bir kimlik doğrulama stratejileri listesi sunar. Sayfa kuralları, yol deseni üzerinden erişime izin verir veya erişimi reddeder. Bu özellik güçlüdür, ancak hatalı yapılandırılması kolaydır. Bunun nedeni, ops/* için yazılan bir kuralın daha sonra bu yol altında depoladığınız her sayfayı sessizce kapsamasıdır.

Outline bu sorumluluğu tamamen kimlik sağlayıcısına bırakır. Üyelik, kimlik sağlayıcınızı temel alır. Outline içinde erişimi collection ve group düzeyinde denetleyebilirsiniz. Bir kişi şirketten ayrıldığında geride yerel bir hesap kalmaz. Kimlik sağlayıcı zaten kullanıcı yetkilerini kaldırdığınız sistemse bu önemli bir avantajdır.

Her birinde aramanın çalışma şekli

Arama, bir wiki'nin değerini kanıtladığı veya unutulmuş dosyalardan oluşan bir klasöre dönüştüğü noktadır.

BookStack veritabanında arama yapar ve okuyucuların bir dakikada öğrenebileceği bir sorgu dili sunar. "london meeting" örneğinde olduğu gibi bir ifadeyi tırnak içine almak, tam olarak bu dizeyi gerektirir. Köşeli parantezler etiketlerde arama yapar: [location=london] etiket adı, değeri veya her ikisiyle eşleşir; !=, >= ve like gibi karşılaştırmalar da desteklenir. Küme parantezleri, {created_after:2016-12-30} örneğinde olduğu gibi meta verileri filtreler. Tam eşleşme, etiket veya filtre terimleri - önekiyle olumsuzlanabilir. BookStack, tek bir sorguda her türden bulunabilecek terim sayısını sınırlar. Bu nedenle çok uzun bir sorgu çalıştırılmak yerine kısaltılır.

Wiki.js, aramayı eklenti olarak kullanılabilen bir modül şeklinde ele alır. Belgelenen arama motorları arasında temel veritabanı motoru, PostgreSQL motoru, Elasticsearch, Algolia, AWS CloudSearch ve Azure Search bulunur. Temel motor, birkaç yüz sayfa için yeterlidir. PostgreSQL kullanılıyorsa yönetim alanından PostgreSQL motoruna geçilmelidir. Çünkü bu motor basit eşleştirme yerine veritabanının kendi tam metin dizinini kullanır. Elasticsearch, ancak ikinci bir arama hizmetini çalıştırmayı ve güncellemelerini yönetmeyi kabul edecek kadar büyük bir wiki için kullanılmalıdır.

Outline, PostgreSQL tam metin dizinlerinde arama yapar. Seçilecek bir motor veya ayarlanacak bir seçenek yoktur. Ayrıca yüklenen belgelerin içindeki metinlerde de arama yapar. Düşük binlerce belge içeren bir ekip wiki'si için üç seçenek arasındaki en az çalışmayı gerektiren çözüm budur. Arama yeterince hızlı olmamaya başlarsa değiştirilebilecek bir ayar da yoktur.

Hangisi size uygun

Wiki'yi bu öğleden sonra çalışır duruma getirmek ve yapı yerine içerik hakkında tartışmayı tercih etmek istiyorsanız BookStack'i seçin. En az bileşene sahiptir: bir PHP uygulaması ve bir MySQL veritabanı. Dahili runbook'lar ve müşteri dokümantasyonu için uygundur. Yazarların çoğunun mühendis olmadığı ekipler için de uygundur. Üç seçenek içinde yedeklenmesi en kolay olanıdır. Tüm durum, tek bir veritabanı dökümü ile uploads dizininden oluşur.

Diğerlerinin sunmadığı belirli bir düzenleyiciye veya belirli bir kimlik doğrulama stratejisine ihtiyacınız varsa Wiki.js'i seçin. Büyük miktarda mevcut Markdown veya AsciiDoc içeriğini içe aktarıyor ve yol yapısını korumak istiyorsanız da uygundur. Daha ağır bir yığını çalıştıracağınızı kabul edin ve major version tag'ini sabitleyin.

Yazma kalitesi en önemli unsursa, wiki herkese açık olmak yerine bir ekip için kullanılacaksa ve zaten bir identity provider'ınız varsa Outline'ı seçin. Bu kurulum karşılığında, kullanıcıların gerçekten kullanmaktan hoşlandığı düzenleyiciyi sunar. İlk self-hosted uygulamanız olarak seçmeyin.

Üç seçenekten hiçbiri uygun değilse sorun genellikle içerik türündedir. Taranmış faturalar ve sözleşmeler wiki yerine Paperless-ngx gibi bir doküman yönetim sistemine ait olmalıdır. Bunları wiki'ye zorla eklemek, çok sayıda wiki'nin sonunda terk edilmesinin nedenidir. Kendi sunucunuzda yer vermeye değer diğer seçenekleri daha geniş bir açıdan görmek için 2026 self-hosting kısa listesine bakın.

Boyutlandırma ve yedekler

Üçü de küçük bir VPS üzerinde çalışır. Gerçekçi asgari kaynak gereksinimi, her uygulamanın arka planda çalıştırdığı bileşenlere göre değişir. BookStack tek bir uygulama işlemi ve MySQL kullanır. Wiki.js bir Node işlemi ve PostgreSQL kullanır. Outline ise bir Node işlemi, PostgreSQL ve Redis kullanır. Genellikle yanında bir kimlik sağlayıcı da çalışır. Bu nedenle Outline için daha fazla bellek ayrılmalıdır.

Veritabanını ve yüklenen dosyaları birlikte yedekleyin. Bu yedeğe güvenmeden önce ikisini bir kez geçici bir örneğe geri yükleyin. Geri yüklenmemiş bir wiki yedeği yalnızca varsayımdır. BookStack için bu, bir mysqldump ile /config volume anlamına gelir. Wiki.js ve Outline için pg_dump ile data volume anlamına gelir. Outline için ayrıca FILE_STORAGE_LOCAL_ROOT_DIR içinde bulunan bileşenler de yedeklenmelidir.

FAQ

Kurulumu en kolay self-hosted wiki hangisidir?

BookStack. MySQL veritabanına sahip tek bir PHP uygulamasıdır. Proje, Ubuntu 24.04 için Apache, MySQL 8.0 ve PHP 8.3 bileşenlerini tek çalıştırmada kuran bir yükleme betiği sunar. Container image yalnızca bir APP_KEY ve veritabanı kimlik bilgileri gerektirir. Wiki.js ayrıca bir Node çalışma zamanı ve PostgreSQL sunucusu ekler. Outline ise bunlara ek olarak Redis ve harici bir kimlik sağlayıcı gerektirir.

Google veya başka bir SSO sağlayıcısı olmadan Outline kullanılabilir mi?

Hayır. Outline'da yerel kullanıcı adı ve parola ile oturum açma desteği yoktur. Örnek yapılandırmasında en az bir üçüncü taraf oturum açma sağlayıcısının gerekli olduğu açıkça belirtilir. Aksi halde hiçbir oturum açma seçeneği bulunmaz. Google, Slack, Microsoft Entra, Discord veya self-hosted Keycloak ya da Authentik gibi genel bir OpenID Connect sunucusu kullanılabilir. Bu sağlayıcının çalıştırılması, Outline çalıştırma maliyetinin bir parçasıdır.

Wiki.js 3 mü, yoksa Wiki.js 2 mi kurulmalıdır?

Sürüm 2. Temmuz 2026 itibarıyla en yeni sürüm 2 sürümü, Mayıs 2026 tarihli 2.5.314 sürümüdür. Sürüm 3 belgelerinde bunun kararsız bir beta olduğu ve production ortamına kurulmaması gerektiği açıkça belirtilir. Image sürümünü ghcr.io/requarks/wiki:2 olarak sabitleyin; latest kullanmayın. Çünkü major sürüm değişikliği, çalışan bir instance altındaki veritabanı şemasını değiştirir.

Hangisinin arama özelliği daha iyidir?

Her biri farklı alanlarda güçlüdür. BookStack; tam ifadeler, [location=london] gibi tag filtreleri ve {created_after:2016-12-30} gibi metadata filtreleri içeren bir sorgu dili sunar. Bu terimlerin tümü, başına - getirilerek dışlanabilir. Outline yapılandırma gerektirmez ve yüklenen dosyaların içindeki metinlerde arama yapar. Wiki.js en fazla ayarlanabilirliği sunar; çünkü kullanılacak engine seçilebilir. PostgreSQL engine, wiki birkaç yüz sayfayı aştığında kullanılmaya geçmeye değerdir.

İçerik bir wiki'den diğerine daha sonra taşınabilir mi?

Kısmen taşınabilir; ancak manuel çalışma beklenmelidir. Üçü de Markdown dışa aktarma ve içe aktarma işlemlerini destekler. Bu nedenle sayfa metni genellikle korunur. Yapı düzgün biçimde korunmaz. BookStack book ve chapter yapılarının Outline içindeki iç içe belgelerde karşılığı yoktur. Wiki.js yolları da BookStack'in sabit hiyerarşisine eşlenemez. Ekler, izinler ve sayfa geçmişi en çok kaybolma olasılığı bulunan bölümlerdir. Bu nedenle geçişi kesinleştirmeden önce örnek bir dışa aktarma yapın ve bunları kontrol edin.

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