NextCloud als docker installieren

Aus Roebke Wiki
Zur Navigation springen Zur Suche springen

Nextcloud mit Docker installieren

Docker allgemein

Docker installieren

sudo snap install docker

Nextcloud herunterladen, instanziieren & starten

Als nächstes lädt man den Nextcloud Container vom Docker Hub herunter, in welchem die öffentlich verfügbaren Container gelistet werden.

sudo docker pull nextcloud

Dann legt man noch ein Volume für die Nutzerdaten an, und anschließend kann man in einem Befehl den Container instanziieren und starten:

sudo docker volume create --name nextcloud-data
sudo docker run -d -v nextcloud-data:/var/www/html -p 8080:80 --name nextcloud nextcloud

Die Parameter bewirken dabei folgendes: -d – Den Container im Hintergrund laufen lassen -v nextcloud-data:/var/www/html – Bindet das Volume „nextcloud-data“ im Container unter /var/www/html ein, dort liegen die Nutzerdaten -p 8080:80 – Mappt den internen Port 80 auf den Port 8080 des Hostsystems --name nextcloud1 – Vergibt den Namen „nextcloud“ an den Container nextcloud – Gibt den Container an, der als Grundlage dienen soll Der Container ist somit instanziiert und auch bereits gestartet (Anmerkung: „docker run“ kombiniert die Befehle „docker create“ sowie „docker start“)

Container automatisch neu starten

sudo docker update --restart=always nextcloud

Mysql installieren und User anlegen

root@ubuntu-2gb-nbg1-1:~# apt-get install mysql-server
root@ubuntu-2gb-nbg1-1:~# mysql
mysql> CREATE DATABASE nextcloud;
mysql> CREATE USER 'nextcloud' IDENTIFIED BY 'PASSWORD';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'nextcloud'@localhost IDENTIFIED BY 'PASSWORD';
mysql> quit

Datenbank von aussen zugreifbar machen

root@ubuntu-2gb-nbg1-1:/etc/mysql/mysql.conf.d# cp mysqld.cnf mysqld.cnf.bk
root@ubuntu-2gb-nbg1-1:/etc/mysql/mysql.conf.d# nano mysqld.cnf 
bind-address           = 0.0.0.0
root@ubuntu-2gb-nbg1-1:/etc/mysql/mysql.conf.d# mysql -u root -p

 mysql> use mysql;
mysql> GRANT ALL PRIVILEGES ON *.* TO 'nextcloud'@'%';
mysql> FLUSH PRIVILEGES;
mysql> quit;

Zugriff von aussen unter

<IP-Adresse>:3306

Let's encrypt Zertifikat erstellen

siehe Lets Encrypt

Apache konfigurieren

  1. alle Domains anlegen
  2. a2ensite <DOMAIN> (zB. cloud.familie-roebke.de)
  3. Zertifikate erstellen (siehe Lets Encrypt)
  4. Proxy Weiterleitung einrichten
ProxyPass '/'  'http://127.0.0.1:8080/'
ProxyPassReverse '/'  'http://127.0.0.1:8080/'

Beispiel: cloud.familie-roebke.de-le-ssl.conf

<IfModule mod_ssl.c>
<VirtualHost *:443>
      ServerName cloud.familie-roebke.de 

     SSLProxyEngine On

     ProxyPass '/'  'http://127.0.0.1:8080/'
     ProxyPassReverse '/'  'http://127.0.0.1:8080/'

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

     Include /etc/letsencrypt/options-ssl-apache.conf
     SSLCertificateFile /etc/letsencrypt/live/familie-roebke.de/fullchain.pem
     SSLCertificateKeyFile /etc/letsencrypt/live/familie-roebke.de/privkey.pem
</VirtualHost>
</IfModule>

Beispiel: cloud.familie-roebke.de.conf

<VirtualHost *:80>
     ServerName cloud.familie-roebke.de
     ServerAdmin webmaster@localhost
     ProxyPass '/'  'http://127.0.0.1:8080/'
     ProxyPassReverse '/'  'http://127.0.0.1:8080/'


     DocumentRoot /var/www/html
     ErrorLog ${APACHE_LOG_DIR}/error.log
     CustomLog ${APACHE_LOG_DIR}/access.log combined
RewriteEngine on
RewriteCond %{SERVER_NAME} =cloud.familie-roebke.de
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

Nextcloud konfigurieren

sudo docker exec -i -t nextcloud /bin/bash
cd config
cp config.sample.php config.php 
nano config.php

'trusted_proxies' => array('203.0.113.45', '198.51.100.128'),
'trusted_proxies'   => ['172.17.0.1'],
'overwritehost'     => 'familie-roebke.de',
'overwriteprotocol' => 'https",
'overwritewebroot'  => '/,
'overwritecondaddr' => '^172\.17\.0\.1$',


nextcloud:data umziehen

zuerst externes Volume erstellen

Alle Aktionen als root

Backup des Ordners

cd /var/snap/docker/common/var-lib-docker/volumes/
mv nextcloud-data/ nextcloud-data.bk

neuen Ordern als Mountpunkt anlegen

mkdir nextcloud-data

Eintrag des externen Volumes in fstab

nano /etc/fstab
/dev/disk/by-id/scsi-0HC_Volume_2001067 /var/snap/docker/common/var-lib-docker/volumes/nextcloud-data/ ext4 discard,nofail,defaults 0 0
mount -av
 /                        : ignored
 /media/floppy0           : ignored
 /var/snap/docker/common/var-lib-docker/volumes/nextcloud-data: successfully mounted

Dateien in neuen Ordner umziehen

cd nextcloud-data.bk/
cp -Rv _data/ /var/snap/docker/common/var-lib-docker/volumes/nextcloud-data/

Dateirechte anpassen

cd /var/snap/docker/common/var-lib-docker/volumes/nextcloud-data/_data
chown -R www-data:root *

Optional: Backup auf neues Volume verschieben

cd /var/snap/docker/common/var-lib-docker/volumes/
mv nextcloud-data.bk/ /var/snap/docker/common/var-lib-docker/volumes/nextcloud-data/

Quellen: