Installation · 11 min read · Oct 21, 2025

Wie man BookStack mit Nginx auf Ubuntu 20.04 installiert

BookStack ist eine selbstgehostete, Open-Source-Plattform, die einfach zu bedienen ist, um Informationen zu organisieren und zu speichern. Sie kann für verschiedene Zwecke wie ein Wiki, eine Dokumentationswebsite und eine Notiz-App verwendet werden. Sie ist mit dem Laravel PHP-Framework erstellt und verwendet MySQL zur Datenspeicherung. Für Bearbeitungszwecke bietet sie die Wahl zwischen einem WYSIWYG- oder einem Markdown-Editor. Sie unterstützt Multi-Faktor-Authentifizierung und den Dunkelmodus und ist mehrsprachig.

Dieses Tutorial zeigt Ihnen, wie Sie BookStack auf einem Ubuntu 20.04-basierten Server installieren.

Voraussetzungen

  1. Ein Server, der Ubuntu 20.04 ausführt
  2. Ein vollständig qualifizierter Domainname (FQDN), der auf den Server zeigt.
  3. Ein Nicht-Root-Benutzer mit Sudo-Rechten.
  4. PHP-Version 7.3 oder höher.
  5. MySQL>=5.6 und MariaDB>=10.0
  6. Git und Composer.

Schritt 1 - Firewall konfigurieren

Der erste Schritt besteht darin, die Firewall zu konfigurieren. Ubuntu wird standardmäßig mit ufw (Uncomplicated Firewall) geliefert.

Überprüfen Sie, ob die Firewall läuft.

$ sudo ufw status

Sie sollten die folgende Ausgabe erhalten.

Status: inactive

Erlauben Sie den SSH-Port, damit die Firewall die aktuelle Verbindung beim Aktivieren nicht unterbricht.

$ sudo ufw allow OpenSSH

Erlauben Sie auch die HTTP- und HTTPS-Ports.

$ sudo ufw allow 80
$ sudo ufw allow 443

Aktivieren Sie die Firewall

$ sudo ufw enable
Befehl kann bestehende SSH-Verbindungen stören. Mit der Operation fortfahren (y|n)? y
Firewall ist aktiv und beim Systemstart aktiviert

Überprüfen Sie den Status der Firewall erneut.

$ sudo ufw status

Sie sollten eine ähnliche Ausgabe sehen.

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
80                         ALLOW       Anywhere
443                        ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
80 (v6)                    ALLOW       Anywhere (v6)
443 (v6)                   ALLOW       Anywhere (v6)

Schritt 2 - Git installieren

Der erste Schritt besteht darin, Git zu installieren. Es wird benötigt, um BookStack herunterzuladen und zu aktualisieren. Führen Sie den folgenden Befehl aus, um Git zu installieren.

$ sudo apt install git

Überprüfen Sie die Installation.

$ git --version

Schritt 3 - PHP und Erweiterungen installieren

Da BookStack von PHP abhängt, müssen Sie PHP und seine Erweiterungen installieren.

Ubuntu wird mit einer veralteten PHP-Version geliefert. Zuerst müssen wir Ondrejs PHP-Repository hinzufügen.

$ sudo add-apt-repository ppa:ondrej/php

Installieren Sie als Nächstes PHP und die von BookStack benötigten Erweiterungen.

$ sudo apt install php7.4-fpm php7.4-mbstring php7.4-gd php7.4-xml unzip php7.4-bcmath php7.4-curl php7.4-mysql

Überprüfen Sie die Installation.

$ php --version
PHP 7.4.25 (cli) (gebaut: 22. Okt 2021 12:34:33) (NTS)
Copyright (c) Die PHP-Gruppe
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    mit Zend OPcache v7.4.25, Copyright (c), von Zend Technologies

Schritt 4 - MariaDB installieren und konfigurieren

Ubuntu wird mit einer älteren Version von MariaDB geliefert. Um die neueste Version zu installieren, fügen Sie das offizielle MariaDB-Repository hinzu. Führen Sie die folgenden Befehle aus, um das Repository hinzuzufügen.

$ curl -LsS -O https://downloads.mariadb.com/MariaDB/mariadb_repo_setup
$ sudo bash mariadb_repo_setup --mariadb-server-version=10.6

Führen Sie den folgenden Befehl aus, um den MariaDB-Server zu installieren.

$ sudo apt install mariadb-server

Sichern Sie die MariaDB-Installation.

$ sudo mysql_secure_installation

Sie werden mit verschiedenen Eingabeaufforderungen konfrontiert. Beantworten Sie diese wie folgt.

Geben Sie das aktuelle Passwort für root ein (leer für keines): Drücken Sie die Eingabetaste
Wechseln Sie zur Unix-Socket-Authentifizierung [Y/n] Geben Sie y ein
Möchten Sie das Root-Passwort ändern? [Y/n] Geben Sie n ein
Anonyme Benutzer entfernen? [Y/n] Geben Sie y ein
Root-Login aus der Ferne verbieten? [Y/n] Geben Sie y ein
Testdatenbank und Zugriff darauf entfernen? [Y/n] Geben Sie y ein
Privilegientabellen jetzt neu laden? [Y/n] Geben Sie y ein

Verbinden Sie sich mit der MariaDB-Shell mit dem folgenden Befehl.

$ sudo mysql

Erstellen Sie eine neue Datenbank für Bookstack.

$ create database bookstack;

Erstellen Sie einen neuen Datenbankbenutzer.

$ CREATE USER 'bookstackuser'@'localhost' identified by 'bookstackpassword';

Wählen Sie ein starkes Passwort.

Erteilen Sie dem Benutzer Berechtigungen auf der Datenbank.

$ grant CREATE,ALTER,SELECT,INSERT,UPDATE,DELETE on `bookstack`.* to 'bookstackuser'@'localhost';

Verlassen Sie die MySQL-Shell.

$ exit

Schritt 5 - Composer installieren

Composer ist ein Abhängigkeitsverwaltungstool für PHP und wird von Laravel benötigt, auf dem BookStack basiert.

Laden Sie das Composer-Installationsskript herunter.

$ curl -sS https://getcomposer.org/installer -o composer-setup.php

Führen Sie die folgenden Befehle aus, um den Installer zu überprüfen.

$ HASH=`curl -sS https://composer.github.io/installer.sig`
$ echo $HASH
$ php -r "if (hash_file('SHA384', 'composer-setup.php') === '$HASH') { echo 'Installer verifiziert'; } else { echo 'Installer beschädigt'; unlink('composer-setup.php'); } echo PHP_EOL;"

Die obigen Befehle erfassen den Hashwert des Installers und vergleichen ihn mit Ihrem heruntergeladenen Skript. Sie sollten die folgende Ausgabe sehen, wenn der Installer sicher zu verwenden ist.

Installer verifiziert

Installieren Sie Composer.

$ sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer

Überprüfen Sie die Installation, indem Sie die Version überprüfen.

$ composer --version
Composer version 2.1.9 2021-10-05 09:47:38

Schritt 6 - BookStack herunterladen und installieren

Erstellen Sie den Stammordner für die BookStack-App.

$ sudo mkdir -p /var/www/bookstack

Ändern Sie den Besitz des Verzeichnisses /var/www/bookstack auf den aktuell angemeldeten Benutzer.

$ sudo chown -R $USER:$USER /var/www/bookstack

Klonen Sie den Release-Zweig des BookStack-GitHub-Repositorys in den neu erstellten Ordner.

$ cd /var/www/bookstack
$ git clone https://github.com/BookStackApp/BookStack.git --branch=release --single-branch .

Vergessen Sie nicht den Punkt am Ende des clone-Befehls. Er stellt sicher, dass alle Dateien im aktuellen Verzeichnis heruntergeladen werden, anstatt ein neues zu erstellen.

Führen Sie den Composer-Installer aus dem Verzeichnis /var/www/bookstack aus.

$ composer install --no-dev

Kopieren Sie die .env.example-Datei in .env, um Umgebungsvariablen für die Installation zu speichern.

$ cp .env.example .env

Öffnen Sie die Datei zur Bearbeitung.

$ sudo nano .env

Füllen Sie die Anwendungs-URL und die Datenbankdetails aus. Wenn Sie die E-Mail-Funktionen verwenden möchten, fügen Sie die SMTP-Details ein, oder löschen Sie sie aus der Datei.

