Projekt: Raspberry3 mit own- nextcloud und mehreren Benutzern

Wenn der innerhalb der Schule erreichbar ist dann ist es auch ok. Anders geht es ja leider nicht. Dann müssen wir zum Schuladmin, und uns mit der MAC eine DHCP Reservierung holen. Sehe ich das richtig?
 
jep. wenn ihr den raspberry pi intern betreiben wollt, dann solltet ihr schon auf alle fälle eine fixe ip bekommen.

Hallo32 schrieb:
Das dürfte ein Problem werden. Entweder müsst ihr es wie oben angesprochen mit der IT Abteilung der Schule klären, den PI irgendwo anders platzieren oder eine Lösung per VPN realisieren.

Denkt bitte auch daran, dass der Pi sicher sein sollte, wenn er von außen zu erreichen ist.

Edit: Selbst wenn er nur im Schulnetzwerk verfügbar ist, neigen andere Personen auch gerne mal dazu zu testen ob das System zumindest keine groben Fehler enthält.

hmm ich wüsst nicht wie vpn helfen sollte...
und debian ist schon sicher, keine sorge :) verwendet halt keine standardpasswörter. nicht dass sich jeder auf den pi sshen kann wie es gerade lustig ist
 
Also fixe IP bekommen wir auch nicht. Die wollen keine fremden Geräte.

Wir haben jetzt folgende Lösung:

Zuerst ist der Pi im Schulwlan drin damit wir alles installieren. Dann wird es getrennt.

Danach hängen wir den Pi an einen Accesspoint. Über diesen können dann die Mitschüler die IP aufrufen und sich auf der Seite einloggen.
Dann benötigen wir Duckdns nicht mehr (kein Domänenname mehr).

Und wie ist es jetzt mit dem SSL Zertifikat jetzt? Wird das noch benötigt wenn sich ein Testuser aus der Klasse üben den AC auf der Seite einloggt?
 
Zuletzt bearbeitet:
da_reini schrieb:
hmm ich wüsst nicht wie vpn helfen sollte...
und debian ist schon sicher, keine sorge :) verwendet halt keine standardpasswörter. nicht dass sich jeder auf den pi sshen kann wie es gerade lustig ist

VPN: Verbindung vom Pi zu einen Node außerhalb der Schule aufbauen und diesen von außen zugänglich machen.
Debian: Auch wenn es per Default sicher ist, verhindert es nicht, dass man Sicherheitslücken erzeugen kann. ;)
Ergänzung ()

@svr2009

SSL könnt ihr mit einen selbst erstellen Zertifikat umsetzen, wenn ihr es wollt. Umfang Projekt, Note usw. ;)
Ansonsten könnte man betrachten, was jetzt die Nachteile sind, wenn ihr keine SSL Verbindung nutzt.
 
Zuletzt bearbeitet:
Hallo32 schrieb:
VPN: Verbindung vom Pi zu einen Node außerhalb der Schule aufbauen und diesen von außen zugänglich machen.

achso meinst du das. ja das würde schon gehen... aber ob der aufwand dafür steht. ich würde den pi mit nach hause nehmen. und einfach alles über ssh machen. port 443, 80 und 22 über router freischalten und man hat weder probleme mit wlan, noch port forwarding, noch statischer ip in der schule
 
So, nächste Woche ist wieder Schule und dann geht es ans eingemachte.
Also wir haben uns entschieden den Pi bei einem von uns zu Hause anzuschließen und die Ports am Router zu öffnen.
Aber davor nehmen wir ihn mit zur Schule um alles dort zu konfigurieren.

Mal eine Verständnisfrage über das was wir uns vorstellen:

Ist es durchführbar dass sich auch User auf unserer Nextcloud registrieren können (mit Bestätigungsmail), und wir diese Benutzer als Admins managen?

Und wenn alles fertig ist, können ja die Mitschüler auf unsere Cloudwebseite zugreifen da der Pi zu Hause ist und über eine Domäne (duckdns) erreichbar ist?

Gruß
 
Ich bin beim Googeln gerade über das hier gestolpert: https://github.com/pellaeon/registration

Ich denke das mit der Userregistration würde damit gehen, wie das aber im Detail zu installieren bzw. konfigurieren ist, weiß ich nicht.

Ich hab gerade selbst auf meinem Raspi3 eine Nextcloud 11.x mit Nginx, MariaDB und PHP7.0 (mit php7.0-fpm) zum Laufen gebracht.

Ein paar Dinge die mich als PHP-, Datenbank- und Webserver-Noob ins Stolpern gebracht haben:

- PHP7 soll gegenüber PHP5 massive Performancevorteile haben, so dass man diesen Weg gehen sollte, auch wenn dafür ein paar alternative Paketquellen eingefügt werden müssen. Es ist nicht so schwer.

- Nginx wird von Nextcloud nicht offiziell unterstützt, so dass eine spezielle community-gepflegte Konfiguration nötig ist, damit die Nextcloud läuft. Alternativ kann man sich natürlich auch alles anlesen (PHP Dokumentation, Nginx Dokumentation), aber das Thema scheint recht komplex für Anfänger.

Konfigurationsquelle: https://docs.nextcloud.com/server/9/admin_manual/installation/nginx_nextcloud_9x.html

Diese Config funktioniert auch mit der v11.x, allerdings waren ein paar kleine Anpassungen notwendig.

#!# = meine Kommentare / Anmerkungen

Code:
upstream php-handler {
    #!# Die folgende Zeile mit dem mit '#'-Symbol auskommentieren.
    #server 127.0.0.1:9000;
    #!# Die folgende Zeile mit dem mit '#'-Symbol auskommentieren.
    #server unix:/var/run/php5-fpm.sock;
    #!# Diese Zeile hinzufügen. Bei php7.0 liegt die anzusprechende sock-Datei unter /var/run/php/php7.0-fpm.sock    
    server unix:/var/run/php/php7.0-fpm.sock;
}

server {
    listen 80;
    server_name cloud.example.com;
    # enforce https
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl;
    server_name cloud.example.com;

    #!# Letsencrypt legt das Zertifikat und den Privat Key standartmäßig unter den unten angepassten Pfaden ab.
    ssl_certificate     /etc/letsencrypt/live/cloud.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/cloud.example.com/privkey.pem;

    # Add headers to serve security related headers
    # Before enabling Strict-Transport-Security headers please read into this
    # topic first.
    # add_header Strict-Transport-Security "max-age=15768000;
    # includeSubDomains; preload;";
    add_header X-Content-Type-Options nosniff;
    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Robots-Tag none;
    add_header X-Download-Options noopen;
    add_header X-Permitted-Cross-Domain-Policies none;

    # Path to the root of your installation
    root /var/www/nextcloud/;

    location = /robots.txt {
        allow all;
        log_not_found off;
        access_log off;
    }

    # The following 2 rules are only needed for the user_webfinger app.
    # Uncomment it if you're planning to use this app.
    #rewrite ^/.well-known/host-meta /public.php?service=host-meta last;
    #rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json
    # last;

    location = /.well-known/carddav {
      return 301 $scheme://$host/remote.php/dav;
    }
    location = /.well-known/caldav {
      return 301 $scheme://$host/remote.php/dav;
    }

    # set max upload size
    client_max_body_size 512M;
    fastcgi_buffers 64 4K;

    # Disable gzip to avoid the removal of the ETag header
    gzip off;

    # Uncomment if your server is build with the ngx_pagespeed module
    # This module is currently not supported.
    #pagespeed off;

    error_page 403 /core/templates/403.php;
    error_page 404 /core/templates/404.php;

    location / {
        rewrite ^ /index.php$uri;
    }

    location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)/ {
        deny all;
    }
    location ~ ^/(?:\.|autotest|occ|issue|indie|db_|console) {
        deny all;
    }

    location ~ ^/(?:index|remote|public|cron|core/ajax/update|status|ocs/v[12]|updater/.+|ocs-provider/.+|core/templates/40[34])\.php(?:$|/) {
        include fastcgi_params;
        fastcgi_split_path_info ^(.+\.php)(/.*)$;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_param HTTPS on;
        #Avoid sending the security headers twice
        fastcgi_param modHeadersAvailable true;
        fastcgi_param front_controller_active true;
        #!# Die folgende Zeile funktioniert nicht mit alten Nginx Versionen
        #!# kleiner v1.7.x (die genaue version weiß ich gerade nicht mehr).
        #!# Man kann diese Zeile nun auskommentieren oder eine Modernere 
        #!# Nginx Version installieren. Ich habe mich für Letzteres entschieden.
        #!#
        fastcgi_pass php-handler;
        fastcgi_intercept_errors on;
        fastcgi_request_buffering off;
    }

    location ~ ^/(?:updater|ocs-provider)(?:$|/) {
        try_files $uri/ =404;
        index index.php;
    }

    # Adding the cache control header for js and css files
    # Make sure it is BELOW the PHP block
    location ~* \.(?:css|js)$ {
        try_files $uri /index.php$uri$is_args$args;
        add_header Cache-Control "public, max-age=7200";
        # Add headers to serve security related headers (It is intended to
        # have those duplicated to the ones above)
        # Before enabling Strict-Transport-Security headers please read into
        # this topic first.
        # add_header Strict-Transport-Security "max-age=15768000;
        #  includeSubDomains; preload;";
        add_header X-Content-Type-Options nosniff;
        add_header X-Frame-Options "SAMEORIGIN";
        add_header X-XSS-Protection "1; mode=block";
        add_header X-Robots-Tag none;
        add_header X-Download-Options noopen;
        add_header X-Permitted-Cross-Domain-Policies none;
        # Optional: Don't log access to assets
        access_log off;
    }

    location ~* \.(?:svg|gif|png|html|ttf|woff|ico|jpg|jpeg)$ {
        try_files $uri /index.php$uri$is_args$args;
        # Optional: Don't log access to other assets
        access_log off;
    }
}

