So installierst du BookStack mit Nginx auf Ubuntu 20.04
BookStack ist eine einfach zu bedienende, selbst gehostete Open-Source-Plattform zum Organisieren und Speichern von Informationen. Sie kann für verschiedene Zwecke genutzt werden, z. B. als Wiki, Dokumentations-Website und Anwendung für Notizen. Sie wurde mit dem Laravel-PHP-Framework entwickelt und nutzt MySQL zur Datenspeicherung. Für die Bearbeitung kannst du zwischen einem WYSIWYG- und einem Markdown-Editor wählen. Sie unterstützt die Multi-Faktor-Authentifizierung und den Dark Mode und ist mehrsprachig.
In diesem Tutorial lernst du, wie du BookStack auf einem Ubuntu 20.04-basierten Server installierst.
Voraussetzungen
- Ein Server, auf dem Ubuntu 20.04 läuft
- Ein Fully Qualified Domain Name (FQDN), der auf den Server zeigt.
- Ein Nicht-Root-Benutzer mit sudo-Rechten.
- PHP Version 7.3 oder höher.
- MySQL>=5.6 und MariaDB>=10.0
- Git und Composer.
Schritt 1 – Firewall konfigurieren
Der erste Schritt besteht darin, die Firewall zu konfigurieren. Ubuntu wird standardmäßig mit ufw (Uncomplicated Firewall) ausgeliefert.
Überprüfe, ob die Firewall aktiv ist.
$ sudo ufw status
Du solltest die folgende Ausgabe erhalten.
Status: inactive
Erlaube den SSH-Port, damit die Firewall die aktuelle Verbindung nicht unterbricht, wenn du sie aktivierst.
$ sudo ufw allow OpenSSH
Lasse auch HTTP- und HTTPS-Ports zu.
$ sudo ufw allow 80 $ sudo ufw allow 443
Aktiviere die Firewall
$ sudo ufw enable Command may disrupt existing ssh connections. Proceed with operation (y|n)? y Firewall is active and enabled on system startup
Überprüfe den Status der Firewall erneut.
$ sudo ufw status
Du solltest 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 ist die Installation von Git. Es wird benötigt, um BookStack herunterzuladen und zu aktualisieren. Führe den folgenden Befehl aus, um Git zu installieren.
$ sudo apt install git
Überprüfe die Installation.
$ git --version
Schritt 3 – PHP und Erweiterungen installieren
Da BookStack auf PHP angewiesen ist, musst du PHP und seine Erweiterungen installieren.
Ubuntu wird mit einer veralteten PHP-Version ausgeliefert. Zuerst müssen wir Ondrejs PHP-Repository hinzufügen.
$ sudo add-apt-repository ppa:ondrej/php
Als Nächstes installierst du PHP und die für 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üfe die Installation.
$ php --version PHP 7.4.25 (cli) (built: Oct 22 2021 12:34:33) ( NTS ) Copyright (c) The PHP Group Zend Engine v3.4.0, Copyright (c) Zend Technologies with Zend OPcache v7.4.25, Copyright (c), by Zend Technologies
Schritt 4 – MariaDB installieren und konfigurieren
Ubuntu wird mit einer älteren Version von MariaDB ausgeliefert. Um die neueste Version zu installieren, füge das offizielle MariaDB-Repository hinzu. Führe 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ühre den folgenden Befehl aus, um den MariaDB-Server zu installieren.
$ sudo apt install mariadb-server
Sichere die MariaDB-Installation.
$ sudo mysql_secure_installation
Du wirst verschiedene Eingabeaufforderungen sehen. Beantworte sie wie folgt.
Enter current password for root (enter for none): Press Enter Switch to unix_socket authentication [Y/n] Type y Change the root password? [Y/n] Type n Remove anonymous users? [Y/n] Type y Disallow root login remotely? [Y/n] Type y Remove test database and access to it? [Y/n] Type y Reload privilege tables now? [Y/n] Type y
Verbinde dich mit der MariaDB-Shell mit folgendem Befehl.
$ sudo mysql
Erstelle eine neue Datenbank für Bookstack.
$ create database bookstack;
Erstelle einen neuen Datenbankbenutzer.
$ CREATE USER 'bookstackuser'@'localhost' identified by 'bookstackpassword';
Wähle ein sicheres Passwort.
Erteile dem Benutzer Berechtigungen für die Datenbank.
$ grant CREATE,ALTER,SELECT,INSERT,UPDATE,DELETE on `bookstack`.* to 'bookstackuser'@'localhost';
Beende die MySQL-Shell.
$ exit
Schritt 5 – Installiere Composer
Composer ist ein Abhängigkeitsmanagement-Tool für PHP und wird von Laravel benötigt, auf dem BookStack basiert.
Lade das Composer-Installationsskript herunter.
$ curl -sS https://getcomposer.org/installer -o composer-setup.php
Führe die folgenden Befehle aus, um das Installationsprogramm 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 verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
Die obigen Befehle erfassen den Hash-Wert des Installers und gleichen ihn mit deinem heruntergeladenen Skript ab. Wenn das Installationsprogramm sicher ausgeführt werden kann, solltest du die folgende Ausgabe sehen.
Installer verified
Installiere Composer.
$ sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer
Überprüfe die Installation, indem du die Version überprüfst.
$ composer --version Composer version 2.1.9 2021-10-05 09:47:38
Schritt 6 – BookStack herunterladen und installieren
Erstelle den Stammordner für die BookStack-App.
$ sudo mkdir -p /var/www/bookstack
Ändere die Eigentümerschaft des Verzeichnisses /var/www/bookstack
auf den aktuell angemeldeten Benutzer.
$ sudo chown -R $USER:$USER /var/www/bookstack
Klone 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 .
Vergiss nicht das dot
am Ende des clone
Befehls. Er sorgt dafür, dass alle Dateien in das aktuelle Verzeichnis heruntergeladen werden, anstatt ein neues zu erstellen.
Starte den Composer-Installer aus dem Verzeichnis /var/www/bookstack
.
$ composer install --no-dev
Kopiere die Datei .env.example
nach .env
, um Umgebungsvariablen für die Installation zu speichern.
$ cp .env.example .env
Öffne die Datei zur Bearbeitung.
$ sudo nano .env
Gib die Anwendungs-URL und die Datenbankdetails ein. Wenn du die E-Mail-Funktionen nutzen willst, gib die SMTP-Daten ein oder lösche sie aus der Datei.
APP_URL=https://example.com DB_HOST=localhost DB_DATABASE=bookstack DB_USERNAME=bookstackuser DB_PASSWORD=bookstackpassword
Speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst. Es gibt noch viele weitere Einstellungen, die du vornehmen kannst. Um mehr darüber zu erfahren, öffne die Datei .env.example.complete
und kopiere die Einstellungen, die du brauchst, in deine Datei .env
.
Erstelle einen eindeutigen Anwendungsschlüssel. Dieser Wert wird automatisch in der Datei .env
eingetragen. Gib yes
ein, um mit dem Befehl fortzufahren.
$ php artisan key:generate ************************************** * Application In Production! * ************************************** Do you really wish to run this command? (yes/no) [no]: > yes Application key set successfully.
Aktualisiere die Datenbank.
$ php artisan migrate ************************************** * Application In Production! * ************************************** Do you really wish to run this command? (yes/no) [no]: > yes Migration table created successfully. Migrating: 2014_10_12_000000_create_users_table Migrated: 2014_10_12_000000_create_users_table (0.12 seconds) .......
Schritt 7 – Let’s Encrypt SSL installieren
Um ein SSL-Zertifikat mit Let’s Encrypt zu installieren, müssen wir das Tool Certbot installieren.
Dazu verwenden wir den Snapd-Paketinstaller. Die meisten Ubuntu-Server werden nicht mit dem Snap-Tool ausgeliefert. Um das zu ändern, installiere Snap.
$ sudo apt install snapd
Stelle sicher, dass deine Version von Snapd auf dem neuesten Stand ist.
$ sudo snap install core $ sudo snap refresh core
Installiere Certbot.
$ sudo snap install --classic certbot
Stelle mit dem folgenden Befehl sicher, dass der Certbot-Befehl ausgeführt werden kann, indem du einen symbolischen Link auf das Verzeichnis /usr/bin
erstellst.
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot
Überprüfe die Installation.
$ certbot --version certbot 1.20.0
Erstelle das SSL-Zertifikat.
$ sudo certbot certonly --standalone --agree-tos --preferred-challenges http -m name@example.com -d example.com
Mit dem obigen Befehl wird ein Zertifikat in das Verzeichnis /etc/letsencrypt/live/etherpad.example.com
auf deinem Server heruntergeladen.
Erstelle ein Diffie-Hellman-Gruppenzertifikat.
$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
Erstelle ein Challenge-Web-Root-Verzeichnis für die automatische Erneuerung von Let’s Encrypt.
$ sudo mkdir -p /var/lib/letsencrypt
Erstelle einen Cron Job zur Erneuerung des SSL-Zertifikats. Er wird jeden Tag ausgeführt, um das Zertifikat zu überprüfen und bei Bedarf zu erneuern. Erstelle dazu zunächst die Datei /etc/cron.daily/certbot-renew
und öffne sie zur Bearbeitung.
$ sudo nano /etc/cron.daily/certbot-renew
Füge den folgenden Code ein.
#!/bin/sh certbot renew --cert-name bookstack.example.com --webroot -w /var/lib/letsencrypt/ --post-hook "systemctl reload nginx"
Speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.
Ändere die Berechtigungen für die Aufgabendatei, 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 ausgeliefert. Um die neueste Version zu installieren, musst du das offizielle Nginx-Repository herunterladen.
Füge 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
Installiere Nginx.
$ sudo apt install nginx
Überprüfe die Installation.
$ nginx -v nginx version: nginx/1.20.1
Aktiviere den Nginx-Dienst.
$ sudo systemctl enable nginx
PHP-FPM konfigurieren
Öffne 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 Unix-Gruppe der PHP-Prozesse auf nginx setzen. Finde die Zeilen user=www-data
und group=www-data
in der Datei und ändere sie in nginx
.
... ; Unix user/group of processes ; Note: The user is mandatory. If the group is not set, the default user's group ; will be used. user = nginx group = nginx ...
Finde auch die Zeilen listen.owner=www-data
und listen.group=www-data
in der Datei und ändere sie in nginx
.
listen.owner = nginx listen.group = nginx
Speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.
Starte den PHP-fpm-Prozess neu.
$ sudo systemctl restart php7.4-fpm
Nginx konfigurieren
Erstelle und öffne die Datei /etc/nginx/conf.d/bookstack.conf
zum Bearbeiten.
$ sudo nano /etc/nginx/conf.d/bookstack.conf
Füge den folgenden Code in die Datei 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; } } # enforce HTTPS server { listen 80; listen [::]:80; server_name bookstack.example.com; return 301 https://$host$request_uri; }
Speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.
Öffne die Datei /etc/nginx/nginx.conf
und bearbeite sie.
$ sudo nano /etc/nginx/nginx.conf
Füge die folgende Zeile vor der Zeile include /etc/nginx/conf.d/*.conf;
ein.
server_names_hash_bucket_size 64;
Speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst. Überprüfe Nginx erneut.
Überprüfe die Syntax der Nginx-Konfigurationsdatei.
$ sudo nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
Starte schließlich den Nginx-Dienst, um die neue Konfiguration zu aktivieren.
$ sudo systemctl start nginx
Ändere die Eigentümerschaft 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
Dein Bookstack ist jetzt einsatzbereit. Öffne die URL https://bookstack.example.com
in deinem Browser und du wirst die Anmeldeseite erhalten.
Melde dich mit dem Standard-Administratorkonto admin@admin.com
und dem Passwort password
an. Öffne die Seite Einstellungen >> Benutzer und klicke auf die Schaltfläche NEUEN BENUTZER HINZUFÜGEN.
Gib die Benutzerdaten ein, markiere das Kästchen Admin unter Benutzerrollen und entferne das Häkchen bei Benutzereinladung per E-Mail senden, da wir keine SMTP-Details festgelegt haben. Wähle ein sicheres Passwort. Klicke auf Speichern, wenn du fertig bist.
Klicke als Nächstes auf den Standardbenutzer Admin und lösche ihn, indem du auf die Schaltfläche Benutzer löschen klickst.
Übertrage den Besitz des Admin-Benutzers auf deinen neu erstellten Benutzer, indem du ihn aus dem Dropdown-Menü auswählst, bevor du ihn löschst. Klicke zum Abschluss auf Bestätigen. Wenn du mit diesem Benutzer eingeloggt bist, wirst du automatisch abgemeldet. Du musst dich dann mit dem neu erstellten Benutzer wieder anmelden.
BookStack sichern und wiederherstellen
BookStack sichern
Du musst die Datenbank und die Dateien separat sichern. Um die Datenbank zu sichern, verwende das Tool mysqldump
.
$ sudo mysqldump -u bookstackuser bookstack > bookstack.backup.sql
Du musst auch die folgenden Dateien und Ordner sichern.
.env
– Datei mit wichtigen Konfigurationsdaten.public/uploads
– Ordner mit den hochgeladenen Bildern.storage/uploads
– den Ordner mit den hochgeladenen Seitenanhängen.
Führe den folgenden Befehl aus, um ein komprimiertes Archiv mit den oben genannten Dateien und Ordnern zu erstellen.
$ sudo tar -czvf bookstack-files-backup.tar.gz .env public/uploads storage/uploads
BookStack wiederherstellen
Führe den folgenden Befehl aus, um die Datenbank wiederherzustellen.
$ sudo mysql -u bookstack < bookstack.backup.sql
Wenn du auf eine neue Version von BookStack wiederherstellst, musst du den Befehl sudo php artisan migrate
ausführen.
Um die oben erstellten komprimierten Dateien wiederherzustellen, verwende den folgenden Befehl.
$ sudo tar -xvzf bookstack-files-backup.tar.gz
Du musst auch die Berechtigungen ändern.
BookStack aktualisieren
Bevor du BookStack aktualisierst, stelle sicher, dass du ein ordentliches Backup mit dem oben beschriebenen Verfahren erstellst.
Um BookStack zu aktualisieren, ziehst du die Originaldateien aus dem Git-Repository.
$ cd /var/www/bookstack $ sudo git pull origin release
Führe die folgenden Befehle aus, um die Installation fortzusetzen.
$ sudo composer install --no-dev $ sudo php artisan migrate
Außerdem musst du die folgenden Befehle ausführen, um den Cache zu löschen.
$ sudo php artisan cache:clear $ sudo php artisan config:clear $ sudo php artisan view:clear
Fazit
Damit ist unsere Anleitung zur Installation von BookStack auf einem Ubuntu 20.04 Server abgeschlossen. Wenn du Fragen hast, schreibe sie unten in die Kommentare.