Nextcloud-Migration von docker und SQLite zu docker-compose und PostgreSQL
0. Ausgangssituation
Das ist keine vollständige Anleitung, ich zeige nur die elementaren Schritte auf
Ihr habt über die Nextcloud-Anleitung einen Container mit SQLite erstellt, wollt ihn jetzt aber upgraden. Der Befehl sah in etwa so aus:
docker run -d -p 8080:80 nextcloud
Jetzt merkt ihr aber, dass das ganze nicht so einfach ist und wünscht euch, ihr hättet es mit docker-compose gemacht, weil das langfristig weniger Aufwand ist, so erging es mir nämlich. Anders als ihr hatte ich aber keine perfekte Anleitung, ihr jedoch lest sie genau jetzt.
Bevor es los geht, meine Quellen (ungeordnet):
- https://goneuland.de/nextcloud-migration-in-docker/
- https://goneuland.de/nextcloud-backups-erstellen-und-wiederherstellen
- https://stackoverflow.com/questions/42385977/accessing-a-docker-container-from-another-container
- https://docs.nextcloud.com/server/latest/admin_manual/maintenance/backup.html
- https://github.com/nextcloud/docker
1. Backup
Das Backup könnt ihr hoffentlich selbst erstellen, dieser Schritt ist zwar technisch gesehen optional, aber es wäre sehr dumm, ihn zu überspringen
2. Start des neuen Nextcloud-Servers
mkdir nextcloud
cd nextcloud
Hier fügt ihr nun eure Datei docker-compose.yml
mit folgendem Inhalt ein:
version: '2'
volumes:
db:
storage:
services:
db:
image: postgres:alpine
restart: always
environment:
- POSTGRES_DB=nextcloud
- POSTGRES_USER=nextcloud
- POSTGRES_PASSWORD=euer_pw
volumes:
- db:/var/lib/postgresql/data
app:
image: nextcloud
restart: always
ports:
- 8080:80
links:
- db
volumes:
- storage:/var/www/html
environment:
- POSTGRES_PASSWORD=???
- POSTGRES_DB=nextcloud
- POSTGRES_USER=nextcloud
- POSTGRES_HOST=db
- NEXTCLOUD_ADMIN_USER=admin
- NEXTCLOUD_ADMIN_PASSWORD=???
# - OVERWRITEHOST=deinhost.de
# - OVERWRITEPROTOCOL=https
Anschließend stoppt ihr den Container nextcloud
mit dem Befehl docker container stop nextcloud
, falls dieser nicht existiert findet ihr den Container mit docker ps
.
Nun starten wir mit docker compose up -d
unsere Container. Wenn alles ohne Probleme gestartet wurde, stoppen wir wieder nextcloud-app-1 mit docker container stop nextcloud-app-1
.
Danach starten wir wieder unseren originalen Nextcloud-Container: docker container start nextcloud
.
Dann fügen wir den Container zum Netzwerk unseres compose hinzu: docker network connect nextcloud nextcloud_default
Jetzt führen wir docker network inspect nextcloud_default
aus, um die IP-Adresse des Datenbank-Containers herauszufinden.
Im Docker-Container führen wir dann diesen Befehl aus: docker exec -it -u www-data nextcloud php occ db:convert-type --all-apps psql nextcloud db_ip_adresse nextcloud
Jetzt folgt ihr der offiziellen Anleitung, um die Daten wiederherzustellen. Der Rest ist selbsterklärend.