- Die Zeile fastcgi_pass php-handler; in der Config oben, wird wie schon beschrieben von älteren Nginx Versionen nicht verstanden. Debians (Raspbians) Ansatz ist es möglichst stabil, sicher und bugfrei zu sein, so dass bei den stable releases oft nur ältere Versionen der Pakete zum Einsatz kommen. Deshalb ist es bei Raspbian (basierend auf Debian 8 Jessie) im Moment so, dass die Version von Nginx bei v1.6.2 und bei PHP v5.2 festhängt, wenn man nur die stable Paketquellen verwendet. Ich habe mich daher entschieden die Raspbian Paketquellen basierend auf Debian 9 Stretch (Testing) einzubinden.

Wie das geht steht hier https://getgrav.org/blog/raspberrypi-nginx-php7-dev unter der Überschrift "Install PHP 7.0" beschrieben. In dem Zuge bietet es sich dann auch gleich an PHP7 mit zu installieren.

Installation ist so z.B. mit
sudo apt-get install -t stretch nginx
bzw.
sudo apt-get install -t stretch php7.0 php7.0-fpm php7.0-gd php7.0-json php7.0-mysql php7.0-curl php7.0-mbstring php7.0-intl php7.0-mcrypt php-imagick php7.0-xml php7.0-zip

Benötigte und empfohlene PHP Module siehe hier:
https://docs.nextcloud.com/server/1...lation/source_installation.html#prerequisites

- falls du mit deinem DynDNS Domainnamen nicht zurfrieden bist, kannst du auch eine kostenlose Domain vorschalten. Ich hab mir dafür bei freenom.com eine kostenlose .tk und .ml Domain registriert, und dann in den DNS einstellungen der Domain einen CNAME Eintrag (CNAME RECORD) auf meine DynDNS Addresse geleitet. Zum Updaten der DynDNS Addresse (bei spdyn.de) benutz ich meine Fritzbox, man kann das aber wohl auch mit Scripten direkt im Linux machen, damit kenn ich mich aber noch nicht aus.

- Um mit Letsencrypt ein Zertifikat zu erstellen, muss der Rechner auf dem das Letsencrypt-script läuft über den Webserver vom Internet aus zu erreichen sein. Ansonsten funktioniert es nicht. Ich würde also erst sicherstellen das deine Domain -> DynDNS Domain -> Schul- bzw. Heimrouter WAN-IP -> Portforwarding -> Raspi Server funktioniert.

Ich hoffe das sind ein paar wertvolle Informationen, die ich hier zusammengeschrieben habe.

Gruß,
L666
 
Zuletzt bearbeitet: (Fehler bei den sudo Befehlen)
LEECH666 schrieb:
Ich bin beim Googeln gerade über das hier gestolpert: https://github.com/pellaeon/registration

Ich denke das mit der Userregistration würde damit gehen, wie das aber im Detail zu installieren bzw. konfigurieren ist, weiß ich nicht.

Ich hab gerade selbst auf meinem Raspi3 eine Nextcloud 11.x mit Nginx, MariaDB und PHP7.0 (mit php7.0-fpm) zum Laufen gebracht.

Ein paar Dinge die mich als PHP-, Datenbank- und Webserver-Noob ins Stolpern gebracht haben:

- PHP7 soll gegenüber PHP5 massive Performancevorteile haben, so dass man diesen Weg gehen sollte, auch wenn dafür ein paar alternative Paketquellen eingefügt werden müssen. Es ist nicht so schwer.

- Nginx wird von Nextcloud nicht offiziell unterstützt, so dass eine spezielle community-gepflegte Konfiguration nötig ist, damit die Nextcloud läuft. Alternativ kann man sich natürlich auch alles anlesen (PHP Dokumentation, Nginx Dokumentation), aber das Thema scheint recht komplex für Anfänger.

Konfigurationsquelle: https://docs.nextcloud.com/server/9/admin_manual/installation/nginx_nextcloud_9x.html

Diese Config funktioniert auch mit der v11.x, allerdings waren ein paar kleine Anpassungen notwendig.

#!# = meine Kommentare / Anmerkungen

Code:
upstream php-handler {
    #!# Die folgende Zeile mit dem mit '#'-Symbol auskommentieren.
    #server 127.0.0.1:9000;
    #!# Die folgende Zeile mit dem mit '#'-Symbol auskommentieren.
    #server unix:/var/run/php5-fpm.sock;
    #!# Diese Zeile hinzufügen. Bei php7.0 liegt die anzusprechende sock-Datei unter /var/run/php/php7.0-fpm.sock    
    server unix:/var/run/php/php7.0-fpm.sock;
}

