NextCloud bringt ihnen eine erweiterte Funktionalität der Bereitstellung
und Synchronisierung ihrer Daten für Mitarbeiter. NextCloud biete über
Erweiterungen und Plug-Ins die Möglichkeit auch in anderen Teilen ihres
Unternehmens Verbesserungen der Zusammenarbeit zu schaffen. Prinzipiell
ist NextCloud aber ihre Private Cloud - Sie wissen, wo die Daten liegen
und Sie wissen wer darauf zugreifen kann und darf.

## Vorbereitungen

NextCloud benötigt ergänzend zu dem evtl. massiven Speicherplatzbedarf
auch noch eine funktionierend SQL-Datenbank. Hierfür wird der reine
Open-Source mySQL Ableger MariaDB empfohlen.

## Installation Datenbank mit Webmanagement und weiterer benötigter Komponenten

```bash
sudo apt install apache2 mariadb-server libapache2-mod-php php php-mysql php-xml php-gd php-curl php-zip php-mbstring php-intl php-bcmath php-gmp php-imagick php-redis redis-server php-ldap php-smbclient unzip phpmyadmin
```

Abfragen nach dem zu verwendenden Webserver: apache2

Konfiguriere phpmyadmin: Ja Datenbank Konfigurieren

Passwort setzen

Im Anschluss muss die Datenbank noch gesichert werden um etwaigen
Missbrauch zu unterbinden und auch das Root-Passwort wird hier gesetzt

```bash
sudo mysql_secure_installation
```
1. Abfrage des aktuellen Passwortes NICHTS EINGEBEN NUR BESTÄTIGEN

2. Soll ein Root-Passwort gesetzt werden? Y

3. Passwort eingeben und wiederholen

4. Soll der Anonyme User entfernt werden? Y

5. Remote-Login für Root deaktivieren? Y

6. test-Datenbank entfernen? Y

7. Änderungen übernehmen? Y

Jetzt muss einmalig in die SQL-Datenbank der Login für root über das
Webinterface aktiviert werden:

````bash
sudo mysql -u root -p
````

````sql
use mysql;
update user set plugin='' where User='root';
flush privileges;
\q
````

Zugriff auf ihre Datebank per Webinterface:

http://IP/phpmyadmin

Legen Sie einen neuen Nutzer für NextCloud an und gewähren Sie dem Nutzer alle Rechte an seiner Datenbank „Nextcloud".
/newpage

## NextCloud installieren

NextCloud bietet derzeit keine externe Paketquellen an. Deshalb muss Nextcloud als Zip-Archiv heruntergeladen werden und im Anschluss passend entpackt werden.

```bash
wget https://download.nextcloud.com/server/releases/latest.zip
unzip latest.zip
sudo cp -r nextcloud /var/www/
sudo chown -R www-data:www-data /var/www/nextcloud/
```

Jetzt legen wir noch ein Separates Datenverzeichnis an. Dies bringt den Vorteil, dass dieses sich auch auf einer separaten Partition befinden kann.

```bash
sudo mkdir /srv/cloud
sudo chown www-data:www-data -R /srv/cloud
```

erstellen ````/etc/apache2/sites-available/nextcloud.conf```` mit Inhalt:
```apacheconf

<VirtualHost *:80>
    DocumentRoot "/var/www/nextcloud"
    ServerName nextcloud.hensel.dom
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
        <Directory /var/www/nextcloud/>
        Options +FollowSymlinks
        AllowOverride All
            <IfModule mod_dav.c>
            Dav off
            </IfModule>
        SetEnv HOME /var/www/nextcloud
        SetEnv HTTP_HOME /var/www/nextcloud
        Satisfy Any
        </Directory>
</VirtualHost>

```
Speichern und aktivieren mit

```bash
sudo a2ensite nextcloud
sudo a2dissite 000-default.conf
```

Aktivieren der benötigten Apache2-Module

```bash
sudo a2enmod rewrite
sudo a2enmod headers
sudo a2enmod env
sudo a2enmod dir
sudo a2enmod mime
sudo a2enmod setenvif
sudo a2enmod ssl
sudo systemctl restart apache2
```

Nun können Sie per http auf den Webserver zugreifen 
http://nextcloud.hensel.dom

![Erster Login, Eingabe der Admindaten](./nextcloud-ldap-media/image1.png){ align=left }

Hier legen Sie nun das Administrator-Konto ein, wobei natürlich Admin und ein schwaches Passwort hier Tabu sind.

Geben Sie als Datenverzeichnis das gerade angelegte Verzeichnis an und geben Sie die entsprechenden Daten die beim Anlagen der Datenbank gesetzt wurden ein.

Nach dem Klick auf Installation abschließen werden Sie auch schon ihr eigenes Datenverzeichnis befördert, wobei ihnen erst noch ein Hinweis angezeigt wird wie Sie Desktop- und Mobile-Apps nutzen können.

Wechseln Sie als nächstes in der rechten oberen Ecke in das Administrator-Menü.

Im oberen Bereich begrüßen Sie dabei gleich einige Konfigurationsfehler:

Wir nutzen noch kein SSL und keinen Cache.

Kümmern wir uns erst einmal um den Cache, wobei wir den Redis-Server bereits installiert haben. Somit muss nur noch die Nextcloud-Configuration angepasst werden:

