BookStack, Wiki.js o Outline: quale wiki self-hosted?
Confronto pratico tra BookStack, Wiki.js e Outline: installazione, editor, accesso e ricerca, con una scelta chiara per amministratori singoli e team.
Quale wiki self-hosted dovresti usare
Un wiki self-hosted raccoglie i documenti del team in un'unica posizione ricercabile, su un server che controlli. BookStack, Wiki.js e Outline svolgono tutti questa funzione. La differenza principale riguarda la quantità di componenti da configurare prima che venga caricata la prima pagina e chi può accedere.
BookStack è il più semplice da installare e impone la struttura più rigida. Wiki.js offre la scelta più ampia di editor all'interno di un unico albero di pagine. Outline offre la migliore esperienza di scrittura dei tre prodotti e non consente a nessuno di accedere finché non colleghi un provider di identità esterno.
Tutto ciò che segue è ricavato dalla documentazione dei progetti e dai relativi file di configurazione pubblicati. Si tratta di un confronto delle funzionalità, non di un benchmark. I numeri di versione e i requisiti riportano una data, perché tutti e tre i progetti vengono aggiornati regolarmente.
La struttura è la scelta reale
BookStack definisce la struttura dei contenuti. Una pagina si trova all'interno di un libro, un libro può contenere capitoli e gli scaffali raggruppano i libri. Non è possibile inventare un quinto livello. Questo limite è il prodotto: un nuovo autore sa dove collocare una pagina perché esiste un solo posto in cui può inserirla. Il costo è che i contenuti che non si adattano alla struttura vengono inseriti al suo interno a forza.
Wiki.js usa un albero di percorsi, come le cartelle su un disco. Una pagina in ops/backup/restic si trova dove la si colloca e si sceglie la profondità. Nulla impedisce a due persone di archiviare lo stesso argomento in due rami diversi, quindi un'istanza di Wiki.js richiede una persona responsabile dell'albero.
Outline usa raccolte con documenti annidati all'interno di altri documenti. Per spostare un documento è sufficiente trascinarlo con il mouse. È il più flessibile dei tre, quindi è anche quello che tende più facilmente a diventare disordinato.
BookStack: l'installazione più semplice
BookStack è un'applicazione PHP che utilizza MySQL. A luglio 2026, i requisiti documentati sono PHP 8.2 o versioni successive e MySQL 8.0 oppure MariaDB 10.6 o versioni successive. Se l'installazione avviene dal codice sorgente, è necessario anche Composer 2.2 o versioni successive. La linea di release attuale è 26.05.
Il progetto pubblica uno script di installazione per ogni release di Ubuntu. Lo script per 24.04 installa Apache, MySQL 8.0 e 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.shLeggere l'avviso riportato nello script prima di eseguirlo. La documentazione specifica che è "SOLO PER UN SISTEMA OPERATIVO NUOVO: installerà Apache, MySQL 8.0 e PHP 8.3 e potrebbe SOVRASCRIVERE qualsiasi configurazione web esistente sul computer". Su un server che risponde già sulla porta 80, lo script prende il controllo di quella porta e riscrive la configurazione di Apache. In questo caso, usare invece i container oppure installare BookStack manualmente sopra uno stack LAMP esistente su Ubuntu 24.04.
Il metodo basato sui container usa l'immagine LinuxServer.io, indicata dalla documentazione di BookStack. BookStack richiede una chiave di crittografia per le sessioni e non pubblica le pagine senza di essa; generarla quindi per prima cosa.
docker run -it --rm --entrypoint /bin/bash lscr.io/linuxserver/bookstack:latest appkeyCopiare il valore stampato in APP_KEY, quindi scrivere il servizio:
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 deve corrispondere all'indirizzo digitato effettivamente dagli utenti, incluso lo schema e l'eventuale porta. Impostarlo su http://localhost e pubblicare quindi il sito tramite HTTPS. In caso contrario, i collegamenti generati e i reindirizzamenti puntano all'host errato e gli utenti visualizzano una pagina di accesso che torna ciclicamente alla pagina stessa. Se i file Compose sono una novità, iniziare da Nozioni di base su Docker Compose su un VPS prima di procedere.
Avviare l'applicazione e verificare che risponda, non soltanto che il container sia in esecuzione:
docker compose up -d
docker compose ps
curl -sI http://127.0.0.1:6875/loginUn 200 OK indica che l'applicazione PHP è stata avviata e ha raggiunto il database. Un 500 indica quasi sempre che APP_KEY è vuota oppure che le credenziali del database non corrispondono. docker compose logs bookstack indica quale delle due condizioni si verifica.
Wiki.js: un albero, diversi editor
Wiki.js è un'applicazione Node.js. La configurazione Docker documentata la abbina a PostgreSQL, ma il software supporta anche MySQL, MariaDB, MSSQL e SQLite. Questo è il file compose della pagina Docker ufficiale del progetto:
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:Modifica insieme POSTGRES_PASSWORD e DB_PASS prima di eseguire il file, perché costituiscono un'unica credenziale e il valore di esempio è pubblico. Il tag è fissato a ghcr.io/requarks/wiki:2 intenzionalmente. La documentazione sconsiglia latest, perché il salto di versione principale modifica lo schema del database mentre l'istanza è in esecuzione.
La versione 2 è il ramo da utilizzare. A luglio 2026, l'ultima release della versione 2 è la 2.5.314, pubblicata a maggio 2026. Esiste anche la versione 3 e la relativa documentazione afferma: "Questo sito è destinato alla release beta instabile di Wiki.js 3.0. NON installarla in produzione." Considera il tag :3 un'anteprima.
Al primo accesso, Wiki.js esegue una procedura guidata nel browser che crea l'account amministratore. Finché non la completi, chiunque raggiunga la porta visualizza la procedura guidata. Per questo, configura il servizio dietro il reverse proxy e TLS (sicurezza del livello di trasporto) prima di aprire il firewall. Un wiki sul proprio hostname si integra naturalmente con Traefik davanti a diverse applicazioni Docker quando il server ospita più servizi.
La scelta dell'editor è il motivo per cui molti scelgono Wiki.js. Una singola istanza può contenere affiancate pagine Markdown, pagine dell'editor visuale, pagine HTML grezzo e pagine AsciiDoc. Questo è utile quando importi contenuti meno recenti in un formato che preferiresti non convertire. Può anche portare ad avere quattro stili redazionali diversi nello stesso wiki. Scegli quindi l'editor predefinito il primo giorno e annota la decisione.
Outline: l'editor migliore, con i prerequisiti più impegnativi
Outline è ciò che di solito si intende quando si cerca uno strumento per le note simile a un prodotto commerciale. È un'applicazione Node.js e la versione corrente a luglio 2026 è 1.9.2. Il file di ambiente di esempio elenca ciò che serve: PostgreSQL tramite DATABASE_URL, Redis tramite REDIS_URL, due segreti casuali e un URL raggiungibile pubblicamente.
openssl rand -hex 32
openssl rand -hex 32Eseguire il comando due volte e conservare entrambi i valori. Il primo diventa SECRET_KEY, il secondo UTILS_SECRET. La parte principale del file di ambiente è quindi simile a questa:
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 è corretto solo quando il database si trova sulla stessa macchina o sulla stessa rete Docker. Ommetterlo per un database raggiunto tramite rete; altrimenti la connessione viaggia in chiaro. Gli allegati non obbligano più a usare l'object storage: FILE_STORAGE=local salva i caricamenti nella directory precedente, che deve essere un volume in cui il container può scrivere e che deve essere incluso nei backup. Impostare FILE_STORAGE=s3 usando invece i valori AWS_* se si desidera salvare quei file in un bucket compatibile con S3.
Ora viene la parte che sorprende molte persone. Outline non dispone di un accesso integrato con nome utente e password. La configurazione di esempio fornita dal progetto specifica che sono necessarie credenziali per l'accesso tramite un provider esterno: "at least ONE OF these is required for a working installation or you'll have no sign-in options". I provider documentati includono Google, Slack, Microsoft Entra, Discord e qualsiasi server generico OpenID Connect (OIDC), tramite OIDC_CLIENT_ID, OIDC_CLIENT_SECRET, OIDC_AUTH_URI, OIDC_TOKEN_URI e OIDC_USERINFO_URI.
Il costo reale di Outline è quindi Outline più PostgreSQL più Redis più un identity provider. Se il team utilizza già Google Workspace o Microsoft Entra per l'accesso, quest'ultimo componente richiede dieci minuti di configurazione e Outline diventa molto interessante. In caso contrario, occorre anche gestire autonomamente un servizio come Keycloak o Authentik, cioè un secondo servizio da aggiornare e sottoporre a backup. Pianificare adeguatamente la memoria: le indicazioni di Outline prevedono circa 512 MB per processo web, impostati tramite WEB_CONCURRENCY, oltre alla memoria necessaria per il database e Redis.
Come gestisce ciascuno chi può leggere cosa
BookStack offre account locali con indirizzo email e password, e supporta LDAP, SAML2 e OIDC come alternative. Le autorizzazioni vengono impostate per ruolo e possono essere sovrascritte per una singola raccolta, un libro, un capitolo o una pagina. Poiché la gerarchia è fissa, le autorizzazioni vengono ereditate verso il basso in modo prevedibile.
Wiki.js offre anch'esso account locali e aggiunge un lungo elenco di strategie che si possono abilitare nell'area di amministrazione. Le regole delle pagine consentono o negano l'accesso in base a un modello di percorso. Questa funzione è potente, ma è facile configurarla in modo errato, perché una regola scritta per ops/* copre silenziosamente ogni pagina che in seguito viene archiviata in quel percorso.
Outline delega completamente questa gestione. L'appartenenza segue il provider di identità e, all'interno di Outline, l'accesso viene controllato per raccolta e per gruppo. Quando una persona lascia l'azienda, non rimane alcun account locale, un vantaggio concreto se il provider di identità è già il sistema utilizzato per revocare gli accessi.
Come funziona la ricerca in ciascun prodotto
La ricerca determina se un wiki è davvero utile o se diventa una raccolta di file dimenticati.
BookStack cerca nel database e offre agli utenti un linguaggio di query che possono imparare in un minuto. Racchiudere una frase tra virgolette, come in "london meeting", richiede quella stringa esatta. Le parentesi quadre cercano i tag: [location=london] trova corrispondenze per nome del tag, valore o entrambi, con confronti che includono !=, >= e like. Le parentesi graffe filtrano i metadati, come in {created_after:2016-12-30}. È possibile negare qualsiasi termine esatto, tag o filtro anteponendo -. BookStack limita il numero di termini di ogni tipo che una query può contenere. Una query molto lunga viene quindi troncata invece di essere eseguita.
Wiki.js tratta la ricerca come un modulo collegabile. I motori documentati sono un motore di base per database, un motore PostgreSQL, Elasticsearch, Algolia, AWS CloudSearch e Azure Search. Il motore di base è adeguato per qualche centinaio di pagine. Se si usa PostgreSQL, passare al motore PostgreSQL nell'area di amministrazione, perché utilizza l'indice full text del database invece di una semplice corrispondenza. Usare Elasticsearch solo per un wiki abbastanza grande da giustificare la gestione e l'applicazione delle patch a un secondo servizio di ricerca.
Outline utilizza gli indici full text di PostgreSQL. Non è possibile scegliere un motore né ottimizzare impostazioni e il sistema cerca anche nel testo dei documenti caricati. Per un wiki di team con poche migliaia di documenti, è la soluzione che richiede meno lavoro tra le tre. Se la ricerca dovesse diventare troppo lenta, non sono disponibili impostazioni per intervenire.
Quale soluzione fa per te
Scegli BookStack se vuoi avere il wiki operativo oggi stesso e preferisci discutere dei contenuti anziché della struttura. Ha il minor numero di componenti: un'applicazione PHP e un database MySQL. È adatto ai runbook interni e alla documentazione per i clienti, oltre che ai team in cui la maggior parte degli autori non è costituita da ingegneri. È anche il più semplice dei tre da sottoporre a backup, perché lo stato completo è costituito da un dump del database e dalla directory degli upload.
Scegli Wiki.js se ti serve un editor specifico o una strategia di autenticazione specifica che le altre soluzioni non offrono, oppure se stai importando una grande quantità di Markdown o AsciiDoc esistente e vuoi preservare la struttura dei percorsi. Considera che dovrai gestire uno stack più complesso e blocca il tag della versione principale.
Scegli Outline se la qualità della scrittura è l'aspetto più importante, se il wiki è destinato a un team e non al pubblico, e se disponi già di un provider di identità. Questa configurazione offre in cambio un editor che gli utenti apprezzano davvero. Non sceglierlo come prima applicazione self-hosted.
Se nessuna delle tre soluzioni è adatta, di solito il problema riguarda il tipo di contenuti. Le fatture e i contratti scansionati appartengono a un sistema di gestione documentale come Paperless-ngx, non a un wiki. Forzarli in un wiki è il motivo per cui molti wiki finiscono per essere abbandonati. Per una panoramica più ampia di ciò che merita un posto sul tuo server, consulta la selezione delle soluzioni self-hosted per il 2026.
Dimensionamento e backup
Tutti e tre possono essere eseguiti su un piccolo VPS, ma il requisito minimo realistico varia in base a ciò che ciascuno utilizza. BookStack richiede un processo applicativo e MySQL. Wiki.js richiede un processo Node e PostgreSQL. Outline richiede un processo Node, PostgreSQL e Redis, solitamente anche con un provider di identità. Per questo è quello a cui assegnare più memoria.
Esegui il backup del database e dei file caricati insieme, quindi ripristinali entrambi in un'istanza temporanea prima di fare affidamento su quel backup. Un backup di un wiki che non è mai stato ripristinato è solo un'ipotesi. Per BookStack questo significa mysqldump e il volume /config. Per Wiki.js e Outline significa pg_dump e il volume dei dati; per Outline include anche tutto ciò che si trova in FILE_STORAGE_LOCAL_ROOT_DIR.
FAQ
Quale wiki self-hosted è più facile da installare?
BookStack. È una singola applicazione PHP con un database MySQL. Il progetto distribuisce uno script di installazione per Ubuntu 24.04 che configura Apache, MySQL 8.0 e PHP 8.3 in un'unica esecuzione. L'immagine del container richiede solo un APP_KEY e le credenziali del database. Wiki.js aggiunge un runtime Node e un server PostgreSQL. Outline aggiunge anche Redis e un provider di identità esterno.
Posso usare Outline senza Google o un altro provider SSO?
No. Outline non offre un accesso locale con nome utente e password. La configurazione di esempio specifica che è richiesto almeno un provider di accesso di terze parti. In caso contrario, non sarà disponibile alcuna opzione di accesso. Puoi usare Google, Slack, Microsoft Entra, Discord o un server OpenID Connect generico, come Keycloak o Authentik self-hosted. L'esecuzione di questo provider fa parte del costo di gestione di Outline.
Devo installare Wiki.js 3 o Wiki.js 2?
La versione 2. A luglio 2026, la versione 2 più recente è 2.5.314, rilasciata a maggio 2026. La documentazione della versione 3 dichiara chiaramente che si tratta di una beta instabile e che non deve essere installata in produzione. Fissa l'immagine su ghcr.io/requarks/wiki:2 anziché su latest, perché un cambio di versione principale modifica lo schema del database in un'istanza in esecuzione.
Quale offre la ricerca migliore?
Sono efficaci in modi diversi. BookStack offre ai lettori un linguaggio di query con frasi esatte, filtri per tag come [location=london] e filtri per metadati come {created_after:2016-12-30}. Ciascuno di questi termini può essere escluso anteponendo -. Outline non richiede configurazione e cerca nel testo dei file caricati. Wiki.js è il più configurabile, perché puoi scegliere il motore. Conviene passare al motore PostgreSQL non appena il wiki supera alcune centinaia di pagine.
Posso spostare in seguito i contenuti da uno all'altro?
In parte, ma devi prevedere un intervento manuale. Tutti e tre consentono di esportare e importare Markdown, quindi il testo delle pagine viene generalmente conservato. La struttura, invece, non viene trasferita correttamente. I libri e i capitoli di BookStack non hanno un equivalente nei documenti nidificati di Outline. I percorsi di Wiki.js non corrispondono alla gerarchia fissa di BookStack. Gli allegati, le autorizzazioni e la cronologia delle pagine sono gli elementi con maggiore probabilità di andare persi. Esporta quindi un campione e verifica questi aspetti prima di avviare la migrazione.