server {
    listen 80;
    server_name cloud.example.com;
    # enforce https
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl;
    server_name cloud.example.com;

    #!# Letsencrypt legt das Zertifikat und den Privat Key standartmäßig unter den unten angepassten Pfaden ab.
    ssl_certificate     /etc/letsencrypt/live/cloud.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/cloud.example.com/privkey.pem;

    # Add headers to serve security related headers
    # Before enabling Strict-Transport-Security headers please read into this
    # topic first.
    # add_header Strict-Transport-Security "max-age=15768000;
    # includeSubDomains; preload;";
    add_header X-Content-Type-Options nosniff;
    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Robots-Tag none;
    add_header X-Download-Options noopen;
    add_header X-Permitted-Cross-Domain-Policies none;

    # Path to the root of your installation
    root /var/www/nextcloud/;

    location = /robots.txt {
        allow all;
        log_not_found off;
        access_log off;
    }

    # The following 2 rules are only needed for the user_webfinger app.
    # Uncomment it if you're planning to use this app.
    #rewrite ^/.well-known/host-meta /public.php?service=host-meta last;
    #rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json
    # last;

    location = /.well-known/carddav {
      return 301 $scheme://$host/remote.php/dav;
    }
    location = /.well-known/caldav {
      return 301 $scheme://$host/remote.php/dav;
    }

    # set max upload size
    client_max_body_size 512M;
    fastcgi_buffers 64 4K;

    # Disable gzip to avoid the removal of the ETag header
    gzip off;

    # Uncomment if your server is build with the ngx_pagespeed module
    # This module is currently not supported.
    #pagespeed off;

    error_page 403 /core/templates/403.php;
    error_page 404 /core/templates/404.php;

    location / {
        rewrite ^ /index.php$uri;
    }

    location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)/ {
        deny all;
    }
    location ~ ^/(?:\.|autotest|occ|issue|indie|db_|console) {
        deny all;
    }

    location ~ ^/(?:index|remote|public|cron|core/ajax/update|status|ocs/v[12]|updater/.+|ocs-provider/.+|core/templates/40[34])\.php(?:$|/) {
        include fastcgi_params;
        fastcgi_split_path_info ^(.+\.php)(/.*)$;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_param HTTPS on;
        #Avoid sending the security headers twice
        fastcgi_param modHeadersAvailable true;
        fastcgi_param front_controller_active true;
        #!# Die folgende Zeile funktioniert nicht mit alten Nginx Versionen
        #!# kleiner v1.7.x (die genaue version weiß ich gerade nicht mehr).
        #!# Man kann diese Zeile nun auskommentieren oder eine Modernere 
        #!# Nginx Version installieren. Ich habe mich für Letzteres entschieden.
        #!#
        fastcgi_pass php-handler;
        fastcgi_intercept_errors on;
        fastcgi_request_buffering off;
    }

    location ~ ^/(?:updater|ocs-provider)(?:$|/) {
        try_files $uri/ =404;
        index index.php;
    }

    # Adding the cache control header for js and css files
    # Make sure it is BELOW the PHP block
    location ~* \.(?:css|js)$ {
        try_files $uri /index.php$uri$is_args$args;
        add_header Cache-Control "public, max-age=7200";
        # Add headers to serve security related headers (It is intended to
        # have those duplicated to the ones above)
        # Before enabling Strict-Transport-Security headers please read into
        # this topic first.
        # add_header Strict-Transport-Security "max-age=15768000;
        #  includeSubDomains; preload;";
        add_header X-Content-Type-Options nosniff;
        add_header X-Frame-Options "SAMEORIGIN";
        add_header X-XSS-Protection "1; mode=block";
        add_header X-Robots-Tag none;
        add_header X-Download-Options noopen;
        add_header X-Permitted-Cross-Domain-Policies none;
        # Optional: Don't log access to assets
        access_log off;
    }

    location ~* \.(?:svg|gif|png|html|ttf|woff|ico|jpg|jpeg)$ {
        try_files $uri /index.php$uri$is_args$args;
        # Optional: Don't log access to other assets
        access_log off;
    }
}

- Die Zeile fastcgi_pass php-handler; in der Config oben, wird wie schon beschrieben von älteren Nginx Versionen nicht verstanden. Debians (Raspbians) Ansatz ist es möglichst stabil, sicher und bugfrei zu sein, so dass bei den stable releases oft nur ältere Versionen der Pakete zum Einsatz kommen. Deshalb ist es bei Raspbian (basierend auf Debian 8 Jessie) im Moment so, dass die Version von Nginx bei v1.6.2 und bei PHP v5.2 festhängt, wenn man nur die stable Paketquellen verwendet. Ich habe mich daher entschieden die Raspbian Paketquellen basierend auf Debian 9 Stretch (Testing) einzubinden.

Wie das geht steht hier https://getgrav.org/blog/raspberrypi-nginx-php7-dev unter der Überschrift "Install PHP 7.0" beschrieben. In dem Zuge bietet es sich dann auch gleich an PHP7 mit zu installieren.

Installation ist so z.B. mit
sudo apt-get install -t stretch nginx
bzw.
sudo apt-get install -t stretch php7.0 php7.0-fpm php7.0-gd php7.0-json php7.0-mysql php7.0-curl php7.0-mbstring php7.0-intl php7.0-mcrypt php-imagick php7.0-xml php7.0-zip

