.. sectionauthor:: `@rettich <https://ask.linuxmuster.net/u/rettich>`_, Ergänzungen: `@cweikl <https://ask.linuxmuster.net/u/cweikl>`_
Auf einem Docker-Host sind folgende Schritte zur Installation notwendig:
- Erstellen eines Let's Encrypt - Zertifikats.
- Erstellen einer Site für die Nextcloud in nginx.
- Erstellen und Starten der Nextcloud Docker App.
Hint
Im Folgenden musst du natürlich nextcloud.meine-schule.de
durch deine URL ersetzen.
Zuerst musst du dir einen Dienstenamen ausdenken und SSL-Zertifikate besorgen. Also z.B. nextcloud.meine-schule.de.
Dazu legst du einen DNS Eintrag für deine Dockerapp, z.B. nextcloud.meine-schule.de, der auf die IP des Docker-Hosts zeigt an. Das darf auch ein CNAME sein.
Trage diesen Host in die Datei /etc/dehydrated/domains.txt
ein.
Führe den Befehl dehydrated -c
aus. Jetzt hast du die Zertifikate im Verzeichnis /var/lib/dehydrated/certs/
zur Verfügung, der Docker Host aktualisiert diese per Cronjob.
Wir benutzen nginx als Reverse-Proxy
. So können auf deinem Docker-Host viele Services wie beispielsweise mrbs.meine-schule.de
und nextcloud.meine-schule.de
unter der gleichen IP-Adresse laufen.
Wenn beispielsweise ein Benutzer die Seite nextcloud.meine-schule.de aufruft, schaut sich nginx die URL an, die aufgerufen wurde, und liefert dann die entsprechende Seite aus.
Melde dich als root auf deinem Docker-Host an.
Erstelle mit mkdir -p /srv/docker/nextcloud
das Verzeichnis, in das alle Nextcloud-Dateien abgelegt werden.
Erzeuge die Datei /srv/docker/nextcloud/nextcloud.nginx.conf
mit folgendem Inhalt:
server { listen 80; listen [::]:80; server_name nextcloud.meine-schule.de; location / { return 301 https://nextcloud.staufer-gymnasium.de$request_uri; } location ^~ /.well-known/acme-challenge { alias /var/www/dehydrated; } } server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name nextcloud.meine-schule.de; ssl_certificate /var/lib/dehydrated/certs/nextcloud.meine-schule.de/fullchain.pem; ssl_certificate_key /var/lib/dehydrated/certs/nextcloud.meine-schule.de/privkey.pem; ssl_protocols TLSv1.2; ssl_prefer_server_ciphers on; location /.well-known/carddav { return 301 $scheme://$host/remote.php/dav; } location /.well-known/caldav { return 301 $scheme://$host/remote.php/dav; } location / { proxy_read_timeout 600s; client_max_body_size 0; proxy_set_header Connection ""; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"; access_log /var/log/nginx/nextcloud.access.log; error_log /var/log/nginx/nextcloud.error.log; proxy_pass http://localhost:7771; } }
Diese conf-Datei geht davon aus, dass deine Nextcloud auf localhost:7771 erreichbar sein wird. Den Port 7771 kannst du frei wählen. Dies muss identisch sein mit dem später in docker-compose.yml anzugebenen Port für nextcloud.
Jetzt musst du noch im Verzeichnis /etc/nginx/sites-enabled
einen Link auf deine nextcloud.nginx.conf
anlegen und nginx neu starten.
Melde dich wieder als root am Docker-Host an und lege mit ln -s /srv/docker/nextcloud/nextcloud.nginx.conf /etc/nginx/sites-enabled/nextcloud.meine-schule.de
den Link an.
So, jetzt musst du nur noch mit systemctl restart nginx.service
nginx neu starten.
Prüfe noch, welche Ports nun genutzt werden. Gebe dazu den Befehl netstat -tulp
an.
Jetzt musst du nur noch drei Dateien angelegen, die docker-compose sagen, was es machen soll.
Alles was wir jetzt machen, spielt sich im Verzeichnis /srv/docker/nextcloud
ab. Später werden auch dort sämtliche Daten liegen.
Für eine Datensicherung musst du nur dieses Verzeichnis sichern.
Melde dich wieder als root auf dem Docker-Host an und gehe mit cd /srv/docker/nextcloud
in das Verzeichnis /srv/docker/nextcloud
.
FROM nextcloud:stable RUN apt-get update && apt-get install -y smbclient libsmbclient-dev imagemagick && pecl install smbclient && docker-php-ext-enable smbclient && rm -rf /var/lib/apt/lists/*
Wenn du experimentierfreudig bist, kannst du statt stable
auch latest
schreiben.
Mit der zweiten Zeile werden die Vorbereitungen für die Einbindungen der Home-Verzeichnisse (Samba-Shares) durchgeführt.
MYSQL_ROOT_PASSWORD=geheim MYSQL_PASSWORD=geheim MYSQL_DATABASE=nextcloud MYSQL_USER=nextcloud
Hier sind die Zugangsdaten für die Datenbank hinterlegt.
version: '3' services: db2: image: mariadb:10.5 command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW restart: always volumes: - ./db:/var/lib/mysql env_file: - db.env redis2: image: redis:alpine restart: always app2: build: context: . dockerfile: Dockerfile restart: always ports: - 7771:80 volumes: - ./nextcloud:/var/www/html environment: - MYSQL_HOST=db2 - REDIS_HOST=redis2 env_file: - db.env depends_on: - db2 - redis2 cron2: build: context: . dockerfile: Dockerfile restart: always volumes: - ./nextcloud:/var/www/html entrypoint: /cron.sh depends_on: - db2 - redis2 volumes: db: nextcloud:
In der Datei docker-compose.yml
werden die Services deiner Nextcloud beschrieben.
Das Verzeichnis /var/www/html
des Webservers wird unter dem Verzeichnis /srv/docker/nextcloud/nextcloud
auf dem Docker-Host abgelegt. Und das Datenverzeichnis /var/lib/mysql
der Maria Datenbank wird unter dem Verzeichnis /srv/docker/nextcloud/db
auf dem Docker-Host abgelegt.
Sollte für nginx noch eine default.conf aktiv sein, so findet sich diese im Verzeichnis /srv/docker/nextcloud
als symbolischer Link. Diesen kannst Du löschen und nginx wie zuvor neu starten.
Damit sind alle Daten im Verzeichnis /srv/docker/nextcloud
.
Wenn du im Verzeichnis /srv/docker/nextcloud
bist, startest du die Nextcloud mit docker-compose up -d --build
.
Jetzt must du mit einem Browser die Startseite https://nextcloud.meine-schule.de
deiner neuen Nextcloud aufrufen und einen Benutzernamen und ein Passwort für den Nextcloud-admin angeben.
Da die Nextcloud hinter dem nginx-Proxy liegt und nicht weiß, ob die Benutzer die Nextcloud über http oder https aufrufen, wird eine Anmeldung über eine Nextcloud-Client-App scheitern. Mit einem Eintrag in /srv/docker/nextcloud/nextcloud/config/config.php
kannst du das Problem lösen:
... 'ldapProviderFactory' => 'OCA\\User_LDAP\\LDAPProviderFactory', # Das ist der Eintrag ######################## 'overwriteprotocol' => 'https', ############################################## );
Melde dich an der Nextcloud als admin an und wähle links unter Verwaltung -> Übersicht
aus. Es erscheinen ggf. Sicherheits- & Einrichtungswarnungen.
Solltest du hier einen Hinweis auf eine fehlende default phone region sehen, so kannst du in der config.hphp den Eintrag 'default_phone_region' => 'DE',
ergänzen.
Nachstehendes Code-Beispiel der Datei /srv/docker/nextcloud/nextcloud/config/config.php
zeigt, wo dieser Eintrag neben anderen Ergänzungen plaziert werden kann.
'htaccess.RewriteBase' => '/', 'memcache.local' => '\\OC\\Memcache\\APCu', 'auth.bruteforce.protection.enabled' => true, 'blacklisted_files' => array ( 0 => '.htaccess', 1 => 'Thumbs.db', 2 => 'thumbs.db', ), 'cron_log' => true, 'default_phone_region' => 'DE', 'enable_previews' => true, 'enabledPreviewProviders' => array ( 0 => 'OC\\Preview\\PNG', 1 => 'OC\\Preview\\JPEG', 2 => 'OC\\Preview\\GIF', 3 => 'OC\\Preview\\BMP', 4 => 'OC\\Preview\\XBitmap', 5 => 'OC\\Preview\\Movie', 6 => 'OC\\Preview\\PDF', 7 => 'OC\\Preview\\MP3', 8 => 'OC\\Preview\\TXT', 9 => 'OC\\Preview\\MarkDown', ), 'filesystem_check_changes' => 0, 'filelocking.enabled' => 'true', 'filelocking.ttl' => 3600, 'integrity.check.disabled' => false, 'apps_paths' => ...
Danach ist der Docker-Container erneut zu starten: