NextCloud 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 wei­ter.

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 next­cloud-Sys­tems.

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­to­wer-Paket sorgt für die auto­ma­ti­sche Aktua­li­sie­rung der Docker-Pake­te.

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
    - next­cloud
    - v2tech/watchtower
  3. MariaDB Con­tai­ner über die omv-GUI star­ten. Fol­gen­de Para­me­ter ein­tra­gen:
    - 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 ein­tra­gen:
    - 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 ein­rich­ten:
    - Erwei­te­rung open­me­diavault-nginx instal­lie­ren
    - Diens­te -> nginx -> Ein­stel­lun­gen -> Akti­vie­ren
    - Diens­te -> nginx -> Ser­ver ->Hin­zu­fü­gen
    - Akti­vie­ren
    - SSL akti­vie­ren
    - Port: 8000
    - Zer­ti­fi­kat: Let’s Encrypt
    - Only use SSL
    - Zusätz­li­che Optio­nen:
    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 Ver­wei­se:

  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

9 Antworten auf „NextCloud im omv-Docker einrichten“

  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 hel­fen.
    Ich habe seit über einem Jahr mein OMV am lau­fen und bin voll zufrie­den.
    Ich habe mein OMV über Docker erwei­tert und las­se dabei eini­ge Con­tai­ner lau­fen:
    - Plex
    - Uni­fi
    - TVHea­dend
    - Next­cloud

    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, abge­si­chert.
    z.B.
    https://​myDo​main​.spdns​.de:0000
    Hat auch super funk­tio­niert.

    Schö­ner wäre es aber wenn ich das gan­ze nun über Namen anspre­chen könn­te,
    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 anspre­chen.
    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 aus­ge­le­sen.
    Ich kom­me aber ein­fach nicht wei­ter.
    Kannst Du mir hier wei­ter­hel­fen oder habe ich da einen Denk­feh­ler?

    Vie­le Grüs­se aus Bay­ern.
    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 umlei­ten.
      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 auf­lö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 zugrei­fen.
      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 freu­en 🙂

      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 Kom­men­tar.
        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 erreich­bar.
        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 beschrie­ben.
        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. Arti­kel.

        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 hin­be­kom­men.

          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 rea­li­siert?
      OMV und Docker sind für mich ziem­lich neu. Bis­her habe ich Plex und Next­cloud­Pi als Docker ein­ge­rich­tet.
      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 Ant­wort 🙂

      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 aus­se­hen

    client_max_body_size 1G;
    loca­ti­on / {
    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­war­ded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-For­war­ded-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 Film­chen.

Schreibe einen Kommentar

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