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. 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 ssl-certificate-debian.sh
        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
            restart_all_services
            ...

            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 ssl-certificate-debian.sh 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
              Alex

    • Mark Meier says:

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

  2. 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!

  3. Vipernet says:

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

  4. Mark Meier says:

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

  5. 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:

      [DEFAULT]
      # “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 = 127.0.0.1 192.168.1.0/24 8.8.8.8

      # This will ignore connection coming from common private networks.
      # Note that local connections can come from other than just 127.0.0.1, so
      # this needs CIDR range too.
      ignoreip = 127.0.0.0/8 10.0.0.0/8 172.16.0.0/12 192.168.0.0/16

      Source: https://www.fail2ban.org/wiki/index.php/Whitelist

  6. x says:

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

  7. 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?

  8. 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?

  9. 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=https://192.168.2.3

    The other issue is
    /usr/local/src/install-nextcloud/upgrade–.sh

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

    It should be
    /usr/local/src/install-nextcloud/upgrade-.sh

    Many thanks for your work

    Roland Andersson

Leave a Reply

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