Next­Cloud im omv-Docker einrichten

Da das NAS-Sys­tem ohne­hin stän­dig läuft, bie­tet es sich an, dort auch Ser­vices zu instal­lie­ren, die vom Inter­net stän­dig erreich­bar sein sol­len. Zur Iso­lie­rung vom rest­li­chen Sys­tem sol­len sie aber als Docker-Con­tai­ner lau­fen. Damit haben die Ser­vices nur Zugriff auf die Res­sour­cen, die unbe­dingt nötig sind.

Dafür wird am Inter­net-Rou­ter wird eine Port­wei­ter­lei­tung vom exter­nen Port 443 auf Port 8000 des NAS-Ser­vers ein­ge­rich­tet. Der Stan­dard-SSL-Port 443 des NAS ist ja bereits von der Web­ober­flä­che des NAS-Sys­tems belegt.

Auf dem NAS horcht ein nginx-Web­ser­ver als rever­se Pro­xy an Port 8000, setzt den ver­schlüs­sel­ten https-Daten­strom in unver­schlüs­sel­tes http um und lei­tet es an den loka­len Port 8001 weiter.

Die Docker-inter­ne Bridge an Port 8001 des NAS-Hosts lei­tet den Ver­kehr an Port 80 des next­cloud-Con­tai­ners wei­ter. Damit lan­det alles, was per https am exter­nen Rou­ter-Port ankommt, schließ­lich unver­schlüs­selt an Port 80 des nextcloud-Systems.

Als Daten­spei­cher für next­cloud dient eine MariaDB, die eben­falls als Docker-Con­tai­ner auf dem NAS läuft und auf dem Host-Port 3306 arbei­tet. Das Watch­tower-Paket sorgt für die auto­ma­ti­sche Aktua­li­sie­rung der Docker-Pakete.

Im ein­zel­nen sind die­se Kon­fi­gu­ra­ti­ons­schrit­te nötig:

  1. Docker-Erwei­te­rung instal­lie­ren (sie­he Docker-Arti­kel)
  2. Docker-Images her­un­ter­la­den für:
    - mariadb
    - nextcloud
    - v2tech/watchtower
  3. MariaDB Con­tai­ner über die omv-GUI star­ten. Fol­gen­de Para­me­ter eintragen:
    - Name: mariadb
    - Restart Poli­cy: unless-stop­ped
    - Netz­wer­mo­dus: Host
    - Unge­bungs­va­ria­ble MYSQL_ROOT_PASSWORD=xxx
  4. MyS­QL Nut­zer für next­cloud in der Docker-Shell anle­gen:
    host# docker exec -it mariadb bash
    docker# mysql -u root -p xxx
    mysql# create user nextcloud@localhost identified by 'yyy';
    mysql# create user nextcloud@'%' identified by 'yyy';
    mysql# grant all privileges on nextcloud.* to nextcloud@localhost;
    mysql# grant all privileges on nextcloud.* to nextcloud@'%';
  5. Next­cloud Con­tai­ner über die omv-GUI star­ten. Fol­gen­de Para­me­ter eintragen:
    - Name: next­cloud
    - Restart Poli­cy: unless-stop­ped
    - Netz­werk­mo­dus: Bridge
    - Host Name: cloud​.home​.kunz​.de
    - Port 0.0.0.0:8001 -> Con­tai­ner Port 80/tcp
    - Con­tai­ner Dir /var/www/html -> Host Dir /cloud
  6. Nginx rever­se Pro­xy in der omv-GUI einrichten:
    - Erwei­te­rung open­me­diav­ault-nginx installieren
    - Diens­te -> nginx -> Ein­stel­lun­gen -> Aktivieren
    - Diens­te -> nginx -> Ser­ver ->Hin­zu­fü­gen
    - Aktivieren
    - SSL aktivieren
    - Port: 8000
    - Zer­ti­fi­kat: Let’s Encrypt
    - Only use SSL
    - Zusätz­liche Optionen:
    location / {
      proxy_pass http://127.0.0.1:8001;
      proxy_http_version 1.1;
      proxy_set_header Host $http_host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Proto $scheme;
      proxy_redirect http:// https://;
    }

