Build your Nextcloud server using one shell script

Ubuntu 18.04 Bionic // Debian 9.6 Stretch


Last Updates:

January, 17th 2019:
– made changes to the header feature policy


  1. Build your self hosted Nextcloud server
  2. (optionally only) Request your ssl certificate from Let’s Encrypt
  3. Additional scripts (for Ubuntu and Debian) to maintain your Nextcloud server

The initial script called install-nextcloud-debian.sh, install-nextcloud-ubuntu.sh or install-nextcloud-ubuntu_arm64.sh (depending on your server os) will install your self hosted Nextcloud within few minutes, fully prepared for Ubuntu 18.04 or Debian 9.6 Stretch environments and will consist of:

  • Fail2Ban (Nextcloud and SSH jails)
  • MariaDB 10.3
  • Nextcloud 15 latest
  • NGINX 1.15.8
  • OpenSSL 1.1.1 + TLS v. 1.3
  • PHP 7.3 new
  • Redis-Server
  • self signed or Let’s Encrypt SSL using the second script
  • UFW (22, 80, 443)

Requirements:

  • Ubuntu 18.04 or Debian 9.6
  • Please remove already installed packages of NGINX, PHP, MariaDB and Redis first or start with a new server os!

    apt purge mysql* nginx* php* redis* -y && apt autoremove -y


Beyond that you will find additional scripts at /usr/local/src/install-nextcloud/

  • /maintainance/fail2ban.sh

    status of the current banned ip’s

  • /maintainance/ubuntu/optimize-ubuntu.sh

    rebuild redis and nextcloud indices on Ubuntu

  • /maintainance/debian/optimize-debian.sh

    rebuild redis and nextcloud indices on Debian

  • /maintainance/restart.sh

    restart all Nextcloud related services

  • /maintainance/ssl-renewal.sh

    let’s encrypt certificate renewal automatism for cron

  • /maintainance/ubuntu/upgrade-ubuntu.sh

    update your Nextcloud server and apps on Ubuntu

  • /maintainance/debian/upgrade-debian.sh

    update your Nextcloud server and apps on Ubuntu

  • /ssl/ssl-certificate-debian.sh

    request your ssl certificates from Let’s Encrypt on Debian

  • /ssl/ssl-certificate-ubuntu.sh

    request your ssl certificates from Let’s Encrypt on Ubuntu

to optimize and maintain your system easily. Ready to go? Let’s start:


(1) Build your self hosted Nextcloud server

(a) If you are on Ubuntu 18.04.x (64Bit):

sudo -s
apt install git -y
cd /usr/local/src
git clone https://github.com/riegercloud/install-nextcloud.git
cd install-nextcloud
chmod -R +x *.sh
./install-nextcloud-ubuntu.sh

(b) If you are on Ubuntu 18.04.x (ARM64Bit):

sudo -s
apt install git -y
cd /usr/local/src
git clone https://github.com/riegercloud/install-nextcloud.git
cd install-nextcloud
chmod -R +x *.sh
./install-nextcloud-ubuntu_arm64.sh

(c) If you are on Debian Stretch 9.x (64Bit):

su -
apt install git -y
cd /usr/local/src
git clone https://github.com/riegercloud/install-nextcloud.git
cd install-nextcloud
chmod -R +x *.sh
./install-nextcloud-debian.sh

… be patient

 

Press ENTER to continue with the MariaDB installation and press ENTER again (without setting a MariaDB root password) if the magenta or cyan screen appears (3x). As described you will be asked to set/change the MariaDB root password while running mysql_secure_installation, at this step it is highly recommended to set the root password.

… be patient

Open your browser and call the shown URL from your shell

Nextcloud 15 with TLSv1.3 enabled is already up, optimized and running!

It might become necessary to amend your config.php to reach your Nextcloud by its IP address:

On UBUNTU

sudo -u www-data php /var/www/nextcloud/occ config:system:set trusted_domains 1 --value=192.168.2.3
sudo -u www-data php /var/www/nextcloud/occ config:system:set overwrite.cli.url --value=https://192.168.2.3

On DEBIAN:

su - www-data -s /bin/bash -c 'php /var/www/nextcloud/occ config:system:set trusted_domains 1 --value=192.168.2.3'
su - www-data -s /bin/bash -c 'php /var/www/nextcloud/occ config:system:set overwrite.cli.url --value=https://192.168.2.3'

(2) Optionally: Request your ssl certificate from Let’s Encrypt

Optionally you may request your ssl certificate from Let’s Encrypt by issuing the second script called “ssl-certificate.sh”.

Before you request your certificate ensure that your web-ports (80+443) are forwarded to your server properly and your dyndns is already configured to point to your server!

(a) If you are on Ubuntu 18.04.x (64Bit):

sudo -s
/usr/local/src/install-nextcloud/ssl/ssl-certificate-ubuntu.sh

(b) If you are on Debian Stretch 9.x (64Bit):

su -
/usr/local/src/install-nextcloud/ssl/ssl-certificate-debian.sh

You only have to enter your DYNDNSNAME (YOUR.DEDYN.IO).

Then LetsEncrypt will ask you for

  • your email adress
Enter email address (used for urgent renewal and security notices) (Enter 'c' to cancel):
  • to agree to their Terms of Service
A

and finally

  • if you are willing to share your email address with the Electronic Frontier Foundation
Y or N

Wait while your certificates are obtained.

If you receive this message:

++++++++++++++++++++++++++++++++++++++++++++++++++++

Call: https://your.dedyn.io and enjoy your Nextcloud

++++++++++++++++++++++++++++++++++++++++++++++++++++

your server is up and running using a verified certificate from Let’s Encrypt.


(3) Additional scripts (for Ubuntu and Debian)

As described above you will find additional scripts

  • /usr/local/src/install-nextcloud/maintainance/fail2ban.sh


  • /usr/local/src/install-nextcloud/maintainance/debian/optimize-debian.sh 

    or

    /usr/local/src/install-nextcloud/maintainance/ubuntu/optimize-ubuntu.sh


  • /usr/local/src/install-nextcloud/maintainance/restart.sh

    ^ restart all Nextcloud related services

  • /usr/local/src/install-nextcloud/maintainance/ssl-renewal.sh

    ^ renewal automatism for your let’s encrypt ssl certificates

  • /usr/local/src/install-nextcloud/maintainance/debian/upgrade-debian.sh 

    or

    /usr/local/src/install-nextcloud//maintainance/ubuntu/upgrade-ubuntu.sh

    ^ upgrade your Nextcloud server and apps

to optimize and maintain your system easily.


Don’t forget to backup your Nextcloud

Find more instructions here: Nextcloud backup and restore



Carsten Rieger

Carsten Rieger

Carsten Rieger is a senior system engineer in full-time and also working as an IT freelancer. He is working with linux environments for more than 13 years, an Open Source enthusiast and highly motivated on linux installation and troubleshooting. Mostly working with Debian/Ubuntu Linux, Nginx and Apache web server, MariaDB/MySQL/PostgreSQL, PHP, Cloud infrastructure (e.g. Nextcloud) and other open source projects (e.g. Roundcube) and in voluntary work for the Dr. Michael & Angela Jacobi Stiftung for more than 7 years.

165 Responses

  1. Roland Andersson says:

    I am installing NC on my QNAP NAS. The script runs as it should. But I cannot access NC by https://myname. I run the commands for adding my IP-adress as trusted domain. The first seems to run OK. However the second
    sudo -u www-dataphp /var/www/nextcloud/occ config:system:set overwrite.cli.url –value=https://192.168.X.XX gives this error
    sudo: unknown user: www-dataphp
    sudo: unable to initialize policy plugin

    ??

    • There is a “blank” missing: Please issue this instead sudo -u www-data php /var/www/nextcloud/occ config:system:set overwrite.cli.url –value=https://192.168.X.XX.

  2. Niklas says:

    Hallo,

    danke erstmal für die Arbeit.

    Ich wollte das Script gerade unter einer komplett frischen Debian 9 Stretch Installation ausprobieren und stoße leider auf ein Problem. Bei der Installation von MariaDB scheint irgendwas schief zu gehen.

    […]
    Ign:2 http://ppa.launchpad.net/certbot/certbot/ubuntu disco InRelease
    Fehl:3 http://ppa.launchpad.net/certbot/certbot/ubuntu disco Release
    404 Not Found
    OK:4 https://packages.sury.org/php stretch InRelease
    OK:5 http://security.debian.org/debian-security stretch/updates InRelease
    Ign:6 http://deb.debian.org/debian stretch InRelease
    OK:7 http://deb.debian.org/debian stretch Release
    OK:9 http://nginx.org/packages/mainline/debian stretch InRelease
    Paketlisten werden gelesen… Fertig
    E: The repository ‘http://ppa.launchpad.net/certbot/certbot/ubuntu disco Release’ does not have a Release file.
    N: Updating from such a repository can’t be done securely, and is therefore disabled by default.
    N: See apt-secure(8) manpage for repository creation and user configuration details.
    Failed to stop mysql.service: Unit mysql.service not loaded.
    Failed to restart mysql.service: Unit mysql.service not found.

    Nach der Eingabe der Nextcloud-DB Daten im Script kommen dann Folgefehler, da die DB nicht gefunden wird.

    Irgendwelche Tipps?

    Vielen Dank & Gruß
    Niklas

    • Hallo, sind denn die Requirements erfüllt gewesen? 64 Bit, AMD64, keine bestehende Installation der Komponenenten wie bspw. MariaDB? Wie sieht die aktuelle source.list Datei aus?

      • Niklas says:

        Hallo, meiner Meinung nach waren die Requirements erfüllt.

        Habe Debian 9.6 (64 Bit, AMD64) komplett neu installiert und direkt danach das Script ausgeführt. Da sollten meines Wissens noch keine bestehenden Komponenten der MariaDB vorinstalliert gewesen sein.

        Die sources.list sieht aktuell wie folgt aus:

        deb http://deb.debian.org/debian stretch main
        deb http://security.debian.org/debian-security stretch/updates main
        deb [arch=amd64] http://nginx.org/packages/mainline/debian/ stretch nginx
        deb-src [arch=amd64] http://nginx.org/packages/mainline/debian/ stretch nginx
        deb [arch=amd64] http://mirror2.hs-esslingen.de/mariadb/repo/10.3/debian stretch main
        deb https://packages.sury.org/php/ stretch main

        Werde das Script nochmal auf ner frischen Installation ausführen, vllt. habe ich ja doch irgendwas übersehen.
        Wenn ich MariaDB auf dem aktuellen Stand manuell installieren möchte kommt es übrigens auch zu Fehlern:
        Hängt ab von: mariadb-server-10.3 (>= 1:10.3.11+maria~stretch) soll aber nicht installiert werden

        Hängt vermutlich irgendwie zusammen, leider bin ich in der Linux-Materie nicht so tief drin.

        Gruß

        • Die Skripte gibt es jetzt in neuen Versionen aufgrund von PHP 7.3, funktioniert es jetzt?

          • Niklas says:

            Hallo, danke nochmal für die Antwort.

            Bin leider erst gerade dazu gekommen das Ganze zu testen.

            Erst ist es wieder fehlgeschlagen, dann habe ich mal mit “sudo apt-get –purge remove “mysql*”” alle bestehenden MariaDB Sachen deinstalliert
            und dann liefs tatsächlich problemlos durch.

            Anscheinend sind bei Debian KDE schon irgendwelche MariaDB/Mysql Sachen vorinstalliert, die sich dann mit dem Script nicht vertragen.
            Wurde deswegen auch immer darauf hingewiesen, dass bereits eine mysql.conf vorliegt und sollte mich entscheiden welche Version übernommen wird.

            Naja, jetzt läufts erstmal problemlos, Vielen Dank!

            Eine Frage hätte ich noch:
            Das Script fragt ja während der Installation nach dem Nexcloud Admin User.
            Nach der Installation kommt man beim ersten Aufruf auf die Nextcloud Startseite und wird gebeten einen neuen Admin-User anzulegen. Den bestehenden bereits angelegten User kann man dann leider nicht eingeben. Kann man das irgendwie umgehen?

            Gruß

            • nein, dafür ist es nicht ausgelegt.

              • Niklas says:

                Soo, ich habe jetzt nochmal alles vernünftig eingerichtet und es hat problemlos funktioniert.

                Auch das Einrichten der Zertifikate mit dem 2. Script war kein Problem. Vielen Dank für die ganze Arbeit, jetzt funktioniert alles einwandfrei 🙂

                Gruß, Niklas

  3. Erik Munder says:

    Hallo Carsten

    Erstmal ein grosses Lob an dich für deine Arbeit hier (und frohes verspätestes Neues)!

    Ich habe dank deinem Skript hier (und weiteren Tutorials von dir) meine Nextcloud auf einem RockPro64 ARM64 Singleboard problemlos zum Laufen bekommen. Auch das SSL einrichten für die DEDYN-Adresse hat wunderbar geklappt. Ein Problem bleibt für mich aber noch: ich kann keine Apps über die Nextcloud Adminkonsole installieren. Wenn ich es versuche kommt die Fehlermeldung “cURL error 6: Could not resolve host: github-production-release-asset-2e65be.s3.amazonaws.com (see http://curl.haxx.se/libcurl/c/libcurl-errors.html)” und meine prompte Recherche ergab nur, dass es am DNS Resolver liegt. Jetzt ist vielleicht noch wichtig zu wissen, dass ich mein RockPro64 Nextcloud NAS an einem Turris Omnia Router hängen habe, der ja zig Einstellmöglichkeiten für DNS/Forwarding/DNSSEC usw. bietet. Ich hab natürlich auch gleich ein paar andere Einstellungen diesbezüglich getestet am Router aber das Problem blieb leider. Ich habe die Apps dann manuell installiert aber es wäre natürlich praktisch wenn das auch direkt im Browser ginge. Bevor ich jetzt noch länger am Router rum teste, wollte ich lieber erst einmal deine Expertise bemühen, ob es vielleicht auch an der Firewall oder den Servereinstellungen liegen kann.

    Danke schon mal für die Antwort und keep up the good work! 😉

  4. Nico-T. Opitz says:

    Guten Tag,

    inzwischen hat die Installation auf Ubuntu Server 18.04.1 LTS x-64 mit dem One-Shell-Script geklappt. Im Admin-Panel erscheint bei Verwaltung -> Übersicht folgende Fehler/Hinweismeldung:
    “Es gibt einige Fehler bei Deiner Systemkonfiguration.

    Einige Dateien haben die Integritätsprüfung nicht bestanden. Weiterführende Informationen befinden sich in unserer Dokumentation. (Liste der ungültigen Dateien… / Erneut analysieren…)

    Bei einigen Spalten in der Datenbank fehlt eine Konvertierung in big int. Aufgrund der Tatsache, dass das Ändern von Spaltentypen bei großen Tabellen einige Zeit dauern kann, wurden sie nicht automatisch geändert. Durch Ausführen von “occ db: convert-filecache-bigint” können diese ausstehenden Änderungen manuell übernommen werden. Diese Operation muss ausgeführt werden, während die Instanz offline ist. Weitere Einzelheiten finden Sie auf der zugehörigen Dokumentationsseite.
    filecache.mtime
    filecache.storage_mtime

    Bitte überprüfe noch einmal die Installationsanleitungen ↗ und kontrolliere das Protokoll auf mögliche Fehler oder Warnungen. “

  5. Nico-T. Opitz says:

    Guten Tag,
    leider hat bei mir einiges nicht geklappt (Stand 26 Dez. 2018). Umgebung Ubuntu Sever 18.04.1 LTS. Nginx wird nicht installiert. Das Verzeichnis /etc/nginx/ wird nicht angelegt Relativ am Anfang der Fehler:

    “dpkg: Fehler: Auf das Archiv >>nginx_1.15.7-*.deb<< kann nicht zugegriffen werden: No such file or directory
    Faildes to restart ndinx.service: Unit nginx.service not found …. "

    Leider ist hier das Anhängen von Screenshots nicht möglich.

  6. axarix says:

    Sorry, wenn ich eine vielleicht doofe Frage stelle: “Wie sicher ist diese Art der Installation? Kann man sich theoretisch mit einem script nicht das Netzwerk infizieren?” Ich verstehe nämlich nicht alles, was da abläuft. Ich werde es aber in jedem Fall mal auf einem Test-Server ausprobieren.

    • Wie schon die EAV sang: “…das Böse lauert immer und überall…” Nein Spaß bei Seite. Grundsätzlich ist Skepsis ja gut und richtig. Aber um Transparenz zu schaffen ist das Script öffentlich bei GitHub verfügbar. Frohe Weihnachten, Carsten

      • axarix says:

        Hallo Carsten, vielen Dank! Ich habe jetzt NC für unsere Gruppe nach Deinem Script eingerichtet. Lief alles problemlos durch. Als ich jedoch eine alte sql-Datei einspielen wollte, kam es zu Problemen. Dank deinem Script hatte ich den Server aber schnell wieder hergestellt und die Nutzerdaten manuel eingetragen. Sind ja nicht ganz so viele. Jetzt läuft alles zu unserer Zufriedenheit. Dir und Deiner Familie ein schönes Weihnachtsfest, wünscht Rainer!

  7. Bogi says:

    Alles Super geklappt. Cooles Script

  8. Jonas says:

    Hallo Carsten,

    vielen Dank für das Skript, das nimmt echt viel Arbeit.
    Ein “Problem” nur: Wenn ich mich in Nextcloud anmelden will, nimmst dieses als Anmeldename und Passwort nicht den gesetzten Nextcloud Benutzer + Passwort, sondern Benutzer von der Datenbank + entsprechendes Passwort. Habe ich da was falsch verstanden?

    • Hhhmm…es fragt alles ab. Asso den DB-Namen, den DB-user, den Nextcloudadministrator und dessen Passwort. In der /var/www/nextcloud/config/config.php steht der Datenbankname, -User und das Passwort und über sudo -u www-data php /var/www/nextcloud/occ user:list erhälst Du die User aufgelistet. Hilft Dir das zum Klären/Prüfen?

  9. Pol says:

    Thank you very much for your post.Worked at once.On odroid xu4 and armbian.It would be the best of all if the script could install openvpn and pihole at the same time.
    Till now that I have found this post the installation of nextcloud was never been so easy to install.
    Thank you again for your time and work.

  10. Carlos says:

    Hello,

    I wanted to say thank you for posting these extremely helpful tutorials and scripts. I used this particular one to install Nextcloud on a new Ubuntu 18.04 desktop without a problem.

    One question though, in the event that I eventually upgrade to newer versions of Nextcloud, will anything that was setup by this script need to be corrected?

  11. Jens says:

    Hallo Carsten,

    danke für dein einfaches Script jedoch hätte ich ein Anliegen, wäre es möglich, über dein Script Nextcloud in
    einem Subfolder laufen zu lassen?, wenn ja, was müsste ich beachten oder kann ich einfach Nextcloud in
    einen Subfolder verschieben?

  12. Thomas Lippert says:

    Super Script! 😉
    Ich habe das Problem, das mit nextcloud 14.0.3 immer ALLE Session offen bleiben. D.h. wenn der User eingeloggt ist, der Browser geschlossen wird und JEMAND dann den Browser wieder öffnet, dann ist derjenige sofort in nextcloud angemeldet. In Version 13 musste man sich nach jedem Session close wieder neu anmelden. Ich sehe das als ein riesiges Sicherheitsrisiko, wenn man sich von fremden Rechner anmeldet. Gibt es eine möglichkeit, das die session wieder geclosed werden, wenn der Browser geschlossen wird. Ich habe schon alle einstellungen in der config.php durchprobiert (remember_login_cookie_lifetime, session_lifetime usw.). leider keine Besserung.

  13. Thomas says:

    Guten Abend,

    vielen Dank für dieses Tolle script. Das Script ist bei mir ohne zu erkennenden Fehler durch gelaufen. Allerdings startet nginx nicht. Ich bekomme folgenden Fehler:
    nginx: [alert] could not open error log file: open() “/var/log/nginx/error.log” failed (13: Permission denied)
    2018/10/25 23:59:23 [warn] 2187#2187: the “user” directive makes sense only if the master process runs with super-user privileges, ignored in /etc/nginx/nginx.conf:1
    2018/10/25 23:59:23 [emerg] 2187#2187: invalid number of arguments in “proxy_set_header” directive in /etc/nginx/proxy.conf:8
    nginx: configuration file /etc/nginx/nginx.conf test failed

    Hätten Sie eine Idee für mein Problem?

    Vielen Dank und Gruß
    Thomas

    • Entschuldigung! Ich habe das “quotieren” vergessen und dadurch einen Fehler in das Script eingebaut. Bitte ändern Sie mittels “vi /etc/nginx/proxy.conf” die Zeile “proxy_set_header Early-Data ;” zu “proxy_set_header Early-Data $ssl_early_data;” und starten danach den NGINX neu “service nginx restart“.

  14. rüdiger says:

    Hallo Carsten,
    mit dem Script ist die Cloud richtig flott und fehlerfrei eingerichtet. Vielen Dank dafür.
    Ich habe beim Einrichten von MariaDB nicht richtig aufgepasst und kein Passwort vergeben.
    Wie kann ich das am einfachsten nachholen?
    Viele Grüße
    Rüdiger

  15. Mats says:

    U rock bud!
    Installed like a breeze but. When staring the fail2ban daemon I’m getting no access to Nextcloud now on port 80 or 443. any ideas?

    m

  16. Anas A says:

    It’s awesome script.
    Thank you so much.
    would you please tell me how can i add more than one domain to nextcloud with nginx.

    Regards

    • Create a further conf-file (etc/nginx/conf/seconddomain.conf) and define a unique servername. Declare the Nextcloud one as default_server…that’s it! Request your ssl certificates withe the same command and add “…- your.dedyn.io -d second.domain.tld”

  17. isaac says:

    Hi Carsten,

    I get this message upon issuing ……../usr/local/src/install-nextcloud/ssl-renewal.sh

    ./ssl-renewal.sh: line 22: /home/username/ssl-renewal.txt: No such file or directory

    is that to be expected?

    thanks…

  18. Bhavin Patel says:

    I get this error while installing nextcloud through script.

    Error while trying to create admin user: Failed to connect to the database: An exception occured in driver: SQLSTATE[HY000] [1045] Access denied for user ‘myuser’@’localhost’ (using password: YES)

    I get the above error at last part when creating admin user for next cloud.

    After carefully observing the processes i have been able to know that database details which we enter at time of installing mariadb that database is only not getting created.

    After this i manually created the required database and then manually gave below command from script.

    sudo -u www-data php /var/www/nextcloud/occ maintenance:install –database “mysql” –database-name “mydatabase” –database-user “mynextadmin” –database-pass “nextadmin” –admin-user “ncadmin” –admin-pass “ncadmin123” –data-dir “/mnt/ncdata”

    But the above command line gives below error.

    Error while trying to create admin user: Failed to connect to the database: An exception occured in driver: SQLSTATE[HY000] [1045] Access denied for user ‘myuser’@’localhost’ (using password: YES)

    • You mixed a few database params: “…–database-user “mynextadmin…” and “…‘myuser’@’localhost’…”
      Did you set a db root pwd before the mysql_secure_installation process was started?

      • Bhavin Patel says:

        ooo yes thanks for reply..

        also i found issue with me.. even though it is well written in your article not to provide password at time of mariadb installation i did that.. even before script can create db and user for next cloud..

        i started again with clean OS and got installation with out any error..

        just one small error i got with fail2ban as below
        Failed to access socket path: /var/run/fail2ban/fail2ban.sock. Is fail2ban running?

        so after reboot i checked below command

        root@domdomservers:~# fail2ban-client start

        gave me output as below..
        ======
        No file(s) found for glob /var/nc_data/nextcloud.log
        Failed during configuration: Have not found any log file for nextcloud jail
        created nextcloud.log file manually in required directory and then rebooted server every thing working fine. This is for kind information as to debug why file nextcloud.log did not created manually

  19. Patrick says:

    Yo! This looks verrry nice!
    Has anyone already tested the script on an ARM board? I have few Odroid (c2, xu4) boards that can be packed with the latest LTS of Ubuntu 18.04, so I was wandering if they can be put at some useful work again.

  20. Johannes K. says:

    Hi Carsten,
    vielen Dank für dieses tolle Skript. Meine Nextcloud ist jetzt erreichbar unter http://meinedomain.de.
    Ich hätte aber gerne, dass die Cloud nur erreichbar ist unter http://meinedomain.de/meineCloud. Wie kann ich das am einfachsten erreichen?
    Danke & Grüße
    Johannes

  21. gerionis says:

    What action is performed by fail2ban and where is it stored?

  22. Ruben says:

    Thank You !!!
    it works perfectly.

  23. strobo says:

    hi Christian
    sehr schönes tutorial. hat sehr gut funktioniert.
    eine Frage steht aber noch im Raum.
    im nextcloud backend als Admin erhalte ich die Meldung: bei der code integritätsprüfung sind probleme aufgetreten
    wenn man da drauf geht ->
    Es gibt einige Fehler bei Ihrer Systemkonfiguration.
    Einige Dateien haben die Integritätsprüfung nicht bestanden. Weiterführende Informationen befinden sich in unserer Dokumentation. (Liste der ungültigen Dateien … / Erneut analysieren…)
    Die Verwendung des eingebauten PHP-Mailers wird nicht länger unterstützt. Bitte aktualisieren Sie die E-Mail-Server-Einstellungen ↗.

    -> Liste der ungültigen Dateien
    Results
    =======
    – core
    – INVALID_HASH
    – .user.ini

    Raw output
    ==========
    Array
    (
    [core] => Array
    (
    [INVALID_HASH] => Array
    (
    [.user.ini] => Array
    (
    [expected] => 467d4f028c447895716a2b7859ed6e569f8ee34b87b51d73dab2e6a9ca4fbe63172c7be3e365ae864a60408286afcce852dd38ee544b61685ed4ee5e021fecb0
    [current] => d71945d913c9c3f3a9b7ad8d240690f566e1066cec057956a4b484c99f1298d49896313e5c0b5c1b1b5fd9c8f6a100a5959fa083fbae67761493e36557a3644a
    )

    )

    )

    )

    hast du eine Idee? und wie kriege ich die Meldung mit dem Email weg?

  24. Felix says:

    Hallo, vielen Dank für dieses super Script!
    Allerdings noch eine Frage zum Let’s Encrypt Zertifikat.
    In deinem Beispiel muss man die gewünschte Domain (z.B. your.dedyn.io) im Konsolenfenster eingeben, worauf dann das Zertifikat abgerufen wird. Was aber wenn ich mehr als eine Domain auf die IP-Adresse eingerichtet habe und für alle ein SSL-Zertifikat abrufen möchte. Gibt es da eine Möglichkeit an dieser Stelle mehr als eine Domain einzutragen z.B. getrennt durch , ; oder : ?

    • Vielleicht meinst Du das? letsencrypt certonly -a webroot --webroot-path=/var/www/letsencrypt --rsa-key-size 4096 -d YOUR1.DEDYN.IO -d YOUR2.DEDYN.IO -d YOUR3.DEDYN.IO. Somit würde ein Zertifikat mit verschiedenen SANs erzeugt.
      Ansonsten kannst Du mittels NGINX und SNIs verschiedene Domänen einrichten und für jede Domäne (SNI) ein Zertifikat in einer eigenen ssl.conf hinterlegen.

  25. Martin says:

    Hallo Carsten,
    erstmal Danke für das Script – sehr beeindruckend!
    Ich habe Testweise eine Nextcloud 14.0.0 auf einer VM mit deinem Script installiert.
    Wenn ich unter Win7 mit dem Client (2.3.3.1) größere Mengen an Dateien hochlade im lokalen Netz werden Fehler ausgeworfen (im Client). Unten dazu die Fatal-Meldung aus dem NC-Admin Protokoll.
    In der nächsten Runde wird der Fehler korrigiert, aber schön ist das nicht.

    Hast du eine Idee?

    Danke & viele Grüße
    Martin

    Fatal webdav
    DoctrineDBALExceptionDriverException: An exception occurred while executing ‘INSERT INTO `oc_filecache` (`mimepart`,`mimetype`,`mtime`,`size`,`etag`,`storage_mtime`,`permissions`,`parent`,`checksum`,`path_hash`,`path`,`name`,`storage`) SELECT ?,?,?,?,?,?,?,?,?,?,?,?,? FROM `oc_filecache` WHERE `storage` = ? AND `path_hash` = ? HAVING COUNT(*) = 0’ with params [“8”, “14”, 1536762670, 67190, “22b7abe1fd6a75be6532dec98a3ac458”, 1536762670, 27, 1030, “”, “9862d3623800ee913bac0ec660fcb291”, “files/test/inf/usbport.inf”, “usbport.inf”, 3, 3, “9862d3623800ee913bac0ec660fcb291”]: SQLSTATE[40001]: Serialization failure: 1213 Deadlock found when trying to get lock; try restarting transaction

    /var/www/nextcloud/3rdparty/doctrine/dbal/lib/Doctrine/DBAL/DBALException.php – line 128:

    DoctrineDBALDriverAbstractMySQLDriver->convertException(“An exceptio … n”, DoctrineDBA … ]})

    /var/www/nextcloud/3rdparty/doctrine/dbal/lib/Doctrine/DBAL/Connection.php – line 1015:

    DoctrineDBALDBALException::driverExceptionDuringQuery(DoctrineDBA … {}, DoctrineDBA … ]}, “INSERT INTO … 0”, { 1: “8”,2: … “})

    /var/www/nextcloud/lib/private/DB/Connection.php – line 216:

    DoctrineDBALConnection->executeUpdate(“INSERT INTO … 0”, [ “8”,”14″,1 … “], [])

    /var/www/nextcloud/lib/private/DB/Adapter.php – line 114:

    OCDBConnection->executeUpdate(“INSERT INTO … 0”, [ “8”,”14″,1 … “])

    /var/www/nextcloud/lib/private/DB/Connection.php – line 254:

    OCDBAdapter->insertIfNotExist(“*PREFIX*filecache”, { mimepart: … 3}, [ “storage”,”path_hash”])

    /var/www/nextcloud/lib/private/Files/Cache/Cache.php – line 272:

    OCDBConnection->insertIfNotExist(“*PREFIX*filecache”, { mimepart: … 3}, [ “storage”,”path_hash”])

    /var/www/nextcloud/lib/private/Files/Cache/Cache.php – line 229:

    OCFilesCacheCache->insert(“files/test/inf/usbport.inf”, { mimetype: … “})

    /var/www/nextcloud/lib/private/Files/Cache/Scanner.php – line 292:

    OCFilesCacheCache->put(“files/test/inf/usbport.inf”, { mimetype: … “})

    /var/www/nextcloud/lib/private/Files/Cache/Scanner.php – line 221:

    OCFilesCacheScanner->addToCache(“files/test/inf/usbport.inf”, { mimetype: … “}, -1)

    /var/www/nextcloud/lib/private/Files/Cache/Scanner.php – line 336:

    OCFilesCacheScanner->scanFile(“files/test/inf/usbport.inf”, 3, 1030, false, false)

    /var/www/nextcloud/lib/private/Files/Cache/Updater.php – line 124:

    OCFilesCacheScanner->scan(“files/test/inf/usbport.inf”, false, 3, false)

    /var/www/nextcloud/apps/dav/lib/Connector/Sabre/File.php – line 235:

    OCFilesCacheUpdater->update(“files/test/inf/usbport.inf”)

    /var/www/nextcloud/apps/dav/lib/Connector/Sabre/Directory.php – line 156:

    OCADAVConnectorSabreFile->put(null)

    /var/www/nextcloud/3rdparty/sabre/dav/lib/DAV/Server.php – line 1096:

    OCADAVConnectorSabreDirectory->createFile(“usbport.inf”, null)

    /var/www/nextcloud/3rdparty/sabre/dav/lib/DAV/CorePlugin.php – line 529:

    SabreDAVServer->createFile(“files/marti … f”, null, null)

    SabreDAVCorePlugin->httpPut(SabreHTTPR … “}, SabreHTTPResponse {})

    /var/www/nextcloud/3rdparty/sabre/event/lib/EventEmitterTrait.php – line 105:

    call_user_func_array([ SabreDAV … “], [ SabreHTTP … }])

    /var/www/nextcloud/3rdparty/sabre/dav/lib/DAV/Server.php – line 479:

    SabreEventEventEmitter->emit(“method:PUT”, [ SabreHTTP … }])

    /var/www/nextcloud/3rdparty/sabre/dav/lib/DAV/Server.php – line 254:

    SabreDAVServer->invokeMethod(SabreHTTPR … “}, SabreHTTPResponse {})

    /var/www/nextcloud/apps/dav/lib/Server.php – line 293:

    SabreDAVServer->exec()

    /var/www/nextcloud/apps/dav/appinfo/v2/remote.php – line 35:

    OCADAVServer->exec()

    /var/www/nextcloud/remote.php – line 163:

    require_once(“/var/www/ne … p”)

    Eingefasst vonDoctrineDBALDriverPDOException: SQLSTATE[40001]: Serialization failure: 1213 Deadlock found when trying to get lock; try restarting transaction

    /var/www/nextcloud/3rdparty/doctrine/dbal/lib/Doctrine/DBAL/Connection.php – line 1008:

    DoctrineDBALDriverPDOStatement->execute([ “8”,”14″,1 … “])

    /var/www/nextcloud/lib/private/DB/Connection.php – line 216:

    DoctrineDBALConnection->executeUpdate(“INSERT INTO … 0”, [ “8”,”14″,1 … “], [])

    /var/www/nextcloud/lib/private/DB/Adapter.php – line 114:

    OCDBConnection->executeUpdate(“INSERT INTO … 0”, [ “8”,”14″,1 … “])

    /var/www/nextcloud/lib/private/DB/Connection.php – line 254:

    OCDBAdapter->insertIfNotExist(“*PREFIX*filecache”, { mimepart: … 3}, [ “storage”,”path_hash”])

    /var/www/nextcloud/lib/private/Files/Cache/Cache.php – line 272:

    OCDBConnection->insertIfNotExist(“*PREFIX*filecache”, { mimepart: … 3}, [ “storage”,”path_hash”])

    /var/www/nextcloud/lib/private/Files/Cache/Cache.php – line 229:

    OCFilesCacheCache->insert(“files/test/inf/usbport.inf”, { mimetype: … “})

    /var/www/nextcloud/lib/private/Files/Cache/Scanner.php – line 292:

    OCFilesCacheCache->put(“files/test/inf/usbport.inf”, { mimetype: … “})

    /var/www/nextcloud/lib/private/Files/Cache/Scanner.php – line 221:

    OCFilesCacheScanner->addToCache(“files/test/inf/usbport.inf”, { mimetype: … “}, -1)

    /var/www/nextcloud/lib/private/Files/Cache/Scanner.php – line 336:

    OCFilesCacheScanner->scanFile(“files/test/inf/usbport.inf”, 3, 1030, false, false)

    /var/www/nextcloud/lib/private/Files/Cache/Updater.php – line 124:

    OCFilesCacheScanner->scan(“files/test/inf/usbport.inf”, false, 3, false)

    /var/www/nextcloud/apps/dav/lib/Connector/Sabre/File.php – line 235:

    OCFilesCacheUpdater->update(“files/test/inf/usbport.inf”)

    /var/www/nextcloud/apps/dav/lib/Connector/Sabre/Directory.php – line 156:

    OCADAVConnectorSabreFile->put(null)

    /var/www/nextcloud/3rdparty/sabre/dav/lib/DAV/Server.php – line 1096:

    OCADAVConnectorSabreDirectory->createFile(“usbport.inf”, null)

    /var/www/nextcloud/3rdparty/sabre/dav/lib/DAV/CorePlugin.php – line 529:

    SabreDAVServer->createFile(“files/marti … f”, null, null)

    SabreDAVCorePlugin->httpPut(SabreHTTPR … “}, SabreHTTPResponse {})

    /var/www/nextcloud/3rdparty/sabre/event/lib/EventEmitterTrait.php – line 105:

    call_user_func_array([ SabreDAV … “], [ SabreHTTP … }])

    /var/www/nextcloud/3rdparty/sabre/dav/lib/DAV/Server.php – line 479:

    SabreEventEventEmitter->emit(“method:PUT”, [ SabreHTTP … }])

    /var/www/nextcloud/3rdparty/sabre/dav/lib/DAV/Server.php – line 254:

    SabreDAVServer->invokeMethod(SabreHTTPR … “}, SabreHTTPResponse {})

    /var/www/nextcloud/apps/dav/lib/Server.php – line 293:

    SabreDAVServer->exec()

    /var/www/nextcloud/apps/dav/appinfo/v2/remote.php – line 35:

    OCADAVServer->exec()

    /var/www/nextcloud/remote.php – line 163:

    require_once(“/var/www/ne … p”)

    Eingefasst vonPDOException: SQLSTATE[40001]: Serialization failure: 1213 Deadlock found when trying to get lock; try restarting transaction

    /var/www/nextcloud/3rdparty/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOStatement.php – line 105:

    PDOStatement->execute([ “8”,”14″,1 … “])

    /var/www/nextcloud/3rdparty/doctrine/dbal/lib/Doctrine/DBAL/Connection.php – line 1008:

    DoctrineDBALDriverPDOStatement->execute([ “8”,”14″,1 … “])

    /var/www/nextcloud/lib/private/DB/Connection.php – line 216:

    DoctrineDBALConnection->executeUpdate(“INSERT INTO … 0”, [ “8”,”14″,1 … “], [])

    /var/www/nextcloud/lib/private/DB/Adapter.php – line 114:

    OCDBConnection->executeUpdate(“INSERT INTO … 0”, [ “8”,”14″,1 … “])

    /var/www/nextcloud/lib/private/DB/Connection.php – line 254:

    OCDBAdapter->insertIfNotExist(“*PREFIX*filecache”, { mimepart: … 3}, [ “storage”,”path_hash”])

    /var/www/nextcloud/lib/private/Files/Cache/Cache.php – line 272:

    OCDBConnection->insertIfNotExist(“*PREFIX*filecache”, { mimepart: … 3}, [ “storage”,”path_hash”])

    /var/www/nextcloud/lib/private/Files/Cache/Cache.php – line 229:

    OCFilesCacheCache->insert(“files/test/inf/usbport.inf”, { mimetype: … “})

    /var/www/nextcloud/lib/private/Files/Cache/Scanner.php – line 292:

    OCFilesCacheCache->put(“files/test/inf/usbport.inf”, { mimetype: … “})

    /var/www/nextcloud/lib/private/Files/Cache/Scanner.php – line 221:

    OCFilesCacheScanner->addToCache(“files/test/inf/usbport.inf”, { mimetype: … “}, -1)

    /var/www/nextcloud/lib/private/Files/Cache/Scanner.php – line 336:

    OCFilesCacheScanner->scanFile(“files/test/inf/usbport.inf”, 3, 1030, false, false)

    /var/www/nextcloud/lib/private/Files/Cache/Updater.php – line 124:

    OCFilesCacheScanner->scan(“files/test/inf/usbport.inf”, false, 3, false)

    /var/www/nextcloud/apps/dav/lib/Connector/Sabre/File.php – line 235:

    OCFilesCacheUpdater->update(“files/test/inf/usbport.inf”)

    /var/www/nextcloud/apps/dav/lib/Connector/Sabre/Directory.php – line 156:

    OCADAVConnectorSabreFile->put(null)

    /var/www/nextcloud/3rdparty/sabre/dav/lib/DAV/Server.php – line 1096:

    OCADAVConnectorSabreDirectory->createFile(“usbport.inf”, null)

    /var/www/nextcloud/3rdparty/sabre/dav/lib/DAV/CorePlugin.php – line 529:

    SabreDAVServer->createFile(“files/marti … f”, null, null)

    SabreDAVCorePlugin->httpPut(SabreHTTPR … “}, SabreHTTPResponse {})

    /var/www/nextcloud/3rdparty/sabre/event/lib/EventEmitterTrait.php – line 105:

    call_user_func_array([ SabreDAV … “], [ SabreHTTP … }])

    /var/www/nextcloud/3rdparty/sabre/dav/lib/DAV/Server.php – line 479:

    SabreEventEventEmitter->emit(“method:PUT”, [ SabreHTTP … }])

    /var/www/nextcloud/3rdparty/sabre/dav/lib/DAV/Server.php – line 254:

    SabreDAVServer->invokeMethod(SabreHTTPR … “}, SabreHTTPResponse {})

    /var/www/nextcloud/apps/dav/lib/Server.php – line 293:

    SabreDAVServer->exec()

    /var/www/nextcloud/apps/dav/appinfo/v2/remote.php – line 35:

    OCADAVServer->exec()

    /var/www/nextcloud/remote.php – line 163:

    require_once(“/var/www/ne … p”)

  26. DFFVB says:

    If I wouldn’t have donated already, I would now!!!

  27. Albrecht Eissler says:

    Geiles Teil! Danke!
    Sollte das Skript auch auf dem Odroid C2 funktionieren, in der ARM64-Variante natürlich? Ich bin nicht durchgekommen damit. Die Abfragen bei der Installation der MariaDB kommen nicht, es gibt einige Fehlermeldungen und am Ende komme ich nicht auf das Web-Interface. Grundlage war das Ubuntu-Minimal-Image aus der Installationsbeschreibung “ODROID-C2 from scratch (Ubuntu 18.04)”.

    • Vielen Dank. Ja, sollte funktionieren. War der DB-Server schon vorhanden? Was lief denn schief? Ich werde es in Kürze testen und gebe dann Feedback. Ciao, Carsten

      • Albrecht Eißler says:

        Nach der Abfrage, ob die MariaDB installiert werden soll,will das Skript Nextcloud DB-Username und -Passwort wissen. Ich habe auf’s Geratewohl “nextcloud” und “nextcloud” angegeben.
        Dann folgt die Fehlermeldung, dass der mysql sercive nicht neu gestartet werden konnte mit der Begründung “Unit mysql service not found”.
        Direkt danach kommt: ./install-nextcloudARM64.sh: Zeile 337: mysql_secure_installation: Befehl nicht gefunden
        Danach kommt mehrmals “Nextcloud is not installed – only a limited number of commands are available”.
        Schließlich kommt “Job for nginx.service failed because the control process exited with error code.”
        Der Status der laufenden Dienste sieht so aus:
        “sudo service –status-all
        [ – ] console-setup.sh
        [ + ] cron
        [ + ] dbus
        [ + ] fail2ban
        [ – ] hwclock.sh
        [ – ] keyboard-setup.sh
        [ + ] kmod
        [ + ] network-manager
        [ – ] nginx
        [ + ] php7.2-fpm
        [ – ] pppd-dns
        [ + ] procps
        [ + ] redis-server
        [ + ] rsyslog
        [ – ] screen-cleanup
        [ + ] ssh
        [ + ] udev
        [ + ] ufw
        [ + ] unattended-upgrades
        [ – ] x11-common”

  28. Simon says:

    Nach der Installation liegt unter /var/www/nextcloud eine Datei mit dem namen .user.ini.bak
    Die datei gehört nicht dem www-data user und verhindert ein NC Update über die Weboberfläche.

    -rw-r–r– 1 root root 163 Aug 29 13:43 .user.ini.bak

  29. Tuan Nguyen says:

    Hello sir.
    First, thank you so much.
    Then, please help me:

    My Windows PC: I edit Registry FileSizeLimitInBytes 999999999: https://snag.gy/bTL7nC.jpg

    I run your scrip on Ubuntu 64 18.04.1 server with your scrip origin , no config anything. NC run smooth. Upload big file > 4GB via web browser success (in my case file > 9GB via Chrome).

    ===

    When I upload file about 1G via webdav File Windows Explore => upload success:

    https://snag.gy/BQYIpq.jpg
    https://snag.gy/lin5Tx.jpg
    https://snag.gy/qhlFJL.jpg

    But with file > 4GB via webdav File Windows Explore => upload no success. (it upload 2 time by itself with no success):

    https://snag.gy/cpNw9y.jpg
    https://snag.gy/J4W0Xv.jpg
    https://snag.gy/Ss0KXy.jpg
    https://snag.gy/LomI9x.jpg

    Please help me fix it. Thank you so much.

  30. Franz says:

    Hallo Carsten,
    geniales script, Danke fürs Teilen! Google Chrome zeigt mir meine Nextcloud Seiten als “schädlich” an, trotz korrekt ausgestelltem LetsEncrypt Zertifikat. Woran liegt’s und was kann man tun damit das wieder sauber ist?
    Danke Dir, Franz

  31. Carlton Brooks says:

    Yes it should say 443.
    Ran what you suggested, all came back as active running.
    Did a reboot and same thing.
    If I reinstall what should I look for.

  32. Carlton Brooks says:

    Thank you for this. I have used your other tutorials to set up version 12. Server died so I figured I would start from scratch.
    Followed the directions and install seemed to go with no errors. DID NOT INSTALL STEP 2 ON SSL (YET)
    Nmap says ports 442 and 80 are open ufw status is good as well.
    But… it will not open using the https address. used my ip address 192.168.1.129 and chrome says
    This site can’t be reached
    192.168.1.129 refused to connect.
    Check usual stuff but what else in your code should I check.
    Thank you

    • Check wether all services are started properly?
      service nginx status
      service php7.2-fpm status
      servis redis-server status
      service mysql status

      I guess you meant port 443 instead of 442?!

  33. Mike says:

    Hallo Carsten, besten Dank für das Script, es hat auf Anhieb funktioniert.
    Kannst du mir sagen, wie ich die Konfiguration von nginx ändern muss, damit ich noch eine zweite Seite drauf betreiben kann? Ich denke mal ich muss die nextcloud.conf editieren … Habe schon alles versucht er leitet immer auf die Nextcloud um.

  34. Axel says:

    Hallo Carsten, vielen Dank für das super Skript!

    Auf meinem Ubuntu 18.04 hat die Installation super funktioniert, inkl. SSL Zertifikat.

    Dann wollte ich die Nginx Konfiguration anpassen, um NC über ein Unterverzeichnis erreichbar zu machen und bin dabei deiner Anleitung gefolgt.

    Jetzt habe ich das Problem, dass der Webserver nur noch von außen erreichbar ist! Ich kann z.B. scan.nextcloud.com oder auch ssllabs.com das System prüfen lassen und auch vom Handy über das Mobilfunknetz zugreifen, aber aus meinem LAN geht es nicht, es kommt nichts beim Server an, dementsprechend steht auch nichts in den Logs.

    Woran kann das liegen? Bin ziemlich ratlos. :-((

    • Hi Axel, rufe doch mal fail2ban-client status nextcloud auf. Bist Du evtl. gesperrt. Laufen NGINX, PHP, Redis und auch MariaDB…?

      • Axel says:

        Hi! Danke für Deine Antwort.

        Das wird es wahrscheinlich gewesen sein, ich hab es gestern abend nicht mehr probiert, aber heute morgen hat es wieder funktioniert. Klingt ja nach Zeitablauf bei Fail2Ban! Sorry!

        Fail2Ban hatte ich gar nicht auf dem Schirm, weil ich ja mit Deinem Skript installiert habe. Hat also alles Vor- und Nachteile! ;-))

  35. Kees van Leeuwen says:

    Karsten, thanks for the script. I still found some instabillity so i downloaded and read the script. A nice and wel documented scrpt. I changed the location of the jail log script to /var/log/nextcloud.conf but i also found that you installed a lot of php on row 98 but you had left out php7.2 itstelf. I added that also, did a fresh instal, let the script run and ended with a working setup without any of the earlier problems.

    • Hi Kees, PHP will be installed by issuing row 98. Nevertheless, thank you for your information and enjoy your Nextcloud. Cheers, Carsten

      • Kees says:

        Hi Carsten, this “php7.2” is not on line 98. I searched for it and added a space and a p in the search term. Yes search for “php7.2 p” and it does not show up. Because it is also not the last item on the line it really is not in the script.

        I also have an msql error log with a lot of error, but I did not notice anything on the app itself.
        I digged in the my.cnf setting and I noticed that did not setup “binary logging” completely. I found only “binlog_format = mixed” but I missed the other two statements

        log-bin = /var/log/mysql/mariadb-bin
        log-bin-index = /var/log/mysql/mariadb-bin.index
        binlog_format = mixed

        Cheers, Kees

        • It is not mentioned explicitly but will be installed by the php statement in the script. I did never need your maria-db log-bin entries in the past but am not a MariaDB expert.

          • Kees says:

            Hi Carsten, Earlier after my first installation i got an internal server 500 problem with to original script, it took some time after installation but then the problem seemed to matured. When i discovered that php7.0 was missing in a new install, i decided to test it directly after the initial installation. I also tought that it was probably installed as a depency and that it should be there, so i was amazed that that was not the case. When i installed it it proved to be an new additional instalation of this php7.0 but i also did not encounter the earlier setup problems so i found it significant enough to report it. So far the setup runs well, i inspected and tested it but i only did one extra reset.

            Later i discovered a larger then usual error log at the db and i noticed the missing 2 binlog statements. Adding these statements and a reboot did stop the extra logging ((i also created two empty log files be touching them) so i think that i can disregard the earlier part of the log. The database is installed “to speed things up” but if the logging is problematic it will slow everithing down. The reversal from wahat was intended.

            Sorry for being a bit of a nuiseance but i only informed you because i respect the effort you put this setup. I also considered an installation with snap or a docker seetup but the script is working quickly which enabled me to dig sowhat around. ( i found another typo at the creation of the db. a missing space, it states “uroot” where it should be “u root” but that didnt stop the actual creation of the db.)

            Cheers, Kees

  36. Predrag says:

    Hallo Carsten,

    erst einmal ein ganz großes Lob für Deine tolle Arbeit und für Deine Mühe die Du Dir mit den Anleitungen gemacht hast. Die Zeit und der Aufwand sind nicht zu unterschätzen. Vielen Dank hierfür!

    Ich habe Dein Script auch schon angewendet und alles funktionierte fehlerfrei. Leider kann ich das von dem zweiten Script (ssl-certificate.sh), nicht behaupten. Nach dem anwenden des zweiten Scripts, dass scheinbar ohne Fehler durchlief, war meine Nextcloud Installation nicht mehr aufrufbar. Weder intern noch extern. Nur eine weiße Seite. Nach Prüfung der config.php stellte ich fest, dass der Domain Name auf “YOUR.DEDYN.IO” geändert wurde. Wie kann das sein?

    Meine zweite Frage wäre, was muss ich tun um das Script so anzupassen, dass die Installation über eine “subdir” aufrufbar ist? Zudem möchte ich gerne PostgreSQL als DB einsetzen. Wie ist Deine Meinung dazu? Was müsste ich dabei beachten?

    Vielen Dank für Deine Mühe!

    Gruß
    Predrag

  37. Perry Clements says:

    Fantastic work!

    I installed the first script into on fresh 1804 ubuntu server (no graphics) running in a VM under KVM/Qemu, 1604LTS host.

    Everything worked until I added a trusted domain for a local computer, then port 80 and 443 closed.

    This is the command I used to add the trusted domain:

    perry@nc1:~$ sudo -u www-data php /var/www/nextcloud/occ config:system:set trusted_domains 1 –value=G75VW.local
    System config value trusted_domains => 1 set to string G75VW.local

    perry@nc1:~$ sudo -u www-data php /var/www/nextcloud/occ config:system:get trusted_domains
    nc1
    G75VW.local

    The trusted domain seem to add ok but port 80 and 443 closed.

    Any ideas why or hints to troubleshoot?

    • To be honest, no. Sure your ports were closed?! ufw status verbose or netstat -ant | egrep '(:80|:443) .*:.*ESTABLISHED' | awk '{print $5}' | cut -d: -f1 | sort | uniq -c

      • Perry Clements says:

        The ports looks open when I run ufw from inside using SSH but they looked closed from the outside using nmap and the website stops responding after the trusted domain is added.

        Before adding the trusted domain…

        perry@nc1:~$ sudo ufw status verbose
        Status: active
        Logging: on (medium)
        Default: deny (incoming), allow (outgoing), disabled (routed)
        New profiles: skip

        To Action From
        — —— —-
        80/tcp ALLOW IN Anywhere
        443/tcp ALLOW IN Anywhere
        22/tcp ALLOW IN Anywhere
        80/tcp (v6) ALLOW IN Anywhere (v6)
        443/tcp (v6) ALLOW IN Anywhere (v6)
        22/tcp (v6) ALLOW IN Anywhere (v6

        perry@G75VW:~$ nmap 192.168.0.94
        Starting Nmap 7.70 ( https://nmap.org ) at 2018-05-23 12:42 ADT
        Nmap scan report for 192.168.0.94
        Host is up (0.00077s latency).
        Not shown: 997 filtered ports
        PORT STATE SERVICE
        22/tcp open ssh
        80/tcp open http
        443/tcp open https

        Added the trusted domain here…

        perry@G75VW:~$ nmap 192.168.0.94
        Starting Nmap 7.70 ( https://nmap.org ) at 2018-05-23 12:48 ADT
        Nmap scan report for 192.168.0.94
        Host is up (0.00085s latency).
        Not shown: 997 filtered ports
        PORT STATE SERVICE
        22/tcp open ssh
        80/tcp closed http
        443/tcp closed https

        perry@nc1:~$ sudo ufw status verbose
        Status: active
        Logging: on (medium)
        Default: deny (incoming), allow (outgoing), disabled (routed)
        New profiles: skip

        To Action From
        — —— —-
        80/tcp ALLOW IN Anywhere
        443/tcp ALLOW IN Anywhere
        22/tcp ALLOW IN Anywhere
        80/tcp (v6) ALLOW IN Anywhere (v6)
        443/tcp (v6) ALLOW IN Anywhere (v6)
        22/tcp (v6) ALLOW IN Anywhere (v6

        • Perry Clements says:

          Looks like fail2ban was the problem. I unbaned the IP and things are now working.

          2018-05-23 15:36:41,013 fail2ban.jail [1179]: INFO Jail ‘sshd’ started
          2018-05-23 15:36:41,014 fail2ban.jail [1179]: INFO Jail ‘nextcloud’ started
          2018-05-23 15:41:50,470 fail2ban.filter [1179]: INFO [nextcloud] Found 192.168.0.50 – 2018-05-23 15:41:50
          2018-05-23 15:41:50,868 fail2ban.filter [1179]: INFO [nextcloud] Found 192.168.0.50 – 2018-05-23 15:41:50
          2018-05-23 15:46:15,225 fail2ban.filter [1179]: INFO [nextcloud] Found 192.168.0.50 – 2018-05-23 15:46:14
          2018-05-23 15:46:15,791 fail2ban.actions [1179]: NOTICE [nextcloud] Ban 192.168.0.50

  38. Mateusz says:

    Hey Carsten. First of all great work, though I cannot seem to get it to work (PINE64+ board with Ubuntu Xenial Minimal installed) as the browser returns an error (Unsecure connection).
    Referring to the problem above I came up with a suggestion. Are you keen on developing a remove shell script for the whole install? I think it would help many.
    Cheers.

    • No i won’t. But what is your problem in detail? Did you issue the second script or only the first? what errors were written in the log-files (e.g. nginx or letsencrypt or nextcloud.log) Please send me an emal with further informaion i will try to help you. OK? Cheers, Carsten

  39. Zane says:

    Hi, erstmal vielen dank für deine Arbeit!
    Ich würde sehr gerne dein Skript nutzen und würde gerne vorher wissen ob ich noch irgendwas anpassen muss/sollte.
    Ich habe einen ODROID X4U ( Ubuntu Minimal 16.04, armhf, 2GB RAM, 8 Kerne, 8GB eMMC. + 2* 1TB Ext. USB HDDs..)
    Außerdem sollen die “Daten” auf einer der beiden Externen HDDs unter /media/usb1tb/data liegen. (Die andere ist für Backup)
    Sollte ich das im Skript anpassen oder kann ich das erstmal so durchlaufen lassen und hinterher ändern in der PHP.conf ?
    DANKE!

    • Zane says:

      config.php

      • Zane says:

        Ich habe mir das Script nochmal angeguckt, wenn ich das richtig sehe muss ich um das Data Verzeichnis auf die externe HDD zu verschieben hier:

        ###create folders
        mkdir -p /var/nc_data
        ###apply permissions
        chown -R www-data:www-data /var/nc_data

        das Verzeichnis von /var/nc_data auf /media/usb1tb/data ändern

        und hier auch:
        “###create a fail2ban Nextcloud jail
        [nextcloud]
        logpath = /var/nc_data/nextcloud.log”

        Und dann halt noch in der config.php
        Ist das dann so richtig?

  40. Andreas says:

    Hallo Carsten,
    ein super script. es läuft sweit alles, nur wenn ich mir ein SSL Zertifikat erstellen lasse mit dem 2 script habe ich keine Verbindung von ausen mehr.

  41. ylaung says:

    Hi, you have mentioned the precondition for this script as Ubuntu 18.04 LTS OS.
    Will this still work for Ubuntu 16.04 LTS OS?

    • Hi, the current version only supports Ubuntu 18.04.LTS. But you can manually download the Script for Ubuntu 16.04.4 LTS.

      • I added the script for Ubuntu 16.04.4 LTS – looking forward to your feedback.

        • ylaung says:

          Hello Carsten, thanks for the help. I installed it manually following your guide and it works.

      • Felix says:

        Hi, the sh-file is not available on github. I get only an 404 error. My VPS is running with Ubuntu 16.04.5 LTS. Is it possible to run the script with this version?

        • It is not compatible with Ubuntu 16.x!

          • Fail2ban is harden your system: information

            “…Fail2ban scans log files (e.g. /var/log/nginx/) and bans IPs that show the malicious signs — too many password failures, seeking for exploits, etc. Generally Fail2Ban is then used to update firewall rules to reject the IP addresses for a specified amount of time, although any arbitrary other action (e.g. sending an email) could also be configured. Out of the box Fail2Ban comes with filters for various services (apache, courier, ssh, etc).

            Fail2Ban is able to reduce the rate of incorrect authentications attempts however it cannot eliminate the risk that weak authentication presents. Configure services to use only two factor or public/private authentication mechanisms if you really want to protect services. …”

  42. Keven says:

    Hi Carsten
    wäre es denn möglich so ein scipt auch für arch linux arm zu erstellen denn ich setzte auf meinem C2 arch linux ein und finde es etwas aufwendig von den Ubuntu anleitungen auf Arch linux umzudenken, dennoch finde ich all deine anleitungen echt super.
    Gruß Keven

    • Hi Keven, prinzipiell ja und gern, ABER: ich habe kein Arch Linux im Einsatz und es bindet so schon sehr viel Zeit. Also mittelfristig eher nein, langfristig ja. Servus, Carsten

  43. robbie says:

    Hi Carsten,
    Thanks for the script. I’ve tried this twice on digitalocean but all I get is HTTP ERROR 500 when trying to access in the browser. Went through the process, added ssl, and even edited trusted_domains in config.php to reflect the ip, and made sure overwrite.cli.url was pointing to the right domain in config.php. Still no luck.

    • robbie says:

      I found the problem. For some reason, the script changes both the database name and username to nextcloud.example.com in config.php even though I entered just nextcloud. So it was a database error. Fixed it and everything works fine now.

      • Strange. The database will be set to nextcloud hard coded.
        CREATE DATABASE nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
        You were only asked for the name of the db-user and its password.
        Maybe someting went wrong while editing the config.php?

        • robbie says:

          I did enter ‘nextcloud’ for db-user. however, the first time i opened config.php, it had appended .example.com to db-user and db-name. I thought that was the way it should be until i checked the logs and found database connection errors.

          • 4ich says:

            i had it too today but after running the ssl script
            i was wondering why this happens so i found your comment – maybe ill waste some time finding the bug

  44. Michael says:

    Thank you very much for these manual, I have utilized your step-by-step guide before and now these scripts. Great work!
    I came across a small issue on a new installation of Ubuntu Server 18.04 with the ssl-certificate.sh-script.

    With “sh ./ssl-certificate.sh” i would always get the error ‘syntax error: “(” unexpected’. Only when omitting ‘sh’ and just enter ‘./ssl-certificate.sh’ the script would run without issue.

    Just thought to mention this as a small thank you for your great work!

    Cheers

  45. Bernd says:

    Hallo,
    funktioniert das Script auch mit UBUNTU Server 18.04?

    Gruß Bernd

    • Noch nicht verifiziert – daher würde ich es in dieser Version noch nicht für 18.04 LTS einsetzen. Eine neue Version für Ubuntu 18.04 folgt in wenigen Tagen…

  46. Andreas Bonadt says:

    Das ssl-script hat mit meiner Konfiguration nicht funktioniert. Problem war die Zeile:
    sudo -u www-data sed -in ‘s/’$YOURSERVERNAME’/’$DYNDNSNAME’/’ /var/www/nextcloud/config/config.php

    Mein Servername ist nextcloud und mein Datenbanknutzer ist nextclouduser. Der wurde dann zu nextcloud.domain.deuser. In der gleichen Weise wurden die Servernamen (die vorher schon FQDN waren) verändert zu nextcloud.domain.de.domain.de

    Ansonsten waren Deine Scripts super hilfreich! Danke für die Arbeit!
    Viele Grüße,
    Andreas

  47. Jackson Storm says:

    Hi Carsten.

    Vielen Dank für das coole Script. Dieses nimmt mir jede Menge händischer Arbeit ab.

    Ich habe eine Frage dazu:
    Wie wird in diesem Fall genau die Sicherheit des MySQL-Benutzers “nextcloud” (dessen Passwort ja ebenfalls nextcloud lautet) gewährleistet? Ist es nicht sinnvoller, hier ein eigenes Passwort zu vergeben bzw. den Benutzer individiuell zu erstellen und abzusichern?

    Gruß
    Jackson

  48. Japhy says:

    I am new to shell scripts and have never used Nginx. But I would love to try this! One thing: how does Nginx handles vhosts. How does this work if I want to install in a certain vhost?

  49. kelbot says:

    Does this script have a way to setup letsencrypt or would I have to do it manually?

    • currently you have to do it manually:
      sudo -s && letsencrypt certonly -a webroot --webroot-path=/var/www/letsencrypt --rsa-key-size 4096 -d YOUR.DEDYN.IO
      Then modify the file /etc/nginx/ssl.conf regarding your dyn-dns
      sudo -s && sudo vi /etc/nginx/ssl.conf
      I prepared this file already for such a scenario 😉 – you will find commented rows regarding let’s encrypt…

    • From now (just refresh your sources from git) you may request your certificate issuing a script either.

  50. If you use functions you can do more with less. Here is an example:

    update_and_clean() {
    apt update
    apt upgrade -y
    apt autoclean -y
    apt autoremove -y
    }

    Eeach time you want to run those commands you only need to run: update_and_clean – in other words, you can make your code cleaner.

    Welcome to join us on Github: https://github.com/nextcloud/vm 🙂

Leave a Reply

Your email address will not be published. Required fields are marked *