NextCloud Datenverzeichnis

  • Hallo zusammen,


    ich versuche derzeit von einem anderen Webhoster meine NextCloud umzuziehen. Soweit hat auch alles geklappt, aber der Pfad vom Dateiverzeichnis ist wohl nicht valide. Egal wie ich das Datenverzeichnis eingestellt habe, es hat nicht richtig geklappt.


    Ich habe eine Datei datadirectory.config.php erstellt und folgendes eingefügt, damit es klappt:


    PHP
    <?php
    if (\OC::$CLI) {
        $CONFIG['datadirectory'] = '/httpdocs/folder/data-files';
    } else {
        $CONFIG['datadirectory'] = '/var/www/vhosts/hosting14xxx.a2ebb.netcup.net/httpdocs/folder/data-files';
    }


    Damit hat es auch super geklappt, allerdings erhalte ich folgende Fehlermeldung:


    Quote

    Die Ausführung des Cron-Jobs über die Kommandozeile war nicht möglich. Folgende technische Fehler sind aufgetreten:

    • Ihr Datenverzeichnis ist ungültig. Stellen Sie sicher, dass eine Datei ".ocdata" im Wurzelverzeichnis des data-Verzeichnisses existiert

    Die Daten werden in der Cloud dennoch angezeigt. Hat NextCloud bereits jemand eingerichtet und kann mir Info geben was genau ich falsch mache?


    Grüße

  • Klappt dies auch, wenn das Datenverzeichnis außerhalb des DocumentRoots ist?

    Wenn Du den Pfad entsprechend anpasst, damit die relative Angabe stimmt: Ja!


    __dir__ bezieht sich in diesem Fall auf den Ordner, in dem die jeweilige PHP-Datei liegt. Also der config Ordner. Mit ../ ist jeweils eine Ebene höher gemeint.


    Die wichtigere Frage ist allerdings: Wo genau liegt Dein Datenverzeichnis? Vielleicht funktioniert es deshalb nicht, weil der open_basedir nicht dazu passt?


    Siehe auch: https://www.netcup-wiki.de/wiki/Plesk_Onyx_Panel_Webhosting#PHP-Einstellungen

    "Wer nur noch Enten sieht, hat die Kontrolle über seine Server verloren." (Netzentenfund)

  • Hi,


    danke erstmal.


    das Datenverzeichnis liegt in:

    Code
    /httpdocs/folder/data-files

    Die Cloud selber befindet sich in

    Code
    /httpdocs/folder/cloud

    data-files befindet sich also einen Ordner ÜBER der Cloud. Das habe ich absichtlich so gemacht.


    Das scheint über die data.config.php wie von Dir erwähnt auch nicht zu klappen - oder ich find es gerade noch nicht raus. Was genau muss ich im open_basdir denn beachten? Der steht bei mir auf Standard.


    Gruß

  • Wenn die Standardeinstellung (mit WEBSPACEROOT) ausgewählt ist, sollte es mal nicht am open_basedir liegen. :)


    Andere Frage: Hast Du den Original data Ordner an diese neue Position verschoben oder einfach einen neuen leeren Ordner erstellt?


    Probiere es mal damit:

    PHP: config/datadirectory.config.php
    <?php
    
    $CONFIG['datadirectory'] = realpath(__dir__ . '/../../data-files');

    Das sollte die Ebene außerhalb des Nextcloud-Ordners berücksichtigen.

    "Wer nur noch Enten sieht, hat die Kontrolle über seine Server verloren." (Netzentenfund)

  • Ist das ein Webhosting oder Root-Server/VPS? Anyway, dein Data-Verzeichnis muss innerhalb eines Ordners liegen, der in deiner open_basedir Einstellung freigegeben ist (auch das Data-Verzeichnis selbst kann freigegeben sein). Oder open_basedir ist komplett deaktiviert - was im netcup-Webhosting nicht möglich ist, wohl aber auf einem Server. Das dürfte die performanteste Variante sein, weil ansonsten eben bei jedem Dateizugriff per PHP erst mal geprüft wird, ob der Zugriff erlaubt ist oder nicht.


    Im Webhosting ist die Standardeinstellung so, dass nur Dateien unterhalb des document root zugänglich sind und ein paar notwendige Systemverzeichnisse. Um die Einstellung mit Webspace-Root zu bekommen muss man das in den PHP-Einstellungen so umstellen.

  • Danke erst einmal. Ich habe das Originalverzeichnis kopiert. Das klappt so tatsächlich erst wie folgt nachdem ich die Änderung vorgenommen habe:


    - Ich kann mich in die NextCloud einloggen und Daten (Fotos, etc) einsehen

    - /usr/local/php74/bin/php occ maintenance:mode --off klappt auch


    Allerdings wird mir im Adminbereich der NextCloud weiterhin angezeigt:

    Quote

    Die Ausführung des Cron-Jobs über die Kommandozeile war nicht möglich. Folgende technische Fehler sind aufgetreten:

    • Ihr Datenverzeichnis ist ungültig. Stellen Sie sicher, dass eine Datei ".ocdata" im Wurzelverzeichnis des data-Verzeichnisses existiert.

    Ich kann das nicht nachvollziehen, denn: Ich sehe die Daten doch! Wieso sagt NextCloud das Verzeichnis ist falsch? Und die .ocdata ist auch Verfügbar


    Grüße.

  • Anyway, dein Data-Verzeichnis muss innerhalb eines Ordners liegen, der in deiner open_basedir Einstellung freigegeben ist (auch das Data-Verzeichnis selbst kann freigegeben sein).

    Derzeit liegt das Data-Verzeichnis außerhalb vom DocumentRoot, aber die Dateien werden in der Cloud trotzdem angezeigt. Der Pfad ist entsprechend bpsw.

    Code
    /var/www/vhosts/hosting14xxx.a2ebb.netcup.net/httpdocs/folder/data-files

    Die Cloud selber liegt in .../folder/cloud


    Also scheinbar kommt die Cloud damit doch klar?

  • Wie sieht der Cronjob aus? Bei mir hat es geklappt mit PHP-Skript ausführen und Einstellung PHP 7.4. Den Pfad zur cron.php habe ich dann analog zum dort angezeigten Beispielpfad eingegeben, also ausgehend vom Rootverzeichnis der Chroot-Umgebung in der Konsole.

  • Mysteriös.. Ich habe jetzt mal über die Konsole


    /usr/local/php74/bin/php cron.php


    ausgeführt und der Fehler ist erstmal weg. Wenn ich die Datei direkt über den Browser aufrufe, kriege ich im Response auch success zurück.


    Wie versucht NextCloud den Skript denn auszuführen? Muss ich evtl. unter "Geplante Aufgaben" irgendeinen Cronjob anlegen?


    Btw: Kann ich bei netcup die Sekunden für den Strict-Transport-Security-HTTP-Header nicht über das Webpanel setzen?

  • ich klinke mich hier mal ein

    Mein Problem ist ähnlich

    Installiert ist die NC20 im WH


    Im WebUI sehe ich allerdings keine Fehler.

    Da mein eigentliches Problem ist, Daten aus der alten NC(v13) in diese zu bekommen ,

    habe ich erst gemerkt , dass der cron garnicht läuft.

    eigentlich will ich die per scp verschobenen Daten dem System bekannt machen.

    Wenn ich den cron ausführen will, sagt er mir .ocdata ist nicht vorhanden.

    ich habe das data-Verzeichnis nicht verlegt, es ist immer noch in WEBROOT/data.




    Quote

    bash-5.0$ /usr/local/php74/bin/php cron.php

    Your data directory is invalid

    Ensure there is a file called ".ocdata" in the root of the data directory.

    Cannot create "data" directory

    This can usually be fixed by giving the webserver write access to the root directory. See https://docs.nextcloud.com/ser…?to=admin-dir_permissions

    Natürlich ist die Datei im data-Verzeichnis vorhanden.

    und www-data write access zu geben fällt auch weg

    It's me, only me, pure michi 🦆

    RS: ja:thumbup: VPS: yep:thumbup: ARM: sicher:thumbup: WH: klar :thumbup:

    Domains: auch:thumbup:

  • Ich hänge mich hier mal ran, hab vermutlich dasselbe oder ein ähnliches Problem, da beim Ausführen meines cron-Jobs für die nextcloud folgender Fehler auftritt:


    Your data directory is invalid.
    Ensure there is a file called ".ncdata" in the root of the data directory. It should have the content: "# Nextcloud data directory"

    Cannot create "data" directory.
    This can usually be fixed by giving the web server write access to the root directory. See https://docs.nextcloud.com/ser…?to=admin-dir_permissions


    Wie kann ich das Problem beheben? Mein nextcloud-Datenordner (nextcloud_data) liegt auf derselben Ebene wie der httpdocs, die .ncdata ist im nextcloud_data vorhanden. Hat jemand eine Idee?

  • Du hast das Verzeichnis (nextcloud_data) vermutlich per SSH, Dateimanager, FTP angelegt.


    Vergleich mal die Gruppenzugehörigkeit und Berechtigung dieses Verzeichnis mit der von hhtpdocs. Vermutlich fehlt hier nur das x-Flag für Others

  • Mein nextcloud-Datenordner (nextcloud_data) liegt auf derselben Ebene wie der httpdocs […]

    Also wahrscheinlich außerhalb des open_basedir? Welche Einstellung hast Du denn dafür aktuell in Plesk ausgewählt?


    Und hast Du die Konfigurationsanpassung aus diesem Thread (siehe Beitrag #2) gesetzt? Wie sieht die genau bei Dir aus?

    "Wer nur noch Enten sieht, hat die Kontrolle über seine Server verloren." (Netzentenfund)

    Edited once, last by KB19 ().

    Thanks 1
  • Danke für eure Rückmeldungen!

    Du hast das Verzeichnis (nextcloud_data) vermutlich per SSH, Dateimanager, FTP angelegt.

    Vergleich mal die Gruppenzugehörigkeit und Berechtigung dieses Verzeichnis mit der von hhtpdocs. Vermutlich fehlt hier nur das x-Flag für Others

    Nein, ich habe das Verzeichnis direkt beim Einrichten der nextcloud dort anlegen lassen. Es befand sich alle schon immer an dieser Stelle und wurde nicht nachträglich dorthin verschoben. Die Berechtigungen habe ich schon überprüft und testweise auch komplett alle Berechtigungen vergeben, was das Problem allerdings auch nicht löst.


    Also wahrscheinlich außerhalb des open_basedir? Welche Einstellung hast Du denn dafür aktuell in Plesk ausgewählt?

    Und hast Du die Konfigurationsanpassung aus diesem Thread (siehe Beitrag #2) gesetzt? Wie sieht die genau bei Dir aus?

    An eine Änderung des open_basedir habe ich mich bisher nicht herangetraut, steht alles noch auf Standard. Ist hier tatsächlich noch eine Änderung erforderlich?

    Ich habe für die nextcloud eine Subdomain angelegt: nc.meine-domain.de

    Die nextcloud-Dateien befinden sich dort direkt im httpdocs, der Weg zur config ist also nc.meine-domain.de/httpdocs/config/config.php

    Mein Daten Verzeichnis liegt dementsprechend hier: nc.meine-domain.de/nextcloud_data


    Ich hatte jetzt testweise nach den Infos aus diesem Thread im config-Verzeichnis eine datadirectory.config.php mit folgendem Inhalt angelegt:

    PHP
    <?php
    
    $CONFIG['datadirectory'] = realpath(nc.meine-domain.de/httpdocs/config/ . '/../../nextcloud_data');

    Dies führt allerdings nicht zum Erfolg und bedeutet darüber hinaus, dass sich die nextcloud überhaupt nicht mehr erreichen lässt.

    Mit den verschiedenen Ebenen ../ hatte ich ebenfalls schon erfolglos etwas gespielt.


    Was mache ich hier noch falsch?

  • Du musst entweder open_basedir auf die andere Variante mit WEBSPACE_ROOT umstellen oder deine datadirectory innerhalb der document root der Domain haben, also z.B. das Nextcloud Standardverzeichnis belassen. Sonst kann PHP nicht auf die Daten zugreifen.

  • Ich hatte jetzt testweise nach den Infos aus diesem Thread im config-Verzeichnis eine datadirectory.config.php mit folgendem Inhalt angelegt:

    PHP
    <?php
    
    $CONFIG['datadirectory'] = realpath(nc.meine-domain.de/httpdocs/config/ . '/../../nextcloud_data');

    Dies führt allerdings nicht zum Erfolg und bedeutet darüber hinaus, dass sich die nextcloud überhaupt nicht mehr erreichen lässt.

    Das __dir__ ist eine magische Konstante, die kannst Du nicht einfach durch einen "String" (bzw. ohne Anführungszeichen eher eine nicht existierende Konstante) ersetzen. Gemeinsam mit realpath() und der relativen Pfadangabe soll daraus ein absoluter Pfad gebildet werden.


    Probiere es einmal so, das sollte zu Deiner Beschreibung passen:

    PHP: config/datadirectory.config.php
    <?php
    
    $CONFIG['datadirectory'] = realpath(__dir__ . '/../../nextcloud_data');

    Genau so, nichts ersetzen! :)


    [EDIT] Den open_basedir musst Du in Plesk bei der betroffenen Domain (!) dann trotzdem auf die Einstellung mit WEBSPACEROOT abändern, der nextcloud_data Ordner liegt ja außerhalb Deines DOCUMENT_ROOT.


    Falls es dann noch immer nicht klappt, würde ich einmal einen Blick ins Errorlog des Webservers bzw. von PHP werfen. Das siehst Du entweder direkt in Plesk oder auch über (S)FTP(S), in welchem Ordner weiß ich aber gerade nicht auswendig.

    "Wer nur noch Enten sieht, hat die Kontrolle über seine Server verloren." (Netzentenfund)

    Edited 5 times, last by KB19: PHP-Code nochmals korrigiert und EDIT hinzugefügt ().

    Thanks 1