APP_URL=https://example.com
DB_HOST=localhost
DB_DATABASE=bookstack
DB_USERNAME=bookstackuser
DB_PASSWORD=bookstackpassword

Speichern Sie die Datei, indem Sie Ctrl + X drücken und Y eingeben, wenn Sie dazu aufgefordert werden. Es gibt viele weitere Einstellungen, die Sie konfigurieren können. Um mehr darüber zu erfahren, öffnen Sie die Datei .env.example.complete und kopieren Sie die, die Sie benötigen, in Ihre .env-Datei.

Generieren Sie einen eindeutigen Anwendungsschlüssel. Dieser Wert wird automatisch in der .env-Datei ausgefüllt. Geben Sie yes ein, um mit dem Befehl fortzufahren.

$ php artisan key:generate
**************************************
*     Anwendung in Produktion!     *
************************************

 Möchten Sie diesen Befehl wirklich ausführen? (ja/nein) [nein]:
 > ja

Anwendungsschlüssel erfolgreich gesetzt.

Aktualisieren Sie die Datenbank.

$ php artisan migrate
************************************
*     Anwendung in Produktion!     *
**************************************

 Möchten Sie diesen Befehl wirklich ausführen? (ja/nein) [nein]:
 > ja
Migrationstabelle erfolgreich erstellt.
Migration: 2014_10_12_000000_create_users_table
Migriert:  2014_10_12_000000_create_users_table (0.12 Sekunden)
.......

Schritt 7 - Let’s Encrypt SSL installieren

Um ein SSL-Zertifikat mit Let’s Encrypt zu installieren, müssen wir das Certbot-Tool installieren.

Wir werden dafür den Snapd-Paketinstaller verwenden. Die meisten Ubuntu-Server werden nicht mit dem Snap-Tool geliefert. Um das zu beheben, installieren Sie Snap.

$ sudo apt install snapd

Stellen Sie sicher, dass Ihre Version von Snapd auf dem neuesten Stand ist.

$ sudo snap install core 
$ sudo snap refresh core

Installieren Sie Certbot.

$ sudo snap install --classic certbot

Verwenden Sie den folgenden Befehl, um sicherzustellen, dass der Certbot-Befehl ausgeführt werden kann, indem Sie einen symbolischen Link zum Verzeichnis /usr/bin erstellen.

$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

Überprüfen Sie die Installation.

$ certbot --version
certbot 1.20.0

Generieren Sie das SSL-Zertifikat.

$ sudo certbot certonly --standalone --agree-tos --preferred-challenges http -m [email protected] -d example.com

Der obige Befehl lädt ein Zertifikat in das Verzeichnis /etc/letsencrypt/live/etherpad.example.com auf Ihrem Server herunter.

Generieren Sie ein Diffie-Hellman-Gruppen-Zertifikat.

$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

Erstellen Sie ein Challenge-Web-Root-Verzeichnis für die automatische Erneuerung von Let’s Encrypt.

$ sudo mkdir -p /var/lib/letsencrypt

Erstellen Sie einen Cron-Job zur Erneuerung des SSL. Er wird jeden Tag ausgeführt, um das Zertifikat zu überprüfen und bei Bedarf zu erneuern. Erstellen Sie dazu zuerst die Datei /etc/cron.daily/certbot-renew und öffnen Sie sie zur Bearbeitung.

$ sudo nano /etc/cron.daily/certbot-renew

Fügen Sie den folgenden Code ein.

#!/bin/sh
certbot renew --cert-name bookstack.example.com --webroot -w /var/lib/letsencrypt/ --post-hook "systemctl reload nginx"

Speichern Sie die Datei, indem Sie Ctrl + X drücken und Y eingeben, wenn Sie dazu aufgefordert werden.

Ändern Sie die Berechtigungen der Aufgaben-Datei, um sie ausführbar zu machen.

$ sudo chmod +x /etc/cron.daily/certbot-renew

Schritt 8 - Nginx installieren und konfigurieren

Ubuntu wird mit einer älteren Version von Nginx geliefert. Um die neueste Version zu installieren, müssen Sie das offizielle Nginx-Repository herunterladen.

Fügen Sie das Repository für die stabile Version von Nginx hinzu.

$ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg arch=amd64] \
http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" \
    | sudo tee /etc/apt/sources.list.d/nginx.list

Installieren Sie Nginx.

$ sudo apt install nginx

Überprüfen Sie die Installation.

$ nginx -v
nginx version: nginx/1.20.1

Aktivieren Sie den Nginx-Dienst.

$ sudo systemctl enable nginx

PHP-FPM konfigurieren

Öffnen Sie die Datei /etc/php/7.4/fpm/pool.d/www.conf.

$ sudo nano /etc/php/7.4/fpm/pool.d/www.conf

Wir müssen den Unix-Benutzer/die Gruppe der PHP-Prozesse auf nginx setzen. Suchen Sie die Zeilen user=www-data und group=www-data in der Datei und ändern Sie sie in nginx.

...
; Unix-Benutzer/-gruppe der Prozesse
; Hinweis: Der Benutzer ist obligatorisch. Wenn die Gruppe nicht festgelegt ist, wird die Standardbenutzergruppe verwendet.
;       wird verwendet.
user = nginx
group = nginx
...

Suchen Sie auch die Zeilen listen.owner=www-data und listen.group=www-data in der Datei und ändern Sie sie in nginx.

listen.owner = nginx
listen.group = nginx

Speichern Sie die Datei, indem Sie Ctrl + X drücken und Y eingeben, wenn Sie dazu aufgefordert werden.

Starten Sie den PHP-fpm-Prozess neu.

$ sudo systemctl restart php7.4-fpm

Nginx konfigurieren

Erstellen und öffnen Sie die Datei /etc/nginx/conf.d/bookstack.conf zur Bearbeitung.

$ sudo nano /etc/nginx/conf.d/bookstack.conf

Fügen Sie den folgenden Code ein.

server {
    listen       443 ssl http2;
    listen       [::]:443 ssl http2;
    server_name  bookstack.example.com;

    access_log  /var/log/nginx/bookstack.access.log;
    error_log   /var/log/nginx/bookstack.error.log;
    
    ssl_certificate      /etc/letsencrypt/live/bookstack.example.com/fullchain.pem;
    ssl_certificate_key  /etc/letsencrypt/live/bookstack.example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/bookstack.example.com/chain.pem;

    ssl_session_timeout  5m;
    ssl_session_cache shared:MozSSL:10m;
    ssl_session_tickets off;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
    ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1;
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_dhparam /etc/ssl/certs/dhparam.pem;

    root /var/www/bookstack/public;
    index index.php index.html;

    location / {
      try_files $uri $uri/ /index.php?$query_string;
    }
  
    location ~ \.php$ {
      fastcgi_split_path_info ^(.+\.php)(/.+)$;
      include fastcgi_params;
      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
      fastcgi_param PATH_INFO $fastcgi_path_info;
      fastcgi_pass unix:/run/php/php7.4-fpm.sock;
    }
}

# HTTPS erzwingen
server {
    listen       80;
    listen       [::]:80;
    server_name  bookstack.example.com;
    return 301   https://$host$request_uri;
}

Speichern Sie die Datei, indem Sie Ctrl + X drücken und Y eingeben, wenn Sie dazu aufgefordert werden.

Öffnen Sie die Datei /etc/nginx/nginx.conf zur Bearbeitung.

$ sudo nano /etc/nginx/nginx.conf