```bash
sudo nano /var/www/nextcloud/config/config.php
```
Fügen Sie eine weitere Zeile vor der schließenden Klammer ein:
...
````php
'dbtype' => 'mysql',
  'version' => '12.0.0.29',
  'dbname' => 'NextCloud',
  'dbhost' => 'localhost',
  'dbport' => '',
  'dbtableprefix' => 'oc_',
  'dbuser' => 'NextCloud',
  'dbpassword' => 'passw0rd#',
  'logtimezone' => 'UTC',
  'installed' => true,
  'memcache.distributed' => '\OC\Memcache\Redis',
  'memcache.local' => '\OC\Memcache\Redis',
  'memcache.locking' => '\OC\Memcache\Redis',
  'redis' => array(
     'host' => 'localhost',
     'port' => 6379,
     ),
);
````
Laden Sie Sie Administrator-Seite neu -- Der Fehler sollte weg sein.

## SSL-Zertifikat

Für die https / SSL Übertragung benötigen wir noch ein selbst-signiertes Zertifikat welches dem Browser übergeben werden kann.

```bash
sudo -s
openssl req -new -x509 -days 365 -nodes -out /etc/ssl/certs/NextCloud.pem -keyout /etc/ssl/private/NextCloud.key
```
### Konfiguration Apache für das SSL-Zertifikat

Konfiguration der Benötigten Module:

Bearbeiten der Datei ````/etc/apache2/sites-available/nextcloud.conf````

````apacheconf
<VirtualHost *:80>
    Redirect permanent / https://nextcloud.hensel.dom
</VirtualHost>

<IfModule mod_ssl.c>
    <VirtualHost *:443>
        SSLEngine on
        SSLCertificateFile      /etc/ssl/certs/NextCloud.pem
        SSLCertificateKeyFile /etc/ssl/private/NextCloud.key

        <IfModule mod_headers.c>
            Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
        </IfModule>

        DocumentRoot "/var/www/nextcloud"
        ServerName nextcloud.hensel.dom
        ServerAlias www.nextcloud.hensel.dom

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        <Directory /var/www/nextcloud/>
            Options +FollowSymlinks
            AllowOverride All
            <IfModule mod_dav.c>
                Dav off
            </IfModule>
            SetEnv HOME /var/www/nextcloud
            SetEnv HTTP_HOME /var/www/nextcloud
            Satisfy Any
        </Directory>
    </VirtualHost>
</IfModule>

````
Aktivieren:

```bash
sudo a2ensite default-ssl.conf
sudo systemctl restart apache2
```

Apache Neustarten und Fertig

## CronJob für regelmäßige Aktualisierung der Datenbank

NextCloud aktualisiert bei jedem Zugriff auf das Webinterface die Datenbank, allerdings kostet dies wertvolle Sekunden bei einem „Wohlfühl-Interface" daher aktivieren Wir einen [CronJob](../basics/Automatisierung mit cron und systemd.md)

Die Aktion soll vom User www-data ausgeführt werden

```bash
sudo crontab -u www-data -e
```
nun können wir einen neuen Job einfügen:

```
\*/15 \* \* \* \* php -f /var/www/nextcloud/cron.php
```
Wählen Sie nun im Administrations-Bereich von NextCloud bei Cron entsprechend auch cron aus.

Im Anschluss am besten einmal reboot

## LDAP

Konfiguration smb.conf bei einem Samba AD-DC
````ini
[global]
ldap server require strong auth = no
````
````bash
sudo systemctl restart samba-ad-dc
````
Im Anschluss daran suchen wir in den NextCloud-Apps nach dem LDAP user and group backend:

![Auswahl LDAP-APP](./nextcloud-ldap-media/image2.png)

Aktivieren Sie die App und wechseln Sie wieder in den Administrationsbereich. Dort finden Sie einen neuen Bereich LDAP.

![Einrichtungstab Server](./nextcloud-ldap-media/image3.png)

Die benötigten Informationen finden Sie in ihrer Serverkonfiguration. In diesem Beispiel:

* FQDN + Port des AD
* Nutzer,Gruppe,Domäne Dieser Account muss keine Admin-Rechte haben sollte aber eigener Account sein. 
* Passwort
* Der Ort in der Domäne an der die User zu suchen sind

![Einrichtungstab Benutzer](./nextcloud-ldap-media/image4.png)

Welcher Typ soll abgefragt werden? Hier empfiehlt sich eine Separate Gruppe für Nutzer anzulegen welche NextCloud nutzen sollen. Klicken Sie am unteren Rand auf „Einstellungen prüfen und Benutzer zählen" um ihre Konfiguration zu überprüfen.

![Einrichtungstab Anmeldeattribute](./nextcloud-ldap-media/image5.png)

Hier definieren Sie mit welchen Möglichkeiten sich der Nutzer Authentifizieren kann. Wählen Sie die sAMAccountName aus, um dem Nutzer zu ermöglichen Sich direkt mit seinem Windows-Login anzumelden.

![Einrichtungstab  Gruppen](./nextcloud-ldap-media/image6.png)

Hier definieren Sie welche Gruppen ihres Servers in NextCloud übernommen werden sollen um ihre Nutzer auch in NextCloud passend sortieren zu können und auch Gruppenspezifische Externe Laufwerke einzubinden.

![Einrichtungstab Expert](./nextcloud-ldap-media/image7.png)

In der Benutzerübersicht sollen alle Nutzer mit ihrem Benutzernamen und nicht mit der UUID angezeigt werden. Somit ist es auch für die Nutzer einfacher, sich gegenseitig zu finden.


[PDF herunterladen](nextcloud-ldap.pdf){ .md-button }
