Anleitung: nextcloud mit nginx reverse proxy und LetsEncrypt auf Docker

  • Hallo Boeth,


    eigentlich sind die nötigen Einstellungen in meiner Konfiguration enthalten. Das sind m.M. die client_max_body_size und die manuelle Einstellung auf der nextcloud-Oberfläche.

    Hast du die Server neu gestartet?


    Gruß xgadscu

    Hallo quasimodoz,


    den Menüpunkt zum Apps-Installieren findet man rechts oben unter dem User-Kürzel-Icon. Dies allerdings nur, wenn man als Admin angemeldet ist.


    Gruß xgadscu

  • xgadscu


    Hallo xgadscu,


    manchmal ist man wohl blind und taub. Bestimmt 20mal oder mehr habe ich auch diese Seite abgesucht und das nicht gefunden. Daher bitte ich um Entschuldigung dich mit so einer simplen Angelegenheit belästigt zu haben, danke aber vielmals.


    Gruß


    quasimodoz

  • Hallo xgadscu,


    hab x-fach gebaut und neu gestartet.


    Sieht so aus als ob der COPY task überschrieben wird?
    Workaround:
    Nach dem Start der Container cp client_max_body_size config Datei in das nginx-conf.d Verzeichnis des Volumes als custom_proxy_setting.conf

    Gibt es eine bessere Lösung?

    Ist diese config Datei bei Dir nach dem build im entsprechenden Verzeichnis unter Docker-Volumes? Bei mir nicht.
    Ist bei mir eindeutig reproduzierbar. Ist die Datei da - alles ok - sonst Fehler.


    Gruß

    boeth

    Einmal editiert, zuletzt von boeth () aus folgendem Grund: Die Datei ist zwar im Container - hab mir den Inhalt mal angeschaut - wird aber nicht verwendet?

  • Voraussetzungen

    1. Ports 80 und 443 freimachen
      Die Ports 80 und 443 sind möglicherweise auf dem Router und dem QNAP bereits belegt. Sie müssen dort durch andere Ports ersetzt werden, da sie später vom ACME-Protokoll des LetsEncrypt-Containers benötigt werden. Diese lassen sich meines Wissens aktuell (noch) nicht überschreiben. Ich hatte zu Anfang immer mit Port-Mappings gearbeitet. Dann hat aber das Generieren der Zertifikate nicht funktioniert.
    2. Portweiterleitung im Router für Ports 80 und 443
      Im Router muss jetzt eine Portweiterleitung für die Ports 80 und 443 auf die IP des QNAP-Systems eingerichtet werden. Auf diese Ports wird später der nginx-Reverse-Proxy lauschen.

    Ist es nicht so, dass wenn man Netzwerk von Containern in Bridge-Mode laufen lässt und andere (feste) IPs vergibt, dann gibt es keine Kollisionen mit Port 80/433 auf Qnap?

  • Hallo boeth,


    ich hatte zugegebenermaßen anfangs auch das Problem, dass der COPY der config-Datei nicht funktioniert hat und ich sie dann manuell per cp auf das Volume gebracht habe. Irgendwann hat es dann funktioniert und jetzt funktioniert es immer (d.h. bei jeder Aktualisierung). Ich weiß leider nicht, woran das gelegen hat und ob ich sonst noch irgendetwas gemacht haben, was den Knoten gelöst hat.

    Sinnig ist nur, dass offensichtlich schon einige Leute mit meiner Konfiguration erfolgreich gearbeitet haben.


    mfg xgadscu

  • Bei mir funktioniert nextcloud soweit recht gut. Ich kann mich von beliebigen clients, egal ob Windows, Android oder iPhone einloggen. Das Erstellen und die Synchronisation von Kontakten und Kalender zwischen Outlook und Android geht ebenfalls problemlos. Was ich aber nicht hin bekomme ist die CalDAV-Sync-Einrichtung vom/zum iPhone. Ich habe mehrer Varianten der Einstellungen wie sie im nextcloud Benutzer-Handbuch beschrieben sind versucht. Leider vergeblich.


    Kann mir da noch jemand einen Tipp geben? Hat da jemand eine funktionierende IPhone CalDAV-Synchronisation? Ich muss allerdings sagen, dass ich kein iPhonespezialist bin. Ich habe mir ein altes iPhone 5 ausgeliehen und ganz neu konfiguriert. Da aber sonst alles zu funktionieren scheint, denke ich, dass ich bei der Einrichtung nichts falsch gemacht habe.

  • Hallo pci,


    ich kenne mich mit dem Bridge-Mode leider nicht so aus. Mich hatte anfangs hauptsächlich gereizt, eine eigene Cloud mit oben beschriebenen Leistungsmerkmalen hinzubekommen. Das war mir schließlich über Port-Mapping gelungen. Eine Lösung mit Hilfe des Bridge-Modes kann ich mir aber auch vorstellen. Entscheidend ist, dass die Subdomain auf die selbst vergebene IP-Adresse zeigt und LetsEncrypt diese über Port 443 erreichen kann.

    Es wäre toll, wenn Du das hinkriegen würdest und uns Deine Konfiguration (ggfs. auf Grundlage meiner Konfig und Nomenklatur) hier zur Verfügung stellen könntest. Ein solcher Ansatz würde den Aufbau der Container noch einmal vereinfachen, weil die Ports nicht frei geschaufelt werden müssten.


    Gruß xgadscu

  • Die Mac/iOS dav Sync klaptt so wie in den Anleitungen beschrieben. Wichtig ist nur, dass alles über https laufen muß.

    Z.B. https://cloud.mydomain.com/remote.php/dav (für Kalender, Erinnerungen und Kontakte)

    Die restlichen Daten (User, Pw) legt man beim Anlegen des Accounts mit an

  • boeth


    Zunächst also mal vielen Dank. Es hat tatsächlich funktioniert. Ich schwöre aber, dass ich genau das auch ohne Erfolg ausprobiert habe...muss wohl schon etwas müde gewesen sein.


    Im V13 Manual steht übrigens

    Zitat

    ...

    6. For server, type example.com/remote.php/dav/principals/users/USERNAME/
    7. Enter your user name and password.

    ...


    Da das nicht ging, und für die Android Synchronisation auch deine Notation angegeben ist, hatte ich das auch probiert, aber.. na ja.Auf jeden Fall freue ich mich, das jetzt alles geht und danke für den Hinweis.


    Gruß quasimodoz


    Edit: Iphone mit Zicken


    Heute scheint mein Iphone mal wieder in einer nicht besonders guten Tagesform zu sein. Nach dem Löschen der alten Accounts wollte ich neue anlegen. Und wieder habe ich das gleiche Problem, dass mir beim Anlgen des Account gemeldet wird: "Verbindung über SSL unmöglich"...


    Ich glaube ich schmeiße das Ding auf den Müll....

    Einmal editiert, zuletzt von quasimodoz () aus folgendem Grund: Ergänzung.

  • Hallo zusammen, ich hab gerade mal deine Anleitung überflogen und soweit sieht das für mich als relativer Webserver Neuling eigentlich recht einfach umzusetzen aus :D Wenn ich das richtig sehe, läuft ja dann lokal auf dem NAS als Docker Container der Let's Encrypt Service, richtig? Ich habe bei meinem Hoster die Möglichkeit schon für die Subdomains direkt SSL über Let's Encrypt verschlüsseln zu lassen, kann ich diese Zertifikate theoretisch auch für Nextcloud nutzen? So würde ich mir gerne den weiteren Dienst auf meinem NAS sparen.


    Edit: Ich hab das ganze mal für meine aktuelle Subdomain getestet die auf meinen DynDNS verweist, funtkioniert so nicht wie ich mir das gedacht habe. Geht nur wenn die Domain auch auf die Server des Anbieters verweist, macht ja auch absolut Sinn. Also richte ich das erst mal mit deiner Anleitung ein :thumbup:

    Einmal editiert, zuletzt von White_Helix ()

  • Anscheinend kann ich den Post nur einmal bearbeiten, deswegen der Doppelpost. Zugriff von extern läuft, nur von intern haut das noch nicht ganz hin. Mit der Angabe auf der Seite vorher mit IP-Adresse:4080 usw. wird die Verbindung vom NAS immer abgelehnt. Ich hab auch in der Config-Datei den Port 4080 nicht gefunden, ich geh mal davon aus das ich den Eintrag selber setzten muss? Perfekt wäre noch der Zugriff lokal über die App, die will ja aber zwingend HTTPS haben. Habt ihr da Hinweise wie ich das auch noch hin bekomme?

  • Ist es nicht so, dass wenn man Netzwerk von Containern in Bridge-Mode laufen lässt und andere (feste) IPs vergibt, dann gibt es keine Kollisionen mit Port 80/433 auf Qnap?

    das würd mich auch brennend interessieren, weil dann migriere ich meine bestehende nextcloud auf das qnap mit docker :)

    aber ich würde gerne meine 2te netzwerkkarte damit versehen, habe dorten ein virtuellen switch der in meienr DMZ hängt.

    also wenn da jemand was hat, dann bitte her damit :)

  • Bei mir hat auch alles super geklappt. Eine Frage habe ich dennoch: Ist es nachträglich möglich, einen anderen Port zu wählen anstatt Port 80? Auch wenn dann die automatische Verlängerung des LetsEncrpyt nicht geht.

  • Code
    proxy_1 | dockergen.1 | 2018/09/16 23:18:59 Contents of /etc/nginx/conf.d/default.conf did not change. Skipping notification 'nginx -s reload'

    kann mir jmd. damit helfen?! der proxy container mit nginx wird durchgehend neugestartet?!

  • Hallo, bei mir hat soweit auch alles geklappt, bis auf Collabora. Ich finde den Fehler nicht. Muss aber gestehen, dass mir der Punkt:

    Zitat

    und einmal als Dateiname auf die von Dir erstellte SubDomain umbenennen.

    nicht ganz klar ist. Ich habe überall das office.example.com durch meine Adresse ersetzt. In der Console von Collabora steht


    Ich habe bereits mehrmals in Nextcloud die Adresse bei Collabora online bestätigt. Habe ich etwas übersehen?


    Ist es des Weiteren möglich, einen SqlDumper zu integrieren? Ich habe eine nextcloud Installation, die ich integrieren würde.

    2 Mal editiert, zuletzt von RainerBegeistert () aus folgendem Grund: Ergänzung

  • Hallo an Alle die hier mitlesen.


    Das Toturial ist wirklich gut geschrieben. Danke dafür. Allerdings führt es bei mir nicht zum Erfolg. Ich scheitere beim Schritt docker-compose up -d.


    Der Befehl wird ausgeführt aber mit folgendem Inhalt abgebrochen.


    Die NAS TS-328 ist in den Standardeinstellungen und läuft mit der Software 4.3.5.0728.


    Eine Abweichung zu dem Tutorial habe festgestellt. Die Freigabelaufwerke werden bei mir unter /share/CA_CACHEDEV1_DATA erstellt und nicht unter /share/CACHEDEV1_DATA.


    Hat dieses Problem schon jemand lösen können oder eine Idee für mich?


    Danke



    Hallo zusammen


    Ich nochmal. Ich habe das Problem mit der Fehlermeldung gelöst. Die NAS hatte die Änderungen am Port 80 nicht korrekt übernommen und deshalb war dieser noch belegt.


    Jetzt läuft aber immer noch nicht Alles rund.


    Der Container nextcloud_db_1 kommt nicht hoch sondern startet nur kurz. In der Konsole sehe ich folgendes:

    Code
    2018-10-19 19:02:03 0 [Note] InnoDB: Number of pools: 1
    2018-10-19 19:02:03 0 [Note] InnoDB: Using generic crc32 instructions
    2018-10-19 19:02:03 0 [Note] InnoDB: Initializing buffer pool, total size = 256M, instances = 1, chunk size = 128M
    2018-10-19 19:02:04 0 [Note] InnoDB: Completed initialization of buffer pool
    2018-10-19 19:02:04 0 [Note] InnoDB: If the mysqld execution user is authorized, page cleaner thread priority can be changed. See the man page of setpriority().
    2018-10-19 19:02:04 0 [Warning] InnoDB: Failed to set O_DIRECT on file./ibdata1; OPEN: Invalid argument, continuing anyway. O_DIRECT is known to result in 'Invalid argument' on Linux on tmpfs, see MySQL Bug#26662.
    2018-10-19 19:02:04 0 [ERROR] InnoDB: Header page consists of zero bytes in datafile: ./ibdata1, Space ID:0, Flags: 0. Please refer to http://dev.mysql.com/doc/refman/5.7/en/innodb-troubleshooting-datadict.html for how to resolve the issue.
    2018-10-19 19:02:04 0 [ERROR] InnoDB: Corrupted page [page id: space=0, page number=0] of datafile './ibdata1' could not be found in the doublewrite buffer.
    2018-10-19 19:02:04 0 [ERROR] InnoDB: Plugin initialization aborted with error Data structure corruption


    Die Container nextcloud_letsencrypt-companion_1 und nextcloud_proxy_1 kommen auch nicht hoch und schmeißen in er Konsole folgenden Fehler:

    Code
    standard_init_linux.go:185: exec user process caused "exec format error"

    Kann dabei jemand helfen?



    Hallo nochmal


    Nach einer durchzechten Nacht habe ich die Lösungen für meine oben beschriebenen Probleme gefunden und Nextcloud läuft.


    1. Anlegen der Freigabelaufwerke unter /share/CA_CACHEDEV1_DATA und nicht/share/CACHEDEV1_DATA


    Dabei handelt es sich mit hoher warscheinlichkeit um ein Problem welches ich mir selber geschaffen habe, durch die ersten Versuche Nextcloud zu installieren unter Zuhilfenahme von Anleitungen die auf den Anderen großen NAS-Hersteller bezogen waren. Da ich meine NAS noch nicht im Produktiveinsatz hatte, konnte ich sie Auf Werkseinstellungen zurücksetzen. Danach habe ich diese Anleitung erneut ausgeführt und das Problem im Container nextcloud_db_1 war erledigt.

    Das zweite Problem mit Container nextcloud_letsencrypt-companion_1 und nextcloud_proxy_1 war damit aber noch nicht behoben. Aber ach dazu habe ich eine Lösung gefunden.

    2. standard_init_linux.go:185: exec user process caused "exec format error"

    Soweit ich herausfinden konnte weist diese Fehlermeldung darauf hin, dass die NAS-Prozessorarchitektur nicht zum Dockercontainer passt. In meinem Fall einer TS-328 handelt es sich 64Bit Arm. Die beiden Images jrcs-letsencrypt-nginx-proxy-companion und jwilder-nginx-proxy sind für x86 Architektur.

    Um jetzt Nextcloud mit dieser Anleitung unter Arm-basierten NAS zu nutzen ändert ihr in der Datei docker-composer.yml die Zeile image: jrcs/letsencrypt-nginx-proxy-companion in image: budry/jrcs-letsencrypt-nginx-proxy-companion-arm . Im Verzeichnis proxy ändert ihr in der Datei Dockerfile die Zeile FROM jwilder/nginx-proxy:alpine zu FROM budry/jwilder-nginx-proxy-arm .


    Grüße

  • Hi,


    zuerst einmal: danke für die Dockeranleitung. Habe die Version vom 20. Juli mit Collabora teilweise (nur per http, KEIN https) am Laufen. Ich bin mit meiner vorherigen Instanz vom Raspberry Pi zur QNAP damit umgezogen.


    1) Ich habe Schwierigkeiten mit der Ausstellung des LE-Zertifikates: wenn der LE-Companion-Container "./force-renew" aufruft, meldet der Log des proxy-Containers:

    Code
    stat() "/usr/share/nginx/html/.well-known/acme-challenge/<hash>" failed (13: mission denied), client: 66.133.109.36, server: nextcloud.ossoelmi.berlin, request: "GET /.well-known/acme-challenge/<hash> HTTP/1, host: "nextcloud.ossoelmi.berlin"  

    Der Companion beendet daraufhin seine SSL-Zert-Anfrage mit:

    Code
    2018-10-25 09:12:28,194:ERROR:simp_le:1446: CA marked some of the authorizations as invalid, which likely means it could not access http://example.com/.well-known/acmeallenge/X. Did you set correct path in -d example.com:path or --default_root? Are all your domains accessible from the internet? Please check your domains' DNS entries our host's network/firewall setup and your webserver config. If a domain's DNS entry has both A and AAAA fields set up, some CAs such as Let's Encrypt will perform the allenge validation over IPv6. If your DNS provider does not answer correctly to CAA records request, Let's Encrypt won't issue a certificate for your domain (see https letsencrypt.org/docs/caa/). Failing authorizations: https://acme-v01.api.letsencrypt.org/acme/authz/<hash>                        
    
    Challenge validation has failed, see error log.      

    Zum Testen der Verbindung habe ich im Ordner "/usr/share/nginx/html/.well-known/acme-challenge/" des proxy-Containers (0x755) die Datei "test" angelegt. Rufe ich diese von einem x-beliebigen Client via wget ab, bekomme ich die folgende Antwort:

    Code
    wget http://nextcloud.ossoelmi.berlin/.well-known/acme-challenge/test
    converted 'http://nextcloud.ossoelmi.berlin/.well-known/acme-challenge/test' (ISO-8859-15) -> 'http://nextcloud.ossoelmi.berlin/.well-known/acme-challenge/test' (UTF-8)
    --2018-10-25 11:07:51--  http://nextcloud.ossoelmi.berlin/.well-known/acme-challenge/test
    Aufl▒sen des Hostnamen ▒nextcloud.ossoelmi.berlin (nextcloud.ossoelmi.berlin)▒... 77.14.102.249
    Verbindungsaufbau zu nextcloud.ossoelmi.berlin (nextcloud.ossoelmi.berlin)|77.14.102.249|:80... verbunden.
    HTTP-Anforderung gesendet, warte auf Antwort... 404 Not Found
    2018-10-25 11:07:51 FEHLER 404: Not Found.

    Im Log des proxy-Containers bleibt's beim permission denied (s. o.)


    Rufe ich via wget die nextcloud per http bekomme ich die index.html ausgeliefert:


    Folgerung: Trotz DynDNS (strato) sind die DNS-settings korrekt. Was mache ich dann falsch?


    2) Das problem von "boeth" (Beitrag vom 25. Juli 2018) hatte ich exakt so ebenfalls. Nach dem copy wie beschrieben läuft es gut.



    Vielen Dank für Eure Hilfe. Ich steige gerade ins Thema Docker etc ein und finde es enorm spannend! Leider fehlen mir vermutlich noch ein paar Basics..


    Viele Grüße

    Michael



    Mithilfe von

    Code
    bash-4.4# chown -R nginx:root /usr/share/nginx/html/ 

    auf dem Proxy-Container bekomme ich die http://nextcloud.ossoelmi.berl…known/acme-challenge/test per wget und ausgeliefert.


    Trotzdem schlägt der SSL-Abruf vom LE-Container weiterhin fehl. Das Problem scheint der ISP / Domain-Hoster (Strato) zu verursachen: Strato scheint Ports zu blocken, die für Lets Encrypt benötigt werden: https://strato.de/blog/dsgvo-ssl/


    Allerdings nur im WebHosting-Bereich. Strato-Kunden im V-Server-Bereich können wohl Lets Encrypt Zertfikate ausstellen.


    Was mich wirklich irritiert: denn bis vor wenigen Tagen hatte ich ein valides LE-Zertifikat auf meinem Raspberry für exakt diese Domain (nextcloud.ossoelmi.berlin) und die Domain liegt seit ca 2 Jahren bei Strato!?


    Hat jemand Erfahrungen mit Strato, WebHosting & SSL?


    Nachtrag: Je mehr ich darüber nachdenke, desto weniger wahrscheinlich ist es, dass tatsächlich der ISP das Ausstellen der Zertifikate verhindert. Schließlich hoste ich die Container nicht bei Strato, sondern habe dort lediglich die Domain registriert. Vermutlich bietet strato für diejenigen keine LE-Zertifikate an, die ihre Files auf dem WebStorage von strato liegen haben.

  • Hallo!

    ich habe mir mit deiner Hilfe ein docker-compose.yml zusammengestellt. Und ja: ich mache das nicht auf einem qnap sondern auf einem ubuntu-server :)

    Leider scheitere ich schon beim "docker-compose up -d".

    Ich erhalte immer eine Fehlermeldung bei der MariaDB und nginx....


    Code
    ERROR: for 5f47dfa859db_nextcloud_proxy_1  Cannot start service proxy: error while creating mount source path '/mnt/raid/Docker-Volumes/nextcloud/nginx-html': mkdir /mnt/raid: read-only file system
    ERROR: for db  Cannot start service db: error while creating mount source path '/mnt/raid/Docker-Volumes/nextcloud/mariadb': mkdir /mnt/raid: read-only file system
    ERROR: for proxy  Cannot start service proxy: error while creating mount source path '/mnt/raid/Docker-Volumes/nextcloud/nginx-html': mkdir /mnt/raid: read-only file system


    Die Rechte meines Zielverzeichnisses sehen so aus:

    Code
    drwxrwx--x 2 bernd root  4096 Nov  4 11:24 Docker-Volumes/


    Gruß Bernd