Build your Nextcloud server using one shell script

Ubuntu 18.04.x or Debian 9.x Stretch

Last Updates:

March 12th, 2019:
– new scripts available (v. 3.0) – now NGINX with TLS v. 1.3  per default
updateable using “sudo apt update && sudo apt upgrade -y” except ARM64-environments
– removed stable-scripts


From my perspective the requirements for this guide may be rated as low: you only have to

  • provide a 64Bit Server (e.g. Intel NUC),
  • forward two ports (80 and 443) from internet (your router e.g. FritzBox or Speedport) to your internal Nextcloud server,
  • install the operating system Ubuntu Bionic Beaver 18.04 LTS (64Bit) or Debian Stretch 9.x (64Bit).
  • and finally 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
    mv /var/www/nextcloud /var/www/nextcloud.bak

  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 scripts called and will install your self hosted Nextcloud within 10 minutes, fully prepared for Ubuntu 18.04.x or Debian 9.x Stretch environments and will consist of:

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

The third shell script is for Ubuntu Server based on ARM64 (

  • NGINX will be compiled and updates will take more effort in future because you have to re-compile NGINX for TLS v. 1.3 purposes!

Ready to go (?) … let’s start:

(1) Build your self hosted Nextcloud server

sudo -s
apt purge mysql* nginx* php* redis* -y && apt autoremove -y
mv /var/www/nextcloud /var/www/nextcloud.bak
apt update && apt upgrade -y && apt install git -y cd /usr/local/src git clone cd install-nextcloud chmod +x *.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 is already up, optimized and running!

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


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


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

(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 “”.

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
chmod +x /usr/local/src/install-nextcloud/ssl/

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

su -
chmod +x /usr/local/src/install-nextcloud/ssl/

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

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: 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)

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

  • /maintenance/

    status of the current banned ip’s

  • /maintenance/ubuntu/

    rebuild redis and nextcloud indices on Ubuntu

  • /maintenance/debian/

    rebuild redis and nextcloud indices on Debian

  • /maintenance/

    restart all Nextcloud related services

  • /maintenance/

    let’s encrypt certificate renewal automatism for cron

  • /maintenance/ubuntu/

    update your Nextcloud server and apps on Ubuntu

  • /maintenance/debian/

    update your Nextcloud server and apps on Ubuntu

  • /ssl/

    request your ssl certificates from Let’s Encrypt on Debian

  • /ssl/

    request your ssl certificates from Let’s Encrypt on Ubuntu

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.

235 Responses

  1. Fernando says:

    Hi Carsten
    Thanks for your script. You’ve saved me hours of work.
    I would like to access my nextcloud from a subfolde. Something like
    How could I modify the script to do so?

    • Please keep the script as it was. Made the changes afterwards as described in the howto: subdir

      • Fernando says:

        Thanks!. I’ve tried doing that but I’ve got a page saying “File not found” when I try to access to the page using and if I try to access via it only prompts me to download the index.php file.

  2. Andreas says:

    Hallo Herr Rieger,
    ich sehe gerade, dass die für einen fertigen cronjob ist und nicht wie ich dachte zum Anlegen so eines cronjob dient. . Haben Sie eine detaillierte Anleitung, wie ich so einen cronjob anlege, die ssl-reneeal.ssh da rein kriege und dann noch wöchentlich automatisch ausgeführt wird??

  3. Andreas says:

    Hallo Herr Rieger,
    vielen Dank für dieses Script. Die Installation hat super funktioniert. Auch der Punkt 2 (Ubuntu 18.04.02 LTS) mit Let’s Encrypt hat geklappt. Wenn ich nun aber aus Punkt 3 die wöchentliche Erneuerung über das Script starten möchte, erhalte ich zuerst die Meldung „Pfad oder Datei“ existiert nicht. Ich habe dann bei der Befehlseungabe „maintainance“ geändert in „maintenance“ und erhalte dann „Permission denied“. Was mache ich falsch?
    Meine zweite Frage ist: Was kann ich alles mit “sudo apt update && sudo apt upgrade -y” updaten? (Nur Ubuntu oder Nextclaod oder beides)
    Dann noch eine (im Moment) letzte Frage: Das Script „/maintainance/ubuntu/“ ist zum Nextcloud Update oder für das Ubuntu Update oder für beides. Entschuldigen Sie meine Fragen, aber Linux ist für mich absolutes Neuland.

  4. Jan says:

    Hello Carsten,
    i installed nextcloud by your arm64-script but changed your Data-directory /nc-data to a directory on a connected and mounted SSD. So far, the installation with the script worked well. But at the end of installation i had the error in my bash (marked red):
    There are no commands defined in the „config:system“ namespace.
    Nextcloud is not installed – only a limited number of commands are available

    Do you know something about this error?

    First i could open nextcloud in my browser at my let’s encrypt secured domain and localhost. But now one day later i even couldn’t connect via putty and even not via browser.

    • The error is related to your changes.
      When did you change the data-dir, before (mods to the script) or after the installation? I guess, you forgot to change the config.php either?
      I cannot see red comments here…sorry.

      • Jan says:

        I changed the data-dir in the script (3-4 times \nc-data was mentioned there), so before the installation.

        • And did you change the entries belonging to the config.php as well?

          • Jan says:

            No, i didn’t change them. I couldn’t recognize any entries in the config.php that would have effect to a data-directory which is at external storage. Do you mean

            quota_include_external_storage’ => false,

            entry? Or what changes do i have to make there? Thank you for your help! For your information: The whole OS and software (ubuntu, nginx, php, mariaDB…) is should be stored on the build-in storage of the single board computer. It’t just the data-directory, which i would have on external storage.

  5. Willi says:

    thank you for this script. Is there anyway to support you in your ongoing work on this script? Say, can I “buy you a coffee” or something like this?


  6. Mark says:

    Hi Carsten,

    Thank you for your great work! I’m very happy with my nextcloud. I also have two questions:
    I tried to connect the windows client software to synchonize nextcloud with a folder on my computers HDD. I can setup my nextcloud server in the software but the synchonization does not start. It says ‘no connection with nextcloud on https://nextcloud.myadress.xx. Is there any chance this has something to do with the installation of nextcloud using this script?
    Another question is about upgrading nextcloud itself. It is been updated with the apt update and apt upgrade commands? I hope you can help me with these last 2 things. Many thanks!

    • Connection: As long as you are able to logon to your Nextcloud directly not. Press F11 to have a look in the clients logfile.
      Upgrade: You’ll find a procedure to upgrade Nextcloud here

  7. Will says:

    Do I need to replace YOUR.DEDYN.IO with my own domain name before run the scripts? Thanks you so much!

  8. Stijn says:

    Hi Carsten,
    Thanks for the awesome script, it made the initial setup really easy. Yesterday the upgrade to nginx 1.15.9 broke TLS1.3 support. No worries, I managed to fix it. Question tho: why are you not using the nginx-mainline ppa of odrej? I see you are already using the php ppa of odrej. This would make updating easy with TLS1.3 support. This is what I did to fix the installation. Anyway, thanks, I learned a lot from analyzing your script. Keep up the good work.
    Best regards

  9. zav says:

    I was using an older version of this script that installed nginx version: nginx/1.15.7 and PHP 7.2.15-0ubuntu0.18.04.1

    It seems it built nginx from source to get TLS 1.3 and all that good stuff. But now what do I do about updates ? nginx has been excluded from apt updates and re-running the install script destroys the instance. What’s the best upgrade method to get to PHP 7.3 and current rev. of nginx ?

    • To update your NGINX you could issue apt-mark unhold nginx && apt upgrade -y but by design (default) you won’t gain TLS v.1.3 any longer and have to remove the TLS 1.3 section from /etc/nginx/ssl.conf. Or recompile NGINX as described.
      Regarding PHP update. Follow the install instructions and change the /etc/nginx/nginx.conf properly
      upstream php-handler {
      server unix:/run/php/php7.3-fpm.sock;

      I added a new script at github. No more compilations – more flexible in future regarding upcoming updates.

      • zav says:

        That is excellent! Thank you!

        As for my broken install I still have all the old MySQL data and the storage is S3 so i will try and recover that install by just reinstalling with your new script and pointing at the old database and storage back-end.

  10. Jürgen says:

    erst mal: Danke für das Skript. Hat die Installation echt einfach gemacht.

    Allerdings frage ich mich gerade, inwieweit die “normalen” Update- und Remove / Purge Mechanismen von APT etc ausgehebelt wurden?
    Konkret habe ich das Problem, dass ich momentan beim Versuch des Updates über das WebInterface eine Fehlermeldung bekomme.

    Create backup
    Could not copy “/var/www/nextcloud/config/config.php.orig” to “/var/nc_data/updater-oco28fbd1hsf/backups/nextcloud-”. Source /var/www/nextcloud/config/config.php.orig is not readable. Destination /var/nc_data/updater-oco28fbd1hsf/backups/nextcloud- is not writable

    Kann man das schnell beheben?

    Danke und Grüße,


  11. Roman says:

    Hallo Carsten,

    die cronjobs mobben mich gerade.
    Zum Testen des Scrips habe ich folgenden Cronjob gebastelt:
    45 8 24 2 * /usr/local/src/install-nextcloud/maintenance/
    Die Berechtigung auf sieht wie folgt aus: -rwxr-xr-x root root
    Woran sehe ich dass es funktioniert? Muss sich der Zeitstempel von “/etc/letsencrypt/live/my.domain” ändern? Wenn dem so ist – geht es bei mir nicht.

    Die von dir unter beschriebene funktioniert dagegen bestens.
    “48 8 24 2 * /usr/local/src/install-nextcloud/maintenance/” hat die beiden Dateien unter “/app/onlyoffice/DocumentServer/data/certs” anstandslos ersetzt und onlyoffice neugestartet.

    Zum konkreten Plan:
    Das Zertifikat soll sich, nachdem der Test erfolgreich gelaufen ist, einmal Monatlich erneuern und fünf Min. später für Onlyoffice bereitstehen.
    5 22 2 * * /usr/local/src/install-nextcloud/maintenance/
    10 22 2 * * /usr/local/src/install-nextcloud/maintenance/


    • Empfehlung:
      sudo -s
      lege das Script unter /root ab und setze die Permissions so: chmod 0600 /root/ && chmod +x /root/ In der crontab steht dann:
      @weekly /root/ >/home//renewal.txt 2>&1
      Dann siehst Du in der Datei /home//renewal.txt ob und wie der Job gelaufen ist.
      Mittels /root/ >/home//renewal.txt 2>&1 kannst Du es dann manuell testen.

      • Roman says:


        das Ergebnis unter /home//renewal.txt sieht, ich glaube, gut aus:

        user@server:~$ cat /home//renewal.txt
        Saving debug log to /var/log/letsencrypt/letsencrypt.log
        – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –
        Processing /etc/letsencrypt/renewal/my.domain.conf
        – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –
        Cert not yet due for renewal
        – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –
        The following certs are not due for renewal yet:
        /etc/letsencrypt/live/my.domain/fullchain.pem expires on 2019-05-24 (skipped)
        No renewals were attempted.

        Was nicht so gut ist, dass “/root/ >/home//renewal.txt 2>&1” nicht zum Ende kommt.
        rootuser@server:/root# /root/ >/home//renewal.txt 2>&1
        ^C <– Abgebrochen

        Der nginx Dienst starten auch nicht wieder von selbst und nach einem manuellen Start per "service nginx start" sehe ich beim Aufruf der Domain im Browser nur eine weiße Seite.

        Ist jetzt keine Katastrophe. Ich habe vorher einen Snapshot erstellt und kann jederzeit zurück aber wenn sich das iegendwie debuggen lässt würde ich es gerne Mal versuchen. Ich fürchte nur, dass meine Linuxkenntnisse hier zu Ende sind.

        • Roman says:

          Bevor Du dich sinnlos auf die Suche machst – ich habe den Test nochmal versucht und er ist durchgelaufen. Ich war wohl zu ungeduldig. Allerding lief es ca. 50 Minuten. Muss das so sein?

          Falls es irgendwie von Bedeutung ist. Die VM läuft auf VMWare mit 4 Kernen (Atom E3845) und 4gb RAM. Kein Monster aber für meine Bedürfnisse ausreichend.

  12. Adrian Fürer says:

    Herzlichen Dank, für dein Script und deine Mühe!!!
    Seit Ubuntu 18.04.2 draussen ist scheint das Script momentan nicht mehr zu funktionieren. MariaDB Installation startet nicht mehr.
    Es spielt keine Rolle ob man als ISO ubuntu- oder ubuntu-18.04.2-live-server-amd64.iso nutzt, da ja während dem Sript mehrmals hochgepatched wird.
    Kannst du dir dies bitte ansehen?
    Danke und Gruss

  13. Perry says:

    Update to 15.04 failed during the backup step with this message:

    Create backup
    Could not copy “/var/www/nextcloud/config/config.php.orig” to “/var/nc_data/updater-ocsd39xqqozo/backups/nextcloud-”. Source /var/www/nextcloud/config/config.php.orig is not readable. Destination /var/nc_data/updater-ocsd39xqqozo/backups/nextcloud- is not writable

    The ownership of the file config.php.orig was found to be root:root.

    Fixed the problem by running this command:
    chown -R www-data:www-data /var/www/nextcloud/config

    Credit for solution goes to:

    Any idea why the file was root:root?

  14. Garry Lill says:

    Hi Carsten,
    Thank you for the huge amount of work you have put into this. I loaded Nextcloud onto a HP server with Ubuntu server 18.04.1 and it went straight through without any problems.

    Thank you
    Garry Lill

  15. Brian Davies says:

    Hi Carsten:
    Great scripts. i used the Ubuntu script in a Proxmox VM and it work great.
    Just used the Debian script on 9.7 iso and again , smooth as silk.
    Sorry to see that negitive comment. ( It’s free my lord!)
    Thank you for taking the large a mount of time to do this, very nice work sir!
    Thank you from Canada eh!

  16. Perry says:

    I had trouble with the Debian script so I switched to the Ubuntu script and that worked.

    I don’t know why the Debian script failed but I found this reference to Ubuntu on line 82:
    apt-key adv –recv-keys –keyserver 0xF1656F24C74CD1D8

    Many thanks for making these wonderful scripts available.

    • You switched from Debian to Ubuntu – sure you were on Debian before? The reference to Ubuntu is correct: MariaDB Repos. What kind of troubles occured?

      • Perry says:

        I started with a fresh Debian VM on a Dell R410 running Ubuntu 16.04 KVM. During the install I saw only one Press ENTER to continue with MariaDB, no mangenta screens. When all was finished I opened the browser and found nextcloud but the database was not configured.

        I then setup a fresh Ubuntu 18.04 VM and used the Ubuntu script. This time I saw the magenta Press ENTER screen I think 3x and when I opened the browser I found nextcloud was configured as you show it in your screen shot.

        I didn’t spend a lot of time troubleshooting and deleted the Debian VM so I have not record of the install. I saw that another person mentioned problems with the Debian script so I thought I would share my experience.

  17. Norbert says:

    Danke für das Super script
    Ich habe eigentlich nur ein Problem
    Wo ich was eingeben muss bzw. bei der Installation nicht eingeben muss damit es am Ende (beim ersten aufrufen des Web Interfaces funktioniert
    Will heissen bei der Abfrage der mariadb Parameter bzw. des nextcloud administrator accounts während der Installation
    Bitte noch einmal detailierter erklären

    • Die Dialoge in den blau oder magenta farbenen Screens sollen nur bestätigt werden:
      “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.”
      Alle anderen Dialoge müssen qualifiziert durchgeführt werden.

  18. Helio4k says:

    I guess nobody is experiencing issues with large files not being able to download mine stops exactly at 1095mb and I cant seem to find solution for that problem, any help would be appreciated.
    Thank You

  19. antbel says:

    Could you replace in the ubuntu script line 345

    Some private cronjobs were good access
    Good Luck

  20. Aleksei Nosov says:

    Hello, Carsten!
    Thank you for the manual!
    During the installation on odroid HC2 I have the following issue:

    The following packages have unmet dependencies:
    mariadb-server : Depends: mariadb-server-10.3 (>= 1:10.3.12+maria~bionic) but it is not installable

    So installation fails. Do you have any suggestions how to fix it?

  21. Vipernet says:

    Hi Carsten,
    kann es sein, das bei der neusten Script Version ein paar “\” zuviel entfallen sind?
    insbesondere jene vor einem “$”, wie bei “try_files $uri /index.php$request_uri;”
    Cat macht beim Ausführen daraus nur noch ein “try_files /index.php;”
    Beste Grüße

  22. ncadmin says:

    mir scheint die Zeile 96 in ./ nicht passend zu sein, da hier eine Fehlermeldung angezeigt wird, da nextcloud ja noch gar nicht installiert ist

    • Das ist zwingend erforderlich für das Kompilieren des NGINX!
      Zeile 96: cp /usr/local/src/install-nextcloud/maintainance/rules.nginx /usr/local/src/nginx/nginx-$NGINXVER/debian/rules

  23. Helio4k says:

    Anybody else is having issues downloading large files from your own Nextcloud, it seams no matter how they all time out at 1GB and the files are corrupted. Any help would be appreciated.
    BTW I am a noob it this.
    Thank You

  24. vipernet says:

    Hallo Carsten,
    tolle Arbeit-das script ist klasse.
    Es funktioniert bei mir prinzipiell auf 2 Arm64 SoCs mir Usb-Hdd unter Bionic.

    Doch im laufenden Betrieb friert irgendwann das ganze Linux sowohl bei einem Odroid C2 als auch einem Rock64 ein.
    Kannst Du bestätigen, dass es bei Deinem C2 mit dem Bionic von Hardkernel auf Dauer funktioniert?

    Danke & beste Grüße

  25. Alex says:

    Hallo Carsten,

    ich bins mal wieder :).

    Würde gerne Fragen ob du schon mal ein Problem gehabt hast, wo das Aufrufen von Nextcloud im Chrome zu Problemmen geführt hat?
    Ich bin gerade darauf gestossen (auch mit anderen Leuten getestet) das es beim Chrome das Aufrufen der Seite nicht nicht funktioniert.
    Genauer gesagt zeigt mir Chrome den Fehler ERR_SPDY_PROTOCOL_ERROR.

    Ein Kollege hat ebenfalls eine Nextcloud allerdings mit älterem PHP und der Nginx v1.14.1 und bei Ihm gibt es keine Probleme mit Chrome wie bei mir.

    Vielen Dank im Voraus für dein Feedback


  26. Alex says:

    Hallo Carsten, vielen Dank für das mega Skript ist echt eine erleichterung für denjenigen der sich noch nicht so gut auskennt.

    Leider habe ich folgendes Proble nach der Installation, dass ich mir nicht erklären kann und wo ich hoffe du mir behilflich sein kannst.

    Nach dem die Installation durch ist, kann ich mich zunächst mit dem admin Konto anmelden und mich umschauen.
    Anschließend wenn ich mich auslogge und dann wieder einlogen möchte, geht das nicht mehr. Die Eingabefelder werden geleert und nichts passiert.

    Ich habe diesbezüglich auf einigen Seiten darüber gelesen, dass es in den älteren Version von Nextcloud einen Bug gab bzw. irgendwelche Inkompatibilitäten mit der PHP 7.2 Version. Sollte aber in der aktuellen Ausgabe bereits gelöst sein.
    Die Bugs waren untem dem Sammelbegriff “loop login” oder ähnlich zu finden.

    In den nginx access bzw. error logs habe ich für mein verständniss nichts gefunden was ichals Fehlerquelle identifizieren könnte. Möglicherweise wirdst du daraus schlauer oder kennst andere Stellen wo man nachgucken könnte.
    In jedem Fall danke ich im Voraus für deine Antwort und hoffentlich eine Hilfestellung.

    • Hallo Alex, nutze mal bspw im Firefox die Konsole (F12) und rufe die Startseite auf. Kommen Fehler?

      • Alex says:

        Hallo Carsten,
        danke für deine Rückmeldung ich habe es mittlerweile selbst gelöst.
        Es lag daran, dass ich den Ordner nc_data über das mergerfs mit einem Anderen Ordner verbinden wollte, damit ich mehr Speicherplatz habe.

        Die lösung nach dem mounten mit mergerfs war,

        services nginx stop && services php7.3-fpm stop
        # mysql -u root -p
        -> use nextcloud;
        -> delete from oc_filecache;
        -> exit
        # services nginx restart && services php7.3-fpm restart

        Noch eine kleine Anmerkung zu deinem Skript
        Wenn man diesen auführt und versucht den Domainnamen im Browser einzugeben, gibt Nextcloud einen Fehler aus, dass die eingegeben Adresse nicht zu den Tursted Domains gehört.
        Nach dem Eintragen des Domainnamen in /var/www/nextcloud/config/config.php und dem Restart von nginx und dem php funktioniert alles einwandfrei.

        Vielleicht möchtest du das in dein Skript aufnehmen, damit es beim Ausführen automatisch passiert.

        • Das werde ich machen, danke für Dein Feedback!

          • Ich war soeben bei github und habe gesehen, dass es bereits wie folgt
            ###adjust Nextclous config.php to the new domain name
            sudo -u www-data php /var/www/nextcloud/occ config:system:set trusted_domains 1 --value=$DYNDNSNAME
            sudo -u www-data php /var/www/nextcloud/occ config:system:set overwrite.cli.url --value=https://$DYNDNSNAME
            ###restart the cloud environment

            enthalten ist

            • Alex says:

              Hallo Carsten,

              soweit ich das verstehe, geht es um den allerersten Eintrag, also trusted_domains 1 der in die config.php geschrieben wird.
              Ich hatte zuerst auf meiner VM eine Installation gemacht, die zuerst die interne IP meiner VM im trusted_domain 1 der config.php hineingeschrieben hat.

              Nach dem ich das Skript ausgeführt hatte, um für meine DynDNS Adresse ein Zertifikat zu erstellen, um so auf meine VM von Außen zugreifen zu können, wurde der trusted_domain 2 Eintrag in config.php nicht mit meiner DynDNS Adresse verfollständigt und blieb leer. Darum habe ich es dann selbst eingefügt und es hat dann funktioniert.

              In dem von dir erstellten Skript zur ssl Zertifizierung, ist ebenfalls nur der Eintrag für trusted_domains 1 vorhanden. Ich weiß nicht wie hoch der Aufwand wäre, um eine Prrüfung zu machen, ob der trusted_domain 1 Eintrag derselbige ist wie die zur Zertifizierung genannte DYNDNSNAME. Sofern der Eintrag in trusted_domain 1 vom eingegebenen DYNDNSNAME abweichend ist, soll dann trusted_domain 2 = –value=$DYNDNSNAME angelegt bzw. verfollständigt werden.

              Viele Grüße

    • Mark Meier says:

      Are you planning to do an optional automatic install script for Elasticsearch with Docker?

  27. Felix says:

    Vielen Dank für dieses klasse Script. Habe es mal testweise auf einem angemieteten V-Server durchlaufen lassen um Nextcloud zu testen. Insgesamt haben Sie wirklich an alles gedacht. Großes Lob. Inklusive Firewall und Zertifikat für https.
    Allerdings habe ich mich letztendlich gegen Nextcloud entschieden, da mich die Performance und vor allem viele Fehlermeldungen bei der Synchronisierung am Desktopclient verunsichern. Letztendlich habe ich mir nun Seafile installiert und bin absolut begeistert davon. Vielleicht sollten Sie auch mal die ein oder andere Beschreibung hier mit aufnehmen. Seafile lässt isch zwar nicht so vielseitig wie Nextcloud mit Apps erweitern, hat aber dennoch seine Stärken in der Synchronisierung und Freigabe von Daten bzw. Ordnern. Auch das Webinterface ist sehr performant und übersichtlich. Es lohnt sich!

  28. Vipernet says:

    Hi Carsten,
    is there a reason, why you don’t use the NGINX and OpenSSL binary package of
    They seem to have the same versions: 1.15.8 and 1.1.1a.

  29. Mark Meier says:

    Do you have an install script for phpMyAdmin which can be run after your Nextcloud installation script?

  30. Chris says:

    My IP keeps getting added to the fail2ban ban list, even after removing it, seems to be re-added the very next day. I’m still in a testing phase so often I just have myself logged in on an idle Chrome tab. Any thoughts on white-listing my IP or changing the sensitivity?

    • Don’t forget Nextclouds Bruteforce_app – you can whitelist your subnet either within your Nextcloud adminpanel. Regarding fail2ban:

      # “ignoreip” can be an IP address, a CIDR mask or a DNS host. Fail2ban will not
      # ban a host which matches an address in this list. Several addresses can be
      # defined using space separator.

      ignoreip =

      # This will ignore connection coming from common private networks.
      # Note that local connections can come from other than just, so
      # this needs CIDR range too.
      ignoreip =


  31. x says:

    i can confirm you script in debian is neither automatic neither works, waste of time

  32. Mark Meier says:

    Is there also a Nextcloud installationsscript for Centos?
    Do you have an optimation script if there are a huge amount of files within the Nextcloud to scan and search?

  33. Chris says:

    Thank you for the script and how-to. Would you be willing to expand on steps needed to automate the renewal of the LetsEncrypt certificate?

  34. Roland Andersson says:

    Hi Carsten

    I detected two errors in the instructions.

    In the second line to update trusted domains in order to be able to access the server there is a missing space between www-data and php.
    It should be
    sudo -u www-data php /var/www/nextcloud/occ config:system:set overwrite.cli.url –value=

    The other issue is

    I just copied the line and changed and it did not work. The reason is the dash instead of hyphen.

    It should be

    Many thanks for your work

    Roland Andersson

Leave a Reply

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