{"id":3140,"date":"2022-03-07T07:00:00","date_gmt":"2022-03-07T06:00:00","guid":{"rendered":"https:\/\/www.my-it-brain.de\/wordpress\/?p=3140"},"modified":"2022-03-01T21:53:12","modified_gmt":"2022-03-01T20:53:12","slug":"nextcloud-im-container-teil-4-hier-und-da-klemmt-es","status":"publish","type":"post","link":"https:\/\/www.my-it-brain.de\/wordpress\/nextcloud-im-container-teil-4-hier-und-da-klemmt-es\/","title":{"rendered":"Nextcloud im Container &#8212; Teil 4: Hier und da klemmt es"},"content":{"rendered":"\n<p>Herzlich Willkommen zu Teil 4 meines Wochenend-Projekts &#8222;Nextcloud im Container&#8220;. Diesem gingen die folgenden Teile voraus:<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li><a href=\"https:\/\/www.my-it-brain.de\/wordpress\/nextcloud-im-container-teil-1-der-plan\/\" data-type=\"post\" data-id=\"2993\">Der Plan<\/a><\/li><li><a href=\"https:\/\/www.my-it-brain.de\/wordpress\/nextcloud-im-container-teil-2-die-ansible-rolle\/\" data-type=\"post\" data-id=\"2996\">Die Ansible-Rolle<\/a><\/li><li><a href=\"https:\/\/www.my-it-brain.de\/wordpress\/nextcloud-im-container-teil-3-mit-reverse-proxy\/\" data-type=\"post\" data-id=\"3120\">NGINX als Reverse-Proxy<\/a><\/li><\/ol>\n\n\n\n<p>Nach Teil 3 habe ich die <a href=\"https:\/\/de.wikipedia.org\/wiki\/Zwei-Faktor-Authentisierung\">Zwei-Faktor-Authentisierung<\/a> \u00fcber <a href=\"https:\/\/de.wikipedia.org\/wiki\/Einmalkennwort\">TOTP<\/a> f\u00fcr meine Nutzerkonten aktiviert, die Bookmark-, Calendar- und Contact-App installiert bzw. aktiviert, ein paar Kalendertermine erstellt und ein paar Dateien hochgeladen. Nichts Wichtiges. Lediglich ein paar Daten, die ich nach einem Backup zerst\u00f6ren kann, um anschlie\u00dfend den Restore-Prozess zu testen. Zuvor m\u00f6chte ich aber noch ein paar Dinge festhalten, die mir bisher aufgefallen sind.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Background jobs: Cron does not run<\/h2>\n\n\n\n<p>In den Grundeinstellungen der Nextcloud werden Hintergrund-Aufgaben konfiguriert. Diese sind laut des dortigen Hinweises wichtig, um die optimale Geschwindigkeit zu erreichen:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p>Um die optimale Geschwindigkeit zu erreichen ist es wichtig, dass die Hintergrund-Aktivit\u00e4ten richtig konfiguriert sind. F\u00fcr gr\u00f6\u00dfere Installationen ist &#8218;Cron&#8216; die empfohlene Einstellung. Weitere Informationen findest Du in der Dokumentation.<\/p><cite>Grundeinstellungen in den Nextcloud-Einstellungen<\/cite><\/blockquote>\n\n\n\n<p>Die \u00dcberschrift ist der Titel des <a href=\"https:\/\/github.com\/nextcloud\/docker\/issues\/1695\">GitHub-Issues #1695<\/a>. Dieser besch\u00e4ftigt sich damit, dass Cron in der Container-Instanz nicht l\u00e4uft. Halt genau so, wie Cron dies bei mir auch nicht tut.<\/p>\n\n\n\n<p>Der Benutzer beryl03, welcher den Issue er\u00f6ffnet hat, beschreibt, dass Cron in der Container-Instanz nicht verf\u00fcgbar ist und er in der Dokumentation keinen Hinweis darauf gefunden hat. Um das Problem zu mitigieren hat beryl03 einen Cronjob auf seinem Container-Host konfiguriert, welcher sich mit der Container-Instanz verbindet und darin die Datei <code>cron.php<\/code> ausf\u00fchrt. Welch elender Workaround. Aber immerhin gibt es einen. <a href=\"https:\/\/github.com\/nextcloud\/docker\/issues\/1442\">Denn die Hintergrund-Aufgaben mit AJAX auszuf\u00fchren, scheitert leider ebenfalls.<\/a> Schade, so habe ich mir das tats\u00e4chlich nicht vorgestellt.<\/p>\n\n\n\n<p>Im Verlauf von <a href=\"https:\/\/github.com\/nextcloud\/docker\/issues\/1695\">Issue #1695<\/a> wird darauf hingewiesen, dass zur Verwendung von Cron ein weiterer Container ben\u00f6tigt wird (siehe [<a href=\"#quellen-links\">3<\/a>]). Dies wird in den Beispielen zu den Compose-Dateien beschrieben (siehe [<a href=\"#quellen-links\">4<\/a>]). Da ich Podman und Ansible statt Docker-Compose verwende, habe ich mir diese Beispiele nat\u00fcrlich nicht angesehen. Das ist dem Projekt nicht anzulasten, da ich mich ja bewusst f\u00fcr einen anderen Weg entschieden habe. Doch denke ich, dass man das Thema Hintergrund-Aufgaben innerhalb der Projekt-Dokumentation als auch in der Nextcloud-Dokumentation etwas ausf\u00fchrlicher behandeln k\u00f6nnte und sollte. Doch wie gehe ich nun mit dem Problem um, dass meine Hintergrund-Aufgaben nicht ausgef\u00fchrt werden?<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Docker-Compose mit Podman nutzen<\/h2>\n\n\n\n<p>Tats\u00e4chlich habe ich einen <a href=\"https:\/\/www.redhat.com\/sysadmin\/podman-docker-compose\">Artikel<\/a>  gefunden, welcher beschreibt, wie man Docker-Compose ab Podman 3.0 nutzen kann. Allerdings bietet dieser nur eine L\u00f6sung f\u00fcr den Fall, dass man Podman als User root bzw. mit Root-Rechten ausf\u00fchrt. Da Podman bei mir <em>rootless<\/em> l\u00e4uft, kommt die L\u00f6sung f\u00fcr mich nicht in Frage.<\/p>\n\n\n\n<p>Nach etwas weiterer Recherche habe ich einen <a href=\"https:\/\/github.com\/containers\/podman\/issues\/9169\">RFE<\/a> gefunden, welcher diese Funktionalit\u00e4t auch f\u00fcr rootless-Podman fordert. Die gute Nachricht lautet, dass diese Funktion mit Podman 3.2 ver\u00f6ffentlicht wurde. Pech f\u00fcr mich, dass unter Debian stable lediglich Podman 3.0.1 in den Quellen verf\u00fcgbar ist.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Ein Workaround ist besser als gar keine L\u00f6sung<\/h2>\n\n\n\n<p>Tats\u00e4chlich erscheint mir aktuell der Workaround von beryl03 (siehe [<a href=\"#quellen-links\">1<\/a>]) der beste Weg zu sein, um die Hintergrund-Aufgaben ausf\u00fchren zu lassen. Dazu f\u00fchre ich auf meinem Container-Host folgenden Befehl aus:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ podman exec -u 33 -t nextcloud php -f \/var\/www\/html\/cron.php<\/code><\/pre>\n\n\n\n<p>Damit wird das Skript <code>cron.php<\/code> innerhalb der Container-Instanz mit der Nextcloud ausgef\u00fchrt. Mit <code>-u 33<\/code> wird die UID von <code>www-data<\/code> innerhalb der Container-Instanz angegeben. F\u00fcr eine genaue Erkl\u00e4rung des Befehls und seiner Optionen siehe podman-exec(1).<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"785\" height=\"334\" src=\"https:\/\/www.my-it-brain.de\/wordpress\/wp-content\/uploads\/2022\/02\/Hintergrund-Aufgaben.png\" alt=\"Hintergrund-Aufgaben wurden erfolgreich ausgef\u00fchrt.\" class=\"wp-image-3143\" srcset=\"https:\/\/www.my-it-brain.de\/wordpress\/wp-content\/uploads\/2022\/02\/Hintergrund-Aufgaben.png 785w, https:\/\/www.my-it-brain.de\/wordpress\/wp-content\/uploads\/2022\/02\/Hintergrund-Aufgaben-300x128.png 300w, https:\/\/www.my-it-brain.de\/wordpress\/wp-content\/uploads\/2022\/02\/Hintergrund-Aufgaben-768x327.png 768w, https:\/\/www.my-it-brain.de\/wordpress\/wp-content\/uploads\/2022\/02\/Hintergrund-Aufgaben-624x265.png 624w\" sizes=\"auto, (max-width: 785px) 100vw, 785px\" \/><figcaption>Die Hintergrund-Aufgaben wurden nun erfolgreich ausgef\u00fchrt<\/figcaption><\/figure>\n\n\n\n<p>Da ich nicht gern lange Befehle in die Crontab schreibe, erstelle ich ein kurzes Skript namens <code>nextcloud_cron.sh<\/code>, welches obigen Befehl aufnimmt und welches ich alle 5 Minuten von Cron ausf\u00fchren lasse. Damit werde ich sich noch sehr lange arbeiten, denn nicht umsonst sagen manche: &#8222;Nichts h\u00e4lt so lange, wie ein gutes Improvisorium.&#8220;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Fazit von Teil 4<\/h2>\n\n\n\n<p>Ich hoffe, die Artikelserie hat euch bis hierhin ein wenig unterhalten. Wer nach einer einfachen L\u00f6sung gesucht hat, bei der man ein bis zwei Container-Images aus dem Regal nimmt, ein paar Variablen mit Werten f\u00fcllt, sie auf einen Container-Host provisioniert, ausf\u00fchrt und fertig ist, wird sicher gemerkt haben, dass er diese L\u00f6sung in dieser Artikelreihe nicht findet.<\/p>\n\n\n\n<p>Auch ich habe mir zu Beginn nicht vorgestellt, dass es so hakelig werden w\u00fcrde. Schlie\u00dflich soll mit Containern doch alles einfacher werden, nicht wahr? Warum mache ich also weiter und lasse das ganze Wochenend-Projekt nicht einfach fallen? Neugier, Sturheit, eine nutzbare Nextcloud-Instanz und auch ein bisschen Spa\u00df bilden die Antwort auf vorstehende Frage. Und deshalb mache ich auch weiter. In Teil 5 wird es um Backup und Restore gehen.<\/p>\n\n\n\n<p>Wie betreibt ihr eure Nextcloud? Mit Container oder ohne? Unter Docker, K3s, K8s, Podman, OpenShift oder einer noch ganz anderen L\u00f6sung? Lasst es mich gern in den Kommentaren wissen. Habt ihr \u00fcber eure Erfahrungen in eurem eigenen Blog geschrieben, lasst mir gern einen Link hier. Macht es gut, bis n\u00e4chste Woche.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"quellen-links\">Quellen und weiterf\u00fchrende Links<\/h2>\n\n\n\n<ol class=\"wp-block-list\"><li><a href=\"https:\/\/github.com\/nextcloud\/docker\/issues\/1695\">Background jobs: Cron does not run #1695<\/a><\/li><li><a href=\"https:\/\/github.com\/nextcloud\/docker\/issues\/1442\">AJAX Background Jobs Fail After a Period of Inactivity #1442<\/a><\/li><li><a href=\"https:\/\/github.com\/nextcloud\/docker\/issues\/1695#issuecomment-1042602441\">https:\/\/github.com\/nextcloud\/docker\/issues\/1695#issuecomment-1042602441<\/a><\/li><li><a href=\"https:\/\/github.com\/nextcloud\/docker\/blob\/master\/.examples\/docker-compose\/insecure\/mariadb\/apache\/docker-compose.yml\">https:\/\/github.com\/nextcloud\/docker\/blob\/master\/.examples\/docker-compose\/insecure\/mariadb\/apache\/docker-compose.yml<\/a><\/li><li><a href=\"https:\/\/www.redhat.com\/sysadmin\/podman-docker-compose\">Using Podman and Docker Compose. Podman 3.0 now supports Docker Compose to orchestrate containers.<\/a> Enable Sysadmin. 2021-01-07.<\/li><li><a href=\"https:\/\/github.com\/containers\/podman\/issues\/9169\">[RFE]Make docker-compose work with rootless podman #9169<\/a><\/li><\/ol>\n","protected":false},"excerpt":{"rendered":"<p>Herzlich Willkommen zu Teil 4 meines Wochenend-Projekts &#8222;Nextcloud im Container&#8220;. Diesem gingen die folgenden Teile voraus: Der Plan Die Ansible-Rolle NGINX als Reverse-Proxy Nach Teil 3 habe ich die Zwei-Faktor-Authentisierung \u00fcber TOTP f\u00fcr meine Nutzerkonten aktiviert, die Bookmark-, Calendar- und Contact-App installiert bzw. aktiviert, ein paar Kalendertermine erstellt und ein paar Dateien hochgeladen. Nichts Wichtiges.<span class=\"continue-reading\"> <a href=\"https:\/\/www.my-it-brain.de\/wordpress\/nextcloud-im-container-teil-4-hier-und-da-klemmt-es\/\">[Weiterlesen&#8230;]<\/a><\/span><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_metis_text_type":"","_metis_text_length":0,"_post_count":0,"footnotes":""},"categories":[57],"tags":[686,687,652,685,430,305],"class_list":["post-3140","post","type-post","status-publish","format-standard","hentry","category-wochenend-projekte","tag-background-jobs","tag-hintergrund-aufgaben","tag-nextcloud","tag-nextcloud-container","tag-osbn","tag-planet"],"_links":{"self":[{"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/posts\/3140","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/comments?post=3140"}],"version-history":[{"count":3,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/posts\/3140\/revisions"}],"predecessor-version":[{"id":3150,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/posts\/3140\/revisions\/3150"}],"wp:attachment":[{"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/media?parent=3140"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/categories?post=3140"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/tags?post=3140"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}