Quel­len und Verweise:

  1. Next­cloud ins NAS, c’t 10/2018 S. 142 ff
  2. Umbau­an­lei­tung: Docker-Con­tai­ner für Haus- und Heim­ser­ver, c’t 152017 S.110ff, Feh­ler­be­rei­ni­gung unter gist​.git​hub​.com

17 Kommentare

  1. Hal­lo Jörg,
    Dein Bei­trag ist inter­es­sant und ich habe schon lan­ge nach die­ser Mög­lich­keit gesucht.
    Lei­der habe ich fol­gen­des Pro­blem und Du kannst mir viel­leicht dabei helfen.
    Ich habe seit über einem Jahr mein OMV am lau­fen und bin voll zufrieden.
    Ich habe mein OMV über Docker erwei­tert und las­se dabei eini­ge Con­tai­ner laufen:
    - Plex
    - Unifi
    - TVHeadend
    - Nextcloud

    Bis­her war es so, dass ich die ein­zel­nen Sites über eine Port­wei­ter­lei­tung von außen ange­spro­chen habe.
    Das gan­ze natür­lich über SSL mit Let­sen­crypt, abgesichert.
    z.B.
    https://​myDo​main​.spdns​.de:0000
    Hat auch super funktioniert.

    Schö­ner wäre es aber wenn ich das gan­ze nun über Namen anspre­chen könnte,
    z.B.
    https://​myDo​main​.spdns​.de/​n​e​x​t​c​l​oud
    https://​myDo​main​.spdns​.de/​U​n​ifi
    usw.

    Ich habe Dei­nen Arti­kel durch­ge­ar­bei­tet und die Umlei­tung funk­tio­niert auch soweit.
    Ich kann von Aus­sen mei­ne Next­cloud ansprechen.
    Lei­der aber nur über mei­ne Domain.
    https://​myDo​main​.spdns​.de

    Ich sit­ze seit 2 Tagen an mei­nem Ser­ver und habe schon das hal­be Inter­net ausgelesen.
    Ich kom­me aber ein­fach nicht weiter.
    Kannst Du mir hier wei­ter­hel­fen oder habe ich da einen Denkfehler?

    Vie­le Grüs­se aus Bayern.
    Josef

    1. Hal­lo Josef, ich bin nicht ganz sicher, ob ich dein Pro­blem ver­stan­den habe. Du willst next­cloud also über https://​myDo​main​.spdns​.de/​n​e​x​t​c​l​oud errei­chen kön­nen? Das ist etwas ande­res als die Kon­struk­ti­on mit Rever­se Pro­xy oben. Du müss­test dann per Redi­rect eine Sei­te dei­nes Web-Ser­vers auf den ent­spre­chen­den Port des next­cloud-Docker-Images umleiten.
      Eher im Sin­ne die­ser Anlei­tung wäre eine Adres­se wie https://​next​cloud​.myDo​main​.spdns​.de, also eine Sub­do­main. Die­ser Name lässt sich dann mit dem Rever­se Pro­xy auf den next­cloud-Con­tai­ner map­pen. Wich­tig ist, dass das DNS die Sub­do­main dann auf die Adres­se des Rever­se-Pro­xy-Ser­vers auflöst.

    2. Hal­lo Jörg,

      du hast geschrie­ben „Bis­her war es so, dass ich die ein­zel­nen Sites über eine Port­wei­ter­lei­tung von außen ange­spro­chen habe.”
      Wie genau hast du das rea­li­siert? OMV und Docker sind ziem­lich neu für mich.
      Ich habe Plex und Next­cloud­Pi als Docker ein­ge­rich­tet und möch­te auf Next­cloud bzw Next­cloud­Pi jetzt auch von außer­halb des Netz­werks zugreifen.
      An mei­nen Fritz­box-Ein­stel­lun­gen habe ich die Ports 80 und 443 frei­ge­ge­ben, aller­dings gelingt es mir nicht, DNS ein­zu­rich­ten (DNS hat­te ich an ande­rer Stel­le schon ein­mal ein­ge­rich­tet, ist also nicht kom­plett neu für mich).

      Wie sahen die ein­zel­nen Schrit­te bei dir aus? Ich wür­de mich über eine Ant­wort freuen 🙂

      Vie­le Grüße
      Leo

      1. Hal­lo Leo,
        Die Aus­sa­ge zu den Port­wei­ter­lei­tun­gen kam nicht von mir, son­dern aus einem Kommentar.
        Wenn Du nur einen ein­zi­gen Ser­vice ver­füg­bar machen willst, reicht es, in der Fritz­box einen DynDNS-Ser­vice ein­zu­rich­ten und Port 443 auf dei­nen Ser­ver wei­ter­zu­lei­ten (der natür­lich dann auch auf 443 und https hören muss). Dann ist dein Ser­ver vom Inter­net aus über den per DynDNS ein­ge­rich­te­ten Host­na­men erreichbar.
        Wie DynDNS ein­ge­rich­tet wird, fin­dest Du im Fritz-Hand­buch. Im Arti­kel https://​edv​.mueg​gel​land​.de/​d​y​n​d​n​s​-​e​r​s​a​t​z​-​f​r​e​e​d​n​s​-​e​i​n​r​i​c​h​t​en/ ist es für einen Rou­ter ohne DynDNS-Unter­stüt­zung beschrieben.
        Docker und rever­se Pro­xies brauchst Du nur, wenn Du meh­re­re Ser­vices auf unter­schied­li­chen Host­na­men eines Ser­vers bedie­nen willst. Alle Host­na­men zei­gen dann auf die sel­be Adres­se; der rever­se Pro­xy küm­mert sich dar­um, die Anfra­gen je nach Host­na­me auf die unter­schied­li­chen Ser­vice­s/­Ports/­Do­cker-Con­tai­ner wei­ter­zu­lei­ten. Die DNS-Auf­lö­sung musst Du bei dei­nem Inter­net-Pro­vi­der ein­rich­ten, das ist bei jedem etwas anders gelöst. Am Bei­spiel Hetzner/freedns erklärt es der o.g. Artikel.

        1. Hal­lo Jörg,

          ent­schul­di­ge, da habe ich mich ver­tan! Es war schon zu spät..
          Vie­len Dank für die schnel­le Ant­wort! Dei­ne Aus­füh­run­gen haben mir gehol­fen, das bes­ser zu ver­ste­hen. Ich habe es jetzt mit DynDNS hinbekommen.

          Vie­le Grüße
          Leo

    3. Hal­lo Josef,

      du schreibst „Bis­her war es so, dass ich die ein­zel­nen Sites über eine Port­wei­ter­lei­tung von außen ange­spro­chen habe.”
      Wie genau hast du das realisiert?
      OMV und Docker sind für mich ziem­lich neu. Bis­her habe ich Plex und Next­cloud­Pi als Docker eingerichtet.
      Lei­der gelingt es mir nicht, Next­cloud bzw. Next­cloud­Pi von außer­halb des Netz­werks zugäng­lich zu machen.
      Bei mei­ner Fritz­box habe ich die Ports 80 und 443 geöff­net, lei­der funk­tio­niert das nicht.
      Wie waren dei­ne ein­zel­nen Schrit­te als du das gemacht hast?

      Ich freue mich über eine Antwort 🙂

      Vie­le Grü­ße, Leo

  2. Hi,
    woll­te schon Trae­fik als Rever­se Pro­xy für docker ein­set­zen. Aber die Lösung mit dem omv-nginx fin­de ich ange­neh­mer. Klei­ner Tip zu dei­ner con­fig für den nginx-ser­ver, da soll­te man
    „client_max_body_size 1G;” hin­zu­fü­gen. Im Stan­dard ste­hen 10M. Womit datei­en > 10M nicht hoch­ge­la­den wer­den kön­nen das sieht man im nginx an fol­gen­dem Feh­ler Ein­trag „.…cli­ent inten­ded to send too lar­ge body:.…” und das der upload im next­cloud ein­fach ste­hen bleibt. 😉

    Kann dann so aussehen

    client_max_body_size 1G;
    location / {
    proxy_pass http://127.0.0.1:8001;
    proxy_http_version 1.1;
    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-For­ward­ed-For $proxy_add_x_forwarded_for;
    proxy_set_header X-For­ward­ed-Pro­to $sche­me;
    proxy_redirect http:// https://; }

    1. Hal­lo John,
      Dan­ke für den Tipp! Im Moment ist das bei mir noch kein Pro­blem, weil mein next­cloud zur Zeit nur für Kon­tak­te und Kalen­der benutzt wird. Bei Nut­zung als Cloud-Spei­cher aber ganz sicher sinn­voll, sonst hakt’s viel­leicht schon beim ers­ten Filmchen.

  3. Moin,
    dan­ke für die Anlei­tung. Ich habe Next­cloud so zunächst erfolg­reich ein­ge­rich­tet und kann sie über den Brow­ser auch auf­ru­fen (zur Zeit nur im loka­len Netz, weil ich kei­ne Port­wei­ter­lei­tun­gen vom Rou­ter ein­rich­ten kann). Ver­su­che ich jedoch, mich per App auf dem Han­dy oder Desk­top­an­wen­dung anzu­mel­den, bekom­me ich die Feh­ler­mel­dung „400 Bad Request The plain HTTP request was sent to HTTPS port nginx/1.10.3”
    Wor­an liegt das? Ich habe alle Ein­stel­lun­gen so vor­ge­nom­men wie hier beschrieben.

    VG
    Bastian

    1. Das hört sich so an, als ob dei­ne App ver­sucht, sich unver­schlüs­selt anzu­mel­den. Che­cke noch­mal, ob Du für Next­cloud auch die kor­rek­te https:// Adres­se ange­ge­ben hast.

  4. hal­lo jörg, dan­ke für dei­ne anlei­tung, lei­der klemmt es bei mir .…..
    was ich schaffte:
    cloud​.ser​ver​.de
    unter die­ser adres­se (natür­lich anony­mi­siert) läuft omv 4 mit https, let­sen­crypt und docker
    ich habe jetzt next­cloud instal­liert (docker)
    läuft super auf port 444 - ich erhal­te jedoch eine feh­ler­mel­dung bezüg­lich des zer­ti­fi­kats (das schaf­fe ich)
    was ich jetzt dank dei­ner anlei­tung errei­chen woll­te war, dass ich die next­cloud nicht mehr über den port auf­ru­fe son­dern über eine sub­do­main. mein ziel war:
    data​.ser​ver​.de
    lei­der klappt das nach dei­ner anlei­tung gar nicht, ich lan­de immer wie­der auf der log­in­sei­te von omv.
    hst du eine ahnung was ich da noch falsch abge­tippt haben könnte?
    danke

    1. Der Zer­ti­fi­kats­feh­ler ist nor­mal, es ist ja für einen ande­ren Host­na­men ausgestellt.
      Wenn sich omv mel­det, lan­dest Du auf dem Stan­dard-SSL-Port (443). Da stimmt also eine der Port­wei­ter­lei­tun­gen nicht, ent­we­der am Rou­ter, im nginx oder der Docker-Bridge.

  5. Moin.

    Zwei Fra­gen zur Anleitung: 

    1) Host Name: cloud​.home​.kunz​.de ist hier als Sub­do­main kon­fi­gu­riert, rich­tig? Ich müss­te das also anpas­sen an: nextcloud.meine-dyndns-domain.

    Bei let­sen­crypt tra­ge ich mei­ne-dyndns-domain wie­der ein. Was muss bei Web root hin, damit nginx das Zer­ti­fi­kat auch fin­det? Da ste­he ich gera­de auf dem Schlau.

    Vie­len Dank im Voraus!

    Herz­li­che Grüße
    Michael

  6. Hal­lo,
    sehr infor­ma­ti­ver Bei­trag. Ist die­se Lösung der Instal­la­ti­on von next­cloud als Docker auch aktu­ell noch so mög­lich? Das heißt: OMV5 mit aktu­el­len Nginx?
    Im Inter­net fin­det man vie­le Vide­os und Bei­trä­ge bezüg­lich trae­fik, next­cloud, let­sen­crypt und docker (alles zusam­men als Installation).

    1. Das ist jetzt schon fast 3 Jah­re her und läuft inzwi­schen nicht mehr so bei mir. Von daher kann ich dir nicht mit letz­ter Sicher­heit sagen, ob das noch genau so klappt. Aber das sind ja alles qua­si Basis­tech­no­lo­gien, und ich bin sicher, dass auch ein aktu­el­ler nginx noch als rever­se Pro­xy arbei­ten kann und MariaDB und Next­cloud auch als Docker-Images ver­füg­bar sind. Nur die Instal­la­ti­on von Docker hat sich mei­nes Wis­sens in OMV5 gegen­über 4 etwas ver­än­dert, aber das wird ja bei OMV aus­führ­lich beschrieben.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

eins × eins =