Bookstack
Ein exemplarischer Anwendungsfall ist neben dem privaten Gebrauch z.b. eine Wissensdatenbank für den Kundensupport. Letzteres ermöglicht es beispielsweise, bereits existierende Produkthandbücher ohne Strukturverlust in das System zu übertragen. Das geht sogar auch umgekehrt, denn eine exzellente Export-Funktion ermöglicht den Offlinegebrauch als Handbuch.
Vorteile:
- intuitiv und ohne Nutzeranleitung bedienbar
- strukturiere Oberfläche
- Nutzerverwaltung mit Berechtigungen
- Diagramme können durch draw.io Integration erstellt werden
- Export von Inhalten
- WYSIWYG-Editor oder Markdown-Editor (siehe auch DokuWiki)
- Video-Verweise z.B. von YouTube können eingebunden und abgespielt werden
- unterstützt Docker und daher einfache Installation auf einem Server
- Sehr gute Dokumentation https://www.bookstackapp.com/docs/
Nachteile:
- nicht so anpassungsfähig wie DokuWiki
- starre Strukturen
- keine Plugins im klassischen Sinne, sondern Hacks
- benötigt Datenbank oder sqlite
Beispiel
mobile Version mit Nachtmodus
Installation
- Voraussetzung ist, dass Docker installiert ist
root@docker: nano /srv/bookstack/docker-compose.yml
docker-compose.yml
---
version: "2"
services:
bookstack:
image: lscr.io/linuxserver/bookstack
container_name: bookstack
environment:
- PUID=1000
- PGID=1000
- APP_URL=http://lokaleIP:6875
- DB_HOST=bookstack_db
- DB_USER=bookstack
- DB_PASS=dbpassword123
- DB_DATABASE=bookstackapp
volumes:
- ./data:/config
ports:
- 6875:80
restart: always
depends_on:
- bookstack_db
bookstack_db:
image: lscr.io/linuxserver/mariadb
container_name: bookstack_db
environment:
- PUID=1000
- PGID=1000
- MYSQL_ROOT_PASSWORD=dbrootpasswd123
- TZ=Europe/Berlin
- MYSQL_DATABASE=bookstackapp
- MYSQL_USER=bookstack
- MYSQL_PASSWORD=dbpassword123
volumes:
- ./data:/config
restart: always
ReverseProxy
Apache2-Konfig. Beispiel:
wiki.foo.info.conf
<VirtualHost *:80>
ServerAdmin [email protected]
ServerName wiki.foo.info
TraceEnable off
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/wiki.foo.info_access.log combined
ErrorLog ${APACHE_LOG_DIR}/wiki.foo.info_error.log
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
</VirtualHost>
<VirtualHost *:443>
ServerAdmin [email protected]
ServerName wiki.foo.info
TraceEnable off
ProxyPreserveHost On
ProxyPass /.well-known !
ProxyPass / http://docker01.lan.foo.info:6875/
ProxyPassReverse / http://docker01.lan.foo.info:6875/
RequestHeader set X-Forwarded-Proto "https"
RequestHeader set X-Forwarded-Port "443"
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/wiki.foo.info_access.log combined
ErrorLog ${APACHE_LOG_DIR}/wiki.foo.info_error.log
SSLEngine on
SSLProtocol All -SSLv2 -SSLv3
SSLHonorCipherOrder On
SSLInsecureRenegotiation Off
SSLCompression off
SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!3DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA
SSLCertificateFile /etc/letsencrypt/live/foo.info/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/foo.info/privkey.pem
BrowserMatch "MSIE [2-6]" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Directory>
</VirtualHost>
Änderung Domain oder IP
Wenn sich der Domainname mal ändern sollte oder die lokale IP mit der Bookstack getestet wurde, dann muss der neue Name in der Datenbank neu gesetzt werden.
docker exec -it bookstack php /app/www/artisan bookstack:update-url http://192.168.10.54:6875 https://neuer-name.com
This will search for "http://192.168.10.54:6875" in your database and replace it with "https://neuer-name".
Are you sure you want to proceed? (yes/no) [no]:
> yes
This operation could cause issues if used incorrectly. Have you made a backup of your existing database? (yes/no) [no]:
> yes
Updated 0 rows in attachments->path
Updated 12 rows in pages->html
Updated 0 rows in pages->text
Updated 0 rows in pages->markdown
Updated 48 rows in images->url
Updated 1 rows in settings->value
Updated 0 rows in comments->html
Updated 0 rows in comments->text
Updated 0 JSON encoded rows in settings->value
URL update procedure complete.
============================================================================
Be sure to run "php artisan cache:clear" to clear any old URLs in the cache.
============================================================================
Danach den Cache leeren
docker exec -it bookstack php /app/www/artisan cache:clear
Application cache cleared!
Export der Inhalte in verschiedenen Formaten
https://github.com/homeylab/bookstack-file-exporter?tab=readme-ov-file#run-via-pip

No comments to display
No comments to display