{"id":1248,"date":"2017-12-11T22:18:43","date_gmt":"2017-12-11T22:18:43","guid":{"rendered":"https:\/\/www.taywa.ch\/blog\/?p=1248"},"modified":"2017-12-11T22:28:53","modified_gmt":"2017-12-11T22:28:53","slug":"webdav-server-roundup","status":"publish","type":"post","link":"https:\/\/www.taywa.ch\/blog\/server\/webdav-server-roundup\/","title":{"rendered":"webdav server roundup"},"content":{"rendered":"<p>Wir betreiben immer mehr unserer Webservices mit docker. Bis anhin haben wir f\u00fcr Kunden die Filezugriff brauchen apache webdav eingesetzt. Webdav Shares k\u00f6nnen von macOS und Windows einfach mit Finder oder Explorer gemounted werden.<\/p>\n<p>Serverseitig kann Webdav Hosting problematisch sein, insbesondere wenn der Webserver auch andere Dinge macht.<\/p>\n<p>Durch .htaccess files, rewrite rules oder anderen Konfigurationen im Webserver oder z.b. einem vorgeschalteten nginx proxy, kann es zu Komplikationen kommen.<\/p>\n<p>Das Problem ist das man zwei v\u00f6llig gegens\u00e4tzliche Dinge von dem gleichem Server will. Bei einen php file, soll einerseits das file von mod_php prozessiert werden, andererseits soll im webdav Fall nichts prozessiert werden.<\/p>\n<p>Dotfiles wie &#8222;.htaccess&#8220; sollen wiederum im normalen Fall nicht vom User einsehbar sein, via webdav aber schon. Nginx als vorgeschalteter Proxy kann einem auch dazwischenfunken da dort z.B. auch eine Rule existieren kann die access denied f\u00fcr Dotfiles zur\u00fcckliefert.<\/p>\n<p>Dies f\u00fchrt dann zu mehr und komplizierter apache\/nginx config um alle F\u00e4lle richtig zu handhaben.<\/p>\n<h2>ftps, sftp<\/h2>\n<p>Urspr\u00fcnglich war es die Idee ftps einzusetzen. Die Hauptanforderung ist das wir ein sicheres file sharing f\u00fcr Kunden zur Verf\u00fcgung stellen k\u00f6nnen, welches Serverseitig und Kundenseitig m\u00f6glichst unkompliziert verwendet werden kann. Idealerweise wird dieses direkt vom Betriebssystem unterst\u00fctzt (macOS oder Windows).<\/p>\n<p>Als erstes ist mir da ftps in den Sinn gekommen. Das Protokoll ist nur f\u00fcr Filedatentranfer zust\u00e4ndig und muss nicht noch zus\u00e4tzlich normalen Webtraffic abarbeiten. Es braucht zudem keine shell user wie sftp.<\/p>\n<p>ABER leider musst ich mit erschrecken feststellen das macOS High Sierra KEIN ftp command line client mehr besitzt. Im Finder kann man zudem nur ftp (nicht ftps) readonly mounten.<\/p>\n<h2>Ok, also doch webdav<\/h2>\n<p>Nach dem ftps Intermezzo wieder zur\u00fcck zu webdav. Mir ist leider kein anderes Filetransfer Protokoll bekannt, f\u00fcr macOS und Windows, das ohne zus\u00e4tzliche Tools funktioniert. Sftp kann in macOS nur in der shell benutzt werden. Unter Windows ist das unix sftp nicht ohne zus\u00e4tzliche Tools verf\u00fcgbar.<\/p>\n<p>Der webdav Server im docker container sollte nur f\u00fcr webdav zust\u00e4ndig sein und nicht f\u00fcr das ausliefern normaler Webseiten.<\/p>\n<p>Es m\u00fcsste auch nicht unbedingt der apache server sein, ein etwas schlankerer Server mit weniger Speicherverbrauch w\u00fcrde reichen.<\/p>\n<h3>lighttpd<\/h3>\n<p>F\u00fcr lighttpd gibt es ein webdav Modul. Im Gegensatz zum standard nginx Modul ist dieses auch f\u00fcr vollen read\/write Zugriff gedacht.<\/p>\n<p>Mit macOS High Sierra arbeitet das lighttpd webdav Modul nicht gut zusammen. Es kommt zu dem Fehler chunked data Error. Lighttpd unterst\u00fctzt leider keine http 1.1 &#8222;chunked transfer encoding&#8220;. Dateien werden erzeugt auf dem Server, aber diese haben immer eine l\u00e4nge von 0.<\/p>\n<h3>nginx<\/h3>\n<p>N\u00e4chster Versuch nginx. Das standard Modul f\u00fcr nginx reicht f\u00fcr read\/write nicht aus, man braucht noch zus\u00e4tzlich noch das Modul\u00a0<a href=\"https:\/\/github.com\/arut\/nginx-dav-ext-module\">nginx-dav-ext-module<\/a>\u00a0. Es gibt nur wenig Docu zu dem Modul. Nach einem Test geht dies auch nicht mit macOS. Das nginx webdav Module unst\u00fctzt keine Locks siehe <a href=\"https:\/\/github.com\/arut\/nginx-dav-ext-module\/issues\/8\">issue 8<\/a>\u00a0in Github.<\/p>\n<h3>wsgidav<\/h3>\n<p>Als n\u00e4chstes teste ich kurz\u00a0<a href=\"http:\/\/wsgidav.readthedocs.io\/\">wsgidav<\/a>\u00a0dies ist ein reiner python webdav server. Die Konfiguration erlaubt sehr viele M\u00f6glichkeiten, fast zuviele. Es funktioniert tadellos aber bei gr\u00f6sseren Dateien scheint es mir langsam.<\/p>\n<h3>Apache webdav<\/h3>\n<p>Back to the roots, Apache webdav ist und bleibt der Goldstandard f\u00fcr webdav. Wahrscheinlich testen alle OS Hersteller haupts\u00e4chlich ihre Webdav Clients mit Apache webdav.<\/p>\n<h2>docker image<\/h2>\n<p>Unter\u00a0<a href=\"https:\/\/hub.docker.com\/r\/yvess\/alpine-apache2-webdav\/\">alpine-apache2-webdav<\/a>\u00a0habe ich eine minimales docker image erstellt (17 MB), welches alpine linux verwendet. Es beinhaltet nur das n\u00f6tigste damit apache mit webdav funktioniert. Es ist f\u00fcr mehrer Shares konzipiert und kann\/solllte mit SSL betrieben werden. Es sollte m\u00f6glichst ohne zwischengeschalteten proxy verwendet werden um Probleme zu vermeiden. Mehr Infos auch hier\u00a0<a href=\"https:\/\/github.com\/taywa\/docker-alpine-apache2-webdav\">https:\/\/github.com\/taywa\/docker-alpine-apache2-webdav<\/a>.<\/p>\n<p>Finally, schlankes file sharing mit docker for macOS &amp; Windows! Ohne ged\u00f6ns!<\/p>\n<p>Wieder mit apache webdav, don&#8217;t change a running system. H\u00e4tte nicht gedacht das dies immer noch die beste L\u00f6sung ist!<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Wir betreiben immer mehr unserer Webservices mit docker. Bis anhin haben wir f\u00fcr Kunden die Filezugriff brauchen apache webdav eingesetzt. Webdav Shares k\u00f6nnen von macOS und Windows einfach mit Finder oder Explorer gemounted werden.\u00a0<\/p>\n<p>Serverseitig kann Webdav Hosting problematisch sein, insbesondere wenn der Webserver auch andere Dinge macht.<\/p>\n","protected":false},"author":4,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[60,162,57],"tags":[],"class_list":["post-1248","post","type-post","status-publish","format-standard","hentry","category-apache","category-docker","category-server"],"_links":{"self":[{"href":"https:\/\/www.taywa.ch\/blog\/wp-json\/wp\/v2\/posts\/1248","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.taywa.ch\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.taywa.ch\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.taywa.ch\/blog\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/www.taywa.ch\/blog\/wp-json\/wp\/v2\/comments?post=1248"}],"version-history":[{"count":6,"href":"https:\/\/www.taywa.ch\/blog\/wp-json\/wp\/v2\/posts\/1248\/revisions"}],"predecessor-version":[{"id":1254,"href":"https:\/\/www.taywa.ch\/blog\/wp-json\/wp\/v2\/posts\/1248\/revisions\/1254"}],"wp:attachment":[{"href":"https:\/\/www.taywa.ch\/blog\/wp-json\/wp\/v2\/media?parent=1248"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.taywa.ch\/blog\/wp-json\/wp\/v2\/categories?post=1248"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.taywa.ch\/blog\/wp-json\/wp\/v2\/tags?post=1248"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}