Die Cloud ist heutzutage nicht mehr weg zu denken. Aber wie sichert man seine Daten richtig ab? Derzeit gibt es Cloudanbieter an jeder Ecke, Google, Apple, Dropbox, Onedrive, AWS. Nach den letzten News um Alexa und Google Assistent, indem Gespräche des heimischen Umfelds mitgehört worden sind, ist die Angst ob privat abgelegte Daten in der Cloud eines großen Anbieters wirklich sicher sind, allgegenwärtig.
Deshalb geht der Gedanke hin zur eigenen Cloud, wie sich das ganze umsetzen lässt wollen wir hier Schritt für Schritt erläutern. Wir werden hier die Nextcloud in Angriff nehmen.
Alles was Ihr dafür braucht, ist ein eigener Server zuhause, der mit fester IpAdresse oder einer Dynamischen DNS (DYNDNS) mit eurer Domain (bsp: cloud.euredomain.de) verheiratet ist. Oder Ihr nutzt eine gemietete V-Serverlösung, sie senkt die heimischen Stromkosten und ist preislich echt okay. Wir empfehlen da ganz deutlich netcup, Netcup hebt sich Preislich sehr von der Konkurrenz ab und bietet zudem noch massig Extras, wie z.b Extra Storage welcher sich in den Server Mounten lässt.
Wie bereits im Baremetall Cloudbeitrag gehen wir hier auf die Inbetriebnahme der Cloud in einem Docker Container ein.
Vorbereitung des Systems
Wir gehen davon aus, dass Ihr Docker und Docker-Compose anhand der Docker Installation bereits durchgeführt habt.
Der Reverseproxy
Der Reverse Proxy holt Ressourcen für einen externen Client von einem oder mehreren internen Servern. Die Umsetzung der Adresse ist atypisch und der Richtung des Aufrufes entgegengesetzt. Die wahre Adresse des internen Zielsystems bleibt dem externen Client verborgen.
Als erstes erstellen wir zwei verzeichnisse
1: mkdir /var/docker
2: mkdir /var/docker/proxy
In diesem Beitrag verwenden wir das vorgefertigte image von JWILDER dieses ist zu finden auf Guthub.
Wir erstellen jetzt als nächstes die sogenannte Bauanleitung für den Container. Dazu navigieren wir in den zuvor angelegten Ordnercd /var/docker/proxy
Sobald wir in diesem Ordner angekommen sind erstellen wir das ComposeFile vim docker-compose.yml
version: '3'
services:
proxy:
image: jwilder/nginx-proxy:alpine
labels:
- "com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy=true"
ports:
- 80:80
- 443:443
volumes:
- ./volumes/proxy/conf.d:/etc/nginx/conf.d:rw
- ./volumes/proxy/vhost.d:/etc/nginx/vhost.d:rw
- ./volumes/proxy/html:/usr/share/nginx/html:rw
- ./volumes/proxy/certs:/etc/nginx/certs:ro
- /etc/localtime:/etc/localtime:ro
- /var/run/docker.sock:/tmp/docker.sock:ro
- ./client_max_body_size.conf:/etc/nginx/conf.d/client_max_body_size.conf:ro
environment:
- HTTPS_METHOD=nohttp
restart: unless-stopped
letsencrypt:
image: jrcs/letsencrypt-nginx-proxy-companion
depends_on:
- proxy
volumes:
- ./volumes/proxy/certs:/etc/nginx/certs:rw
- ./volumes/proxy/vhost.d:/etc/nginx/vhost.d:rw
- ./volumes/proxy/html:/usr/share/nginx/html:rw
- /etc/localtime:/etc/localtime:ro
- /var/run/docker.sock:/var/run/docker.sock:ro
restart: unless-stopped
networks:
default:
external:
name: proxy_net
Wir verlassen den VIM Editor mit dem Befehl :wq!
Wie in dem compose File zu sehen ist benutzen wir ein definiertes Netzwerk zur internen Kommunikation zwischen den Containern “proxy_net”
Dieses Netzwerk muss jetzt noch erstellt werden. Dieses machen wir wie folgt.
docker network create proxy_net
Wenn wir folgende Meldung erhalten wissen wir, dass das Netzwerk ordnungsgem erstellt wurde.
Wie in dem Docker-Compose File zu sehen ist, ist der Start des Proxy an eine Bedingung gebunden, an die Datei client_max_body_size.conf
Diese Datei sagt uns wie hoch der Max Upload sein darf, der hinterher in der Cloud hochgeladen wird.
vim client_max_body_size.conf
In diese Datei tragen wir folgendes ein: client_max_body_size 100G;
Vim Editor verlassen mit :wq!
Nachdem wir jetzt die Konfiguration des Revers Proxys abgeschlossen haben, starten wir diesen Container und testen ob dieser vernünftig läuft.
Start des Containers
docker-compose up -d
ist der Container ordnungsgemäß. konfiguriert wird dies wie folgt angezeigt.
Vorbereitung des Nextcloud Containers
Zur Vorbereitung des Nextcloud Containers bedienen wir uns erneut an einem bereits vorgefertigten Container. Wir gehen in einem späterem Artikel auf die Erstellung eigner Docker Files zur Erstellung von Containern ein.
Wir benutzen den folgenden Container zur Verwendung unserer Cloud. Wir fügen nun den Link zum Guthub Paket in die Zwischenablage ein.
Sobald wir den Link in der Zwischenablage haben navigieren wir ins Homeverzeichnis
cd /home
Im Homeverzeichnis angekommen führen wir den folgenden Befehl aus:
git clone https://github.com/nextcloud/docker.git
Führen wir jetzt den Befehl ls -la aus sehen wir das folgende
Jetzt navigieren wir in den folgenden Ordner:
Innerhalb dieses Ordners befindet sich der Ordner fpm, in diesem Ordner fpm befinden sich alle Die wir benötigen, also verschieben wir diesen Ordner in unser “Docker” verzeichnis.
mv fpm /var/docker/nextcloud
Führen wir jetzt ls -la aus sehen wir die folgenden Inhalte.
Jetzt starten wir den vim Editor und editieren als erstes die db.env. In dieser Datei befinden sich die zugewiesenen Zugangsdaten für die Datenbank.
Diese db.env Datei editieren wir jetzt folgendermaßen.
vim /var/docker/nextcloud/eb.env
MYSQL_PASSWORD="euerpasswort"
MYSQL_DATABASE="euerdatenbankname"
MYSQL_USER="euerdatenbankuser"
vim Editor verlassen mit
:wq!
Nachdem die Datenbank editiert ist, widmen wir uns der eigentlichen docker-compose.yml, hier müssen wir nur noch ein paar Dinge anpassen.
version: '3'
services:
db:
image: mariadb
command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW
restart: always
volumes:
- ./volumes/db:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD="euerpasswort"
env_file:
- db.env
redis:
image: redis:alpine
restart: always
app:
image: nextcloud:fpm-alpine
restart: always
volumes:
- ./volumes/nextcloud:/var/www/html
environment:
- MYSQL_HOST=db
- REDIS_HOST=redis
env_file:
- db.env
depends_on:
- db
- redis
web:
build: ./web
restart: always
volumes:
- ./volumes/nextcloud:/var/www/html:ro
environment:
- VIRTUAL_HOST=cloud.euredomain.de
- LETSENCRYPT_HOST=cloud.euredomain.de
- LETSENCRYPT_EMAIL=eure@email.de
depends_on:
- app
networks:
- proxy_net
- default
cron:
image: nextcloud:fpm-alpine
restart: always
volumes:
- ./volumes/nextcloud:/var/www/html
entrypoint: /cron.sh
depends_on:
- db
- redis
networks:
proxy_net:
external: true
Nachdem ihr die ganzen dinge editiert habt die wir hier Rot markiert haben, könnt ihr den vim Editor mit dem Befehl :wq! verlassen und die Datei ist gespeichert.
environment:
– VIRTUAL_HOST=cloud.euredomain.de
– LETSENCRYPT_HOST=cloud.euredomain.de
– LETSENCRYPT_EMAIL=eure@email.de
Dieses sorgt dafür das auf eurer Webseite ein SSL Zertifkat installiert wird, dieses Zertifikat wird ausgestellt vom Letsencrypt Projekt.
DNS einstellungen
Nachdem wir jetzt die Container fertig editiert haben, müsst ihr nur noch in den DNS einstellungen eures Domainanbieters eine Subdomain anlegen und diese auf die IP Adresse eures Servers umleiten
Docker Container starten
Jetzt da wir alles fertig haben, könnte ihr den Container starten.
cd /var/docker/nextcloud
docker-compose up -d
Jetzt ist der Docker Container Online
Jetzt müsst ihr nur noch eurer Domainsurfen und die Einrichtung der Cloud auf der Weboerfläche abschließen.
Updates oder Migration einer anderen Version
Update auf eine neuere Version
Die Aktualisierung des Nextcloud-Containers erfolgt durch Ziehen des neuen Images, Wegwerfen des alten Containers und Starten des neuen Containers.
Es ist nur möglich, ein Upgrade auf eine Hauptversion zur gleichen Zeit durchzuführen. Wenn Sie zum Beispiel von Version 14 auf 16 upgraden wollen, müssen Sie von Version 14 auf 15 und dann von 15 auf 16 upgraden.
Da alle Daten in Volumes gespeichert sind, geht nichts verloren. Das Startskript prüft die Version in Ihrem Volume und die installierte Docker-Version. Wenn es eine Unstimmigkeit findet, startet es automatisch den Upgrade-Prozess. Vergessen Sie nicht, alle Volumes zu Ihrem neuen Container hinzuzufügen, damit er wie erwartet funktioniert.
$ docker pull nextcloud
$ docker stop
$ docker rm
$ docker run -d nextcloud
Beachten Sie, dass Sie denselben Befehl mit den Optionen ausführen müssen, die Sie beim ersten Start Ihrer Nextcloud verwendet haben. Das schließt Volumes und Port-Zuordnung ein.
Wenn Sie docker-compose verwenden, kümmert sich Ihre compose-Datei um die Konfiguration, sodass Sie nur noch ausführen müssen:
$ docker-compose pull
$ docker-compose up -d
Hinzufügen von Funktionen
Viele Leute möchten zusätzliche Funktionen innerhalb ihrer Nextcloud-Installation nutzen. Wenn das Image nicht die Pakete enthält, die Sie benötigen, können Sie einfach Ihr eigenes Image darauf aufbauen. Starten Sie Ihr abgeleitetes Image mit der FROM-Anweisung und fügen Sie hinzu, was Sie möchten.
FROM nextcloud:apache
RUN …
Im Ordner examples finden Sie einige Beispiele, wie Sie bestimmte Funktionalitäten hinzufügen können, z. B. das Einbinden des Cron-Jobs, der smb-Unterstützung oder der imap-Authentifizierung.
Wenn Sie eine eigene Dockerdatei verwenden, müssen Sie Ihre docker-compose-Datei entsprechend konfigurieren. Tauschen Sie die Option image mit build aus. Sie müssen den Pfad zu Ihrem Dockerfile angeben. (im Beispiel ist es im gleichen Verzeichnis neben der docker-compose-Datei)
app:
build: .
links:
- db
volumes:
- data:/var/www/html/data
- konfiguration:/var/www/html/konfiguration
- apps:/var/www/html/apps
restart: immer
Wenn Sie einen anderen Befehl zum Ausführen des Abbilds verwenden möchten, stellen Sie sicher, dass Sie NEXTCLOUD_UPDATE=1 in Ihrer Dockerdatei setzen. Andernfalls funktionieren die Installation und das Update nicht.
FROM nextcloud:apache
ENV NEXTCLOUD_UPDATE=1
CMD ["/usr/bin/supervisord"]
Das Aktualisieren Ihres eigenen abgeleiteten Images ist ebenfalls sehr einfach. Wenn eine neue Version des Nextcloud-Images verfügbar ist, führen Sie aus:
docker build -t your-name --pull .
docker run -d Ihr-Name
oder für docker-compose:
docker-compose build --pull
docker-compose up -d
Die Option –pull weist Docker an, nach neuen Versionen des Basis-Images zu suchen. Dann werden die Build-Anweisungen innerhalb Ihrer Dockerdatei auf dem neuen Image ausgeführt.
Migrieren einer bestehenden Installation
Sie verwenden bereits Nextcloud und möchten auf Docker umsteigen? Prima! Hier sind einige Dinge, auf die Sie achten sollten:
Definieren Sie Ihre gesamte Nextcloud-Infrastruktur in einer Docker-Compose-Datei und führen Sie diese mit docker-compose up -d aus, um die Basisinstallation, Volumes und Datenbank zu erhalten. Arbeiten Sie von dort aus.
Stellen Sie Ihre Datenbank aus einem mysqldump wieder her (nextcloud_db_1 ist der Name Ihres db-Containers)
Um aus einem MySQL-Dump zu importieren, verwenden Sie die folgenden Befehledocker cp ./Datenbank.dmp nextcloud_db_1:/dmp
docker-compose exec db sh -c "mysql -u USER -pPASSWORD nextcloud < /dmp" docker-compose exec db rm /dmp
Um aus einem PostgreSQL-Dump zu importieren, verwenden Sie die folgenden Befehle docker cp ./Datenbank.dmp nextcloud_db_1:/dmp docker-compose exec db sh -c “psql -U USER –set ON_ERROR_STOP=on nextcloud < /dmp” docker-compose exec db rm /dmp Bearbeiten Sie Ihre config.php Datenbankverbindung einstellen Im Falle einer MySQL-Datenbank ‘dbhost’ => ‘db:3306’,
Im Falle einer PostgreSQL-Datenbank'dbhost' => 'db:5432',
Stellen Sie sicher, dass Sie keine Konfiguration für die apps_paths haben. Löschen Sie Zeilen wie diese
"apps_paths" => array (
0 => array (
"path" => OC::$SERVERROOT."/apps",
"url" => "/apps",
"writable" => true,
),
Stellen Sie sicher, dass das apps-Verzeichnis nicht beschreibbar und das custom_apps-Verzeichnis beschreibbar ist
'apps_paths' => array (
0 => array (
'path' => '/var/www/html/apps',
'url' => '/apps',
'writable' => false,
),
1 => array (
'path' => '/var/www/html/custom_apps',
'url' => '/custom_apps',
'writable' => true,
),
),
Stellen Sie sicher, dass Ihr Datenverzeichnis auf /var/www/html/data gesetzt ist
'datadirectory' => '/var/www/html/data',
Kopieren Sie Ihre Daten (nextcloud_app_1 ist der Name Ihres Nextcloud-Containers):
docker cp ./data/ nextcloud_app_1:/var/www/html/
docker-compose exec app chown -R www-data:www-data /var/www/html/data
docker cp ./theming/ nextcloud_app_1:/var/www/html/
docker-compose exec app chown -R www-data:www-data /var/www/html/theming
docker cp ./config/config.php nextcloud_app_1:/var/www/html/config
docker-compose exec app chown -R www-data:www-data /var/www/html/config
Kopieren Sie nur die benutzerdefinierten Apps, die Sie verwenden (oder laden Sie sie einfach erneut von der Weboberfläche herunter):
docker cp ./custom_apps/ nextcloud_data:/var/www/html/
docker-compose exec app chown -R www-data:www-data /var/www/html/custom_apps
Viel Spaß mit eurer Cloud……