Fügen Sie die folgende Zeile vor der Zeile include /etc/nginx/conf.d/*.conf; hinzu.

server_names_hash_bucket_size  64;

Speichern Sie die Datei, indem Sie Ctrl + X drücken und Y eingeben, wenn Sie dazu aufgefordert werden. Validieren Sie Nginx erneut.

Überprüfen Sie die Syntax der Nginx-Konfigurationsdatei.

$ sudo nginx -t
nginx: die Konfigurationsdatei /etc/nginx/nginx.conf Syntax ist ok
nginx: Konfigurationsdatei /etc/nginx/nginx.conf Test war erfolgreich

Starten Sie schließlich den Nginx-Dienst, um die neue Konfiguration zu aktivieren.

$ sudo systemctl start nginx

Ändern Sie den Besitz des Verzeichnisses auf den Benutzer nginx, damit der Webserver auf den Ordner zugreifen und darin schreiben kann.

$ sudo chown -R nginx:nginx /var/www/bookstack

Schritt 9 - BookStack ausführen

Ihr Bookstack ist bereit zur Verwendung. Öffnen Sie die URL https://bookstack.example.com in Ihrem Browser, und Sie erhalten die Anmeldeseite.

BookStack-Anmeldeseite

Melden Sie sich mit dem Standardadministrator-Konto [email protected] und dem Passwort password an. Öffnen Sie die Seite Einstellungen >> Benutzer und klicken Sie auf die Schaltfläche NEUEN BENUTZER HINZUFÜGEN.

BookStack Neuen Benutzer hinzufügen

Füllen Sie die Benutzerdetails aus, setzen Sie ein Häkchen im Feld Admin unter Benutzerrollen und deaktivieren Sie Benutzereinladungs-E-Mail senden, da wir keine SMTP-Details festgelegt haben. Wählen Sie ein starkes Passwort. Klicken Sie auf Speichern, wenn Sie fertig sind.

BookStack Neue Benutzerseite

Klicken Sie als Nächstes auf den Standard-Admin-Benutzer und löschen Sie den Benutzer, indem Sie auf die Schaltfläche Benutzer löschen klicken.

Admin-Benutzer löschen

Übertragen Sie den Besitz des Admin-Benutzers auf Ihren neu erstellten Benutzer, indem Sie ihn aus dem Dropdown-Menü auswählen, bevor Sie ihn löschen. Klicken Sie auf Bestätigen, um den Vorgang abzuschließen. Wenn Sie mit diesem Benutzer angemeldet sind, werden Sie automatisch abgemeldet. Sie müssen sich erneut mit dem neu erstellten Benutzer anmelden.

Benutzerlöschbestätigung

Backup und Wiederherstellung von BookStack

Backup von BookStack

Sie müssen die Datenbank und die Dateien separat sichern. Um die Datenbank zu sichern, verwenden Sie das Tool mysqldump.

$ sudo mysqldump -u bookstackuser bookstack > bookstack.backup.sql

Sie müssen auch die folgenden Dateien und Ordner sichern.

  1. .env - Datei mit wichtigen Konfigurationen.
  2. public/uploads - Ordner mit hochgeladenen Bildern.
  3. storage/uploads - Ordner mit hochgeladenen Seitenanhängen.

Führen Sie den folgenden Befehl aus, um ein komprimiertes Archiv der oben genannten Dateien und Ordner zu erstellen.

$ sudo tar -czvf bookstack-files-backup.tar.gz .env public/uploads storage/uploads

Wiederherstellung von BookStack

Führen Sie den folgenden Befehl aus, um die Datenbank wiederherzustellen.

$ sudo mysql -u bookstack < bookstack.backup.sql

Wenn Sie auf eine neue Version von BookStack wiederherstellen, müssen Sie den Befehl sudo php artisan migrate ausführen.

Um die oben erstellten komprimierten Dateien wiederherzustellen, verwenden Sie den folgenden Befehl.

$ sudo tar -xvzf bookstack-files-backup.tar.gz

Sie müssen auch die Berechtigungen ändern.

BookStack aktualisieren

Bevor Sie BookStack aktualisieren, stellen Sie sicher, dass Sie ein ordnungsgemäßes Backup mit dem zuvor beschriebenen Verfahren erstellen.

Um BookStack zu aktualisieren, ziehen Sie die Originaldateien aus dem Git-Repository.

$ cd /var/www/bookstack
$ sudo git pull origin release

Führen Sie die folgenden Befehle aus, um die Installation fortzusetzen.

$ sudo composer install --no-dev
$ sudo php artisan migrate

Sie müssen auch die folgenden Befehle ausführen, um den Cache zu leeren.

$ sudo php artisan cache:clear
$ sudo php artisan config:clear
$ sudo php artisan view:clear

Fazit

Dies beendet unser Tutorial zur Installation von BookStack auf einem Ubuntu 20.04-Server. Wenn Sie Fragen haben, stellen Sie diese bitte in den Kommentaren unten.

Share: X/Twitter LinkedIn

Erhalte neue Beiträge in deinem Posteingang.

Kein Spam. Jederzeit abmelden.