====== Modernes Dokuwiki für Infrastrukturdokumentation ====== ===== Kurzvortrag ===== Am 2015-09-25 hielt ich ([[chaoten:bongo]]) einen Vortrag über mein den Weg zu einer Dokumentationslösung, meine Anforderungen, wovon mir abgeraten wurde und woran ich letzendlich hängen blieb. ===== "Was sonstwo benutzt wird" ===== * Mir wurde abgeraten von Confluence (Atlassian) * Wikitten kann keine Volltextsuche * MDwiki hat keinen Index * Nachbauen einer eigenen Lösung mit eigener Searchengine... neee ===== Anforderungen ===== - Hell/freundlich ⇒ Github, Duckduckgo, Soundcloud, Twitter sind das was ich gerne benutze => Maßstab - Gute, große Buttons - Viele intuitive, hochauflösende Icons - HTML5 - Abgerundete Ecken - Volltextsuche - Vollständiger Index-Baum (links) - Markdown-Syntax ===== Setup ===== (Ich gehe davon aus ihr könnt mit git rudimentär umgehen, eine Shell bedienen und Apache konfigurieren) ==== Requirements ==== * Apache Webserver (ich verwende noch **2.2x**) * mod_cgi aktiviert * [[https://www.dokuwiki.org/dokuwiki|Dokuwiki]] bereits installiert * Plugins * gitbacked (zeigt immer ein verfügbares Update an obwohl es keines gibt) * indexmenu (für den indexbaum an der Seite) * markdowku (für markdown) * Templates (so heißen die Themes) * [[https://www.dokuwiki.org/template:bootstrap3|Bootstrap 3]] von Giuseppe Di Terlizzi * Git * Eine Webhook-Kompatible Git-Verwaltung (z.B. gitlab, github; siehe [[https://chaos.expert]]) ==== Konfiguration ==== * dokuwiki installieren * wiki konfigurieren * bootstrap3 als design template auswählen * Gitbacked * pushAfterCommit => JA * periodicPull => NEIN * repoPath => ./data/pages * repoWorkDir => ./data/pages * Sidebar * left * Erstellen der Seite "sidebar" mit Inhalt: {{indexmenu>:|js#bj-tango.png navbar id#random skipfile+/(sidebar|hooks)/}} * Erstellen von ./data/pages/hooks/web_hook.cgi #!/usr/bin/env bash echo -ne 'Content-type: text/plain\r\n\r\n' # ''Updating'' cd $DOCUMENT_ROOT/data/pages/ git pull 2>&1 # From https://www.dokuwiki.org/caching "All of DokuWiki's cache files can be easily invalidated by “touching” the conf/local.php file" touch $DOCUMENT_ROOT/conf/local.php echo $? echo . * Erstellen der Datei ./data/pages/hooks/.htaccess AuthUserFile /var/www/wiki/data/pages/hooks/.htpasswd AuthType Basic AuthName "hooks" # Here is where we allow/deny Order Deny,Allow Satisfy any Deny from all Require valid-user * Erstellen der ./.htaccess Datei für das ganze Wiki (**BasicAuth-Teil nur für private Wikis, oder der dokuwiki auth nicht traut**) RewriteEngine On RewriteCond %{THE_REQUEST} !^GET\ /.*?static/(css|js|img) RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php [L,QSA] # set an environment variable "noauth" SetEnvIf Request_URI ^/web_hook\.cgi noauth=1 AuthUserFile /var/www/wiki/.htpasswd AuthType Basic AuthName "." # Here is where we allow/deny Order Deny,Allow Satisfy any Deny from all Require valid-user Allow from env=noauth * Konfigurieren des Apache-Vhosts ServerAdmin webmaster@localhost ServerName wiki.myomain.example DocumentRoot /var/www/wiki Options FollowSymLinks AllowOverride None Options -Indexes +FollowSymLinks +MultiViews AllowOverride All Order allow,deny allow from all Require all denied Order allow,deny Deny from all Satisfy All ScriptAlias /web_hook.cgi /var/www/wiki/data/pages/hooks/web_hook.cgi ErrorLog ${APACHE_LOG_DIR}/error.log # Possible values include: debug, info, notice, warn, error, crit, # alert, emerg. LogLevel warn CustomLog ${APACHE_LOG_DIR}/ssl_access.log combined # SSL Engine Switch: # Enable/Disable SSL for this virtual host. SSLEngine on SSLCertificateFile /etc/ssl/certs/myhost.crt SSLCertificateKeyFile /etc/ssl/private/myhost.key SSLCertificateChainFile /etc/ssl/certs/wosign_root_bundle.crt # Im Zweifel mal bei https://cipherli.st oder https://bettercrypto.org schauen SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH SSLProtocol All -SSLv2 -SSLv3 SSLHonorCipherOrder On * Sicherstellen dass 'git pull' in ./data/pages funktioniert * .htpasswd Files erstellen * https://webhooks:SUPERSECRET@wiki.mydomain.example/web_hook.cgi als Webhook in Gitlab (o.ä.) registrieren ===== Anmerkungen aus dem Publikum ===== * Falls man keine Webhooks verwenden will, kann man das web_hook script auch lokal einbinden. Siehe .git/hooks/ Verzeichnis. (Danke joshi) * Statt .htaccess zu verwenden sollte man die Regeln in die apache-config schreiben und somit ein umgehen der webhook-auth über das Git-Repo zu verhindern (schlimmstenfalls DoS). (Verhindert aber auch eventuelles "Backupen" des gesamten Dokuwiki-roots über git ;)) (via schiermi) * Effektiv haben wir durch das Git eine zweite Versionsverwaltung, denn dokuwiki führt selbst eine Seitenhistorie. (via SchMA) * => Änderungen die über git gemacht werden sind nicht in der dokuwiki-Seitenhistorie zu sehen! * es wäre denkbar, die Trigger von gitbacked zu erweitern