Skip to main content

Installation

Einleitung

Ich hatte mein Wiki am Anfang auf einer eigenen kleinen VM in Betrieb und habe Bookstack dabei als Docker Installation auf einem Rocky Linux 9 System betrieben. Da ich das Wiki öffentlich stellen wollte, stellte sich die Frage, ob man den Server einfach hinter einem Reverse Proxy ins Internet stellt ... oder den Webspace benutzt, den ich bei Strato sowieso in meinem Paket habe und auf dem aktuell gähnende Leere herrscht.

Dieser Artikel beschreibt also nun die manuelle Installation von BookStack auf einem klassischen Hosted Webspace mit SSH-Zugang, PHP und einer MySQL- oder MariaDB-Datenbank. Zuerst folgt der allgemeine Ablauf, anschließend die konkret getestete Umsetzung auf einem STRATO-Webhosting-Paket.

BookStack unterstützt Shared PHP Hosting offiziell nicht. Der Betrieb ist trotzdem möglich, wenn PHP über SSH ausgeführt werden kann, Git und Composer vorhanden sind und die Domain direkt auf das BookStack-Verzeichnis public zeigen kann.

Alle Datenbanknamen, Benutzer und Kennwörter in diesem Artikel sind natürlich Platzhalter. Die laufende Einrichtung steht im getrennten Artikel Konfiguration. Für spätere Versionswechsel gibt es die eigene Anleitung Update.

Verwendete Umgebung

Stand: 27. August 2026

Komponente Verwendete Konfiguration
Anwendung BookStack release-Branch, ursprüngliche Installation v26.05.2, aktuell v26.05.4
Webhosting STRATO Hosted Webspace mit (temporärem) SSH-Zugang
Webadresse https://klausing.info
Installationspfad ~/wiki
Öffentlicher Pfad ~/wiki/public
PHP-CLI bei STRATO /opt/RZphp84/bin/php-cli
Composer bei STRATO $HOME/bin/composer
Datenbank vom Provider bereitgestellte MySQL-/MariaDB-Datenbank

Standardinstallation auf Hosted Webspace

Voraussetzungen prüfen

BookStack benötigt aktuell PHP 8.2 oder neuer, MySQL 8.0 oder MariaDB 10.6, Git und Composer 2.2 oder neuer. PHP muss auch auf der Kommandozeile verfügbar sein. Die benötigten PHP-Erweiterungen nennt die offizielle Installationsanleitung.

php -v
php -m
git --version
composer --version

Im Kundenbereich des Hosters werden eine leere Datenbank und ein eigener Datenbankbenutzer angelegt. Benötigt werden Datenbankserver, Port, Datenbankname, Benutzername und Kennwort. Bei Hosted Webspace ist der Datenbankserver häufig nicht localhost; maßgeblich ist immer die Angabe des Providers.

Bei STRATO kann hier einfach über das Webinterface eine neue Datenbank Instanz angelegt und diese Anmeldedaten später in der Konfiguration verwendet werden.

STRATO-DB-Erstellen.png

Datenbank Name und Benutzer werden hier von Strato direkt vergeben, das Kennwort kann konfiguriert werden. Vorteil ist, dass STRATO sich hier auch direkt um die Datensicherung der Datenbank kümmert.

BookStack herunterladen

Der Branch release ist der stabile Updatekanal von BookStack:

cd ~/wiki

git clone \
  --depth 1 \
  --branch release \
  --single-branch \
  https://source.bookstackapp.com/bookstack.git \
  bookstack

cd ~/wiki/bookstack
ls -l artisan composer.json composer.lock

Die drei zuletzt geprüften Dateien müssen vorhanden sein. Alle folgenden Composer- und Artisan-Befehle werden aus ~/wiki/bookstack ausgeführt.

PHP-Abhängigkeiten installieren

composer install \
  --no-dev \
  --optimize-autoloader \
  --no-interaction

Anwendung konfigurieren

cp .env.example .env
chmod 600 .env
nano .env

Mindestens diese Werte werden angepasst:

APP_KEY=
APP_URL=https://wiki.example.org
APP_ENV=production
APP_DEBUG=false

DB_HOST=DATENBANKSERVER
DB_PORT=3306
DB_DATABASE=DATENBANKNAME
DB_USERNAME=DATENBANKBENUTZER
DB_PASSWORD="DATENBANKPASSWORT"

APP_URL wird ohne abschließenden Schrägstrich angegeben. Das Datenbankkennwort steht bei Sonderzeichen in doppelten Anführungszeichen.

Der Anwendungsschlüssel wird einmalig erzeugt:

php artisan key:generate
grep '^APP_KEY=' .env

Der erzeugte APP_KEY wird später mitgesichert und nicht neu erzeugt. Er wird unter anderem zur Verschlüsselung interner Daten und von MFA-Geheimnissen verwendet.

Schreibrechte und Datenbank

chmod -R u+rwX storage bootstrap/cache public/uploads

php artisan migrate --force
php artisan config:clear
php artisan cache:clear
php artisan view:clear

Pauschale Rechte wie chmod -R 777 sind dafür nicht erforderlich.

Domain anbinden

Der Document Root der Wiki-Domain zeigt ausschließlich auf:

~/wiki/public

Das wird bei Strato in der Konfiguration der Domain eingestellt:

STRATO-Webumleitung.png

Das übergeordnete Verzeichnis ~/wiki darf nicht öffentlich ausgeliefert werden. Andernfalls könnten .env, Quellcode und interne Konfigurationsdateien erreichbar werden.

Nach der Domainzuordnung wird HTTPS aktiviert. Die Startseite sollte danach mit 200, 301 oder 302 antworten, interne Dateien dagegen mit 403 oder 404:

# Erwartet 200
curl -I https://klausing.info/

# Erwartet 403/404
curl -I https://klausing.info/.env
curl -I https://klausing.info/composer.json
curl -I https://klausing.info/artisan

Erster Login

Bei der manuellen Installation lauten die initialen Zugangsdaten normalerweise:

E-Mail: admin@admin.com
Passwort: password

E-Mail-Adresse und Kennwort werden sofort geändert. Danach werden MFA für das Administratorkonto, Registrierung, öffentlicher Zugriff und die Rolle Public geprüft.

Angepasster Ablauf für STRATO

Bei STRATO unterscheiden sich vor allem PHP auf der Kommandozeile, der Composer-Aufruf, der Datenbankserver und die Domainzuordnung vom Standardweg. Die Anwendung selbst bleibt unverändert.

Festes PHP-CLI und Composer verwenden

Die im STRATO-Kundenbereich gewählte Web-PHP-Version gilt nicht automatisch für SSH-Befehle. Für diese Installation wird PHP 8.4 daher immer über den vollständigen Pfad aufgerufen:

PHP=/opt/RZphp84/bin/php-cli
COMPOSER="$HOME/bin/composer"

"$PHP" -v
"$PHP" "$COMPOSER" --version

Composer wird mit demselben PHP-Binary und ohne Speicherbegrenzung gestartet:

cd ~/wiki/bookstack

"$PHP" \
  -d memory_limit=-1 \
  "$COMPOSER" install \
  --no-dev \
  --optimize-autoloader \
  --no-interaction

STRATO-Datenbank eintragen

DB_HOST erhält exakt den Servernamen aus der STRATO-Datenbankverwaltung. localhost funktioniert hier nicht:

APP_KEY=
APP_URL=https://klausing.info
APP_ENV=production
APP_DEBUG=false

DB_HOST=DATENBANKSERVER_AUS_DEM_STRATO_KUNDENBEREICH
DB_PORT=3306
DB_DATABASE=DATENBANKNAME
DB_USERNAME=DATENBANKBENUTZER
DB_PASSWORD="DATENBANKPASSWORT"

Installation abschließen

cd ~/wiki

PHP=/opt/RZphp84/bin/php-cli

"$PHP" artisan key:generate
chmod -R u+rwX storage bootstrap/cache public/uploads
"$PHP" artisan migrate --force

"$PHP" artisan config:clear
"$PHP" artisan cache:clear
"$PHP" artisan view:clear

Root-Rechte oder sudo werden auf dem Webspace nicht vorausgesetzt. Die benutzerbezogenen Schreibrechte reichen in der verwendeten STRATO-Konfiguration aus, weil PHP im Kontext des Hostingaccounts läuft.

Domain intern auf public legen

Im STRATO-Kundenbereich wird klausing.info per interner Domainumleitung auf dieses Verzeichnis gesetzt:

/wiki/public

STRATO-Webumleitung.png

Danach wird SSL für die Domain aktiviert. Die abschließende Kontrolle erfolgt ohne Anmeldung:

# Erwartet 200
curl -I https://klausing.info/

# Erwartet 403/404
curl -I https://klausing.info/.env
curl -I https://klausing.info/composer.json
curl -I https://klausing.info/artisan

Nur die Startseite darf erfolgreich ausgeliefert werden. Damit ist die Installation abgeschlossen; Einstellungen, Backups, Sitemap, RSS und Updates folgen im Artikel Konfiguration.

Zuletzt aktualisiert am 27.08.2026 · 7 Aufrufe