Benötigte und empfohlene PHP Module siehe hier:
https://docs.nextcloud.com/server/1...lation/source_installation.html#prerequisites

- falls du mit deinem DynDNS Domainnamen nicht zurfrieden bist, kannst du auch eine kostenlose Domain vorschalten. Ich hab mir dafür bei freenom.com eine kostenlose .tk und .ml Domain registriert, und dann in den DNS einstellungen der Domain einen CNAME Eintrag (CNAME RECORD) auf meine DynDNS Addresse geleitet. Zum Updaten der DynDNS Addresse (bei spdyn.de) benutz ich meine Fritzbox, man kann das aber wohl auch mit Scripten direkt im Linux machen, damit kenn ich mich aber noch nicht aus.

- Um mit Letsencrypt ein Zertifikat zu erstellen, muss der Rechner auf dem das Letsencrypt-script läuft über den Webserver vom Internet aus zu erreichen sein. Ansonsten funktioniert es nicht. Ich würde also erst sicherstellen das deine Domain -> DynDNS Domain -> Schul- bzw. Heimrouter WAN-IP -> Portforwarding -> Raspi Server funktioniert.

Ich hoffe das sind ein paar wertvolle Informationen, die ich hier zusammengeschrieben habe.

Gruß,
L666

Hallo, danke für die ausführliche Antwort. Aber müssen wir nginx und php7 benutzen? Meine beiden Gruppenmitglieder wollen lieber Apache und php5 benutzen. Sind deine beschriebenen Möglichkeiten auch damit realisierbar?

Gruß
 
Hi, ich hoffe dass mir geantwortet wird. Wir haben nun beschlossen den Pi als Cloud für zu Hause zu verkaufen.
Nun ist die Frage, ist es möglich eine USB Festplatte anzuschließen, diese zu mounten und dann die Ordnerstruktur für Nextcloud auf die HDD zu verschieben, damit die Clouddaten da gespeichert werden?

Als Platte würden wir diese hier nehmen:

https://www.wdc.com/de-de/products/wdlabs/wd-pidrive-berryboot-edition-1tb.html#

Gruß
 
Du musst natürlich nicht Nginx und PHP7 benutzen, aber Nginx gilt allgemein als "leichtgewichtiger" und PHP7 hat gegenüber PHP5 auch Performancevorteile. Mein WG-Mitbewohner, der sich beruflich mit WEB-Backend-Programmierung beschäftigt, sagte mir letztens, dass seine Firma einen Performancesprung von circa 25% gesehen hat, nach der Umstellung von PHP5 auf PHP7.

Die Weboberfläche von Owncloud/Nextcloud ist schon ein wenig lahmarschig auf einem Raspi3, selbst mit Nginx und PHP7, aber immer noch um welten besser als auf meiner Low End Synology DS413j NAS. :D

Hängt evtl. auch ein wenig mit dem Anwendungsfall zusammen. Ich benutze die Nextcloud hauptsächlich um Bilder mit anderen zu teilen, und die Erstellung/Generierung der Previews (Thumbnails) ist da irgendwie immer recht rechenintensiv, so das die Aufrufe über das WEB-Interface recht lahm sind.

Evtl. lege ich mir bald einen Z83II Mini PC zu (kostet so um die 85 € beim Chinahöker).

Allerdings braucht man dafür wohl ein paar Patches im Kernel, damit die Atom-CPU von Linux unterstützt wird.

Mehr dazu hier:
linuxiumcomau.blogspot.com/2016/04/ubuntu-1604-iso-for-intel-atom-compute.html
[Der CB Spamschutz schlägt bei dem Link leider zu, deshalt als reiner Text.]

Auf jeden Fall wünsche ich dir viel Spaß und gutes Gelingen für dein Project. :)

Gruß,
L666
 
Zuletzt bearbeitet:
Ich habe es mit Apache2 und PHP7 gemacht. Und das mit dem Speicher einbinden und Nextclouddateisystem drauf verschieben hat auch geklappt.
 
Zurück
Oben