Files
nextcloud-to-aio/05-import.sh
T
dillard 2626036a21 Initial commit: Nextcloud bare/Hansson → AIO migration toolkit
Scripts 01-05 voor sequentiële migratie: transfer, staging, upgrade-keten,
AIO-install en DB-import. PostgreSQL + MySQL/MariaDB bronnen ondersteund.
Proxmox/OPNSense VM-builder optioneel in proxmox/. README met 12 gotchas.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-07 01:18:01 +02:00

155 lines
7.0 KiB
Bash
Executable File

#!/usr/bin/env bash
# 05-import.sh — Bestaande NC-database + data importeren in AIO.
#
# Vereiste: AIO-wizard afgerond, alle containers groen (via https://<doel>:8080).
# Draait op de doelserver zelf (gesourcet via SSH).
#
# Wat het doet:
# 1. Dump van de staging-postgres (NC-versie gelijk aan AIO-doelversie)
# 2. NC + notify-push stoppen (DB-verbindingen verbreken)
# 3. AIO-database vervangen door de staging-dump
# 4. NC starten + instanceid/passwordsalt/secret overnemen van staging
# 5. maintenance:repair + maintenance:mode --off
# 6. groupfolders herinstalleren (AIO start kaal)
#
# AIO v13+ containernamen (wijken af van oudere docs):
# DB-container : nextcloud-aio-database
# Database : nextcloud_database
# NC-user : oc_nextcloud
# Superuser : nextcloud
#
# Log: /var/log/aio-import.log op de doelserver
set -euo pipefail
source "$(dirname "$0")/config.sh"
log() { echo "[$(date '+%H:%M:%S')] $*"; }
log "05-import.sh starten op ${TARGET_SSH}..."
ssh "${TARGET_SSH}" bash -s << REMOTE
set -euo pipefail
log() { echo "[\$(date '+%H:%M:%S')] \$*"; }
STAGING_DB="${STAGING_DB}"
STAGING_DB_USER="${STAGING_DB_USER}"
STAGING_DB_PASS="${STAGING_DB_PASS}"
TARGET_DATA="${TARGET_DATA_PATH}"
NC_CONTAINER=nextcloud-aio-nextcloud
DB_CONTAINER=nextcloud-aio-database
AIO_DB=nextcloud_database
AIO_SUPER=nextcloud
AIO_NCUSER=oc_nextcloud
DUMP=/tmp/nc_aio_import.sql
{
log "═══ AIO import start ═══"
# ── Sanity checks ────────────────────────────────────────────────────────────
for c in "\$NC_CONTAINER" "\$DB_CONTAINER"; do
docker ps --format '{{.Names}}' | grep -q "^\${c}$" || {
log "FOUT: container \${c} niet actief."
log "Zorg dat alle AIO-containers groen zijn in de wizard (https://<doel>:8080)."
exit 1
}
done
# ── Staging-waarden uitlezen ─────────────────────────────────────────────────
# Deze drie waarden koppelen de NC-sessies aan de database.
# Ze MOETEN overeenkomen met de waarden in de te importeren DB.
OCC_STAGING="sudo -u www-data php8.3 /var/www/nextcloud/occ"
if command -v php8.3 &>/dev/null && [ -f /var/www/nextcloud/occ ]; then
INSTANCEID=\$(\$OCC_STAGING config:system:get instanceid 2>/dev/null)
PASSWORDSALT=\$(\$OCC_STAGING config:system:get passwordsalt 2>/dev/null)
SECRET=\$(\$OCC_STAGING config:system:get secret 2>/dev/null)
log "instanceid/passwordsalt/secret uitgelezen uit staging-stack."
else
log "FOUT: staging-stack (php8.3 / occ) niet beschikbaar."
log "Zet INSTANCEID, PASSWORDSALT en SECRET handmatig bovenaan dit script,"
log "of herstart 02-build-staging.sh zodat de staging-stack aanwezig is."
exit 1
fi
# AIO DB-wachtwoord voor oc_nextcloud (staat in AIO's config.php)
NCPASS=\$(docker exec "\$NC_CONTAINER" \
php /var/www/html/occ config:system:get dbpassword 2>/dev/null || true)
[ -z "\$NCPASS" ] && { log "FOUT: kon dbpassword niet uitlezen uit AIO-container."; exit 1; }
log "AIO dbpassword aanwezig."
# ── 1. Staging-postgres dumpen ───────────────────────────────────────────────
log "1/6 Staging-postgres dumpen (--no-owner --no-acl)..."
sudo -u postgres pg_dump --no-owner --no-acl -Fp "\$STAGING_DB" > "\$DUMP"
log "Dump klaar: \$(du -sh \$DUMP | cut -f1)"
# ── 2. NC + notify-push stoppen ──────────────────────────────────────────────
log "2/6 NC + notify-push stoppen..."
docker stop "\$NC_CONTAINER" nextcloud-aio-notify-push 2>/dev/null || true
docker exec "\$DB_CONTAINER" psql -U "\$AIO_SUPER" -d postgres \
-c "SELECT pg_terminate_backend(pid) FROM pg_stat_activity
WHERE datname = '\$AIO_DB';" 2>/dev/null || true
log "Containers gestopt."
# ── 3. AIO-database vervangen ────────────────────────────────────────────────
log "3/6 AIO DB droppen en opnieuw aanmaken..."
docker exec "\$DB_CONTAINER" psql -U "\$AIO_SUPER" -d postgres \
-c "DROP DATABASE IF EXISTS \${AIO_DB};"
docker exec "\$DB_CONTAINER" psql -U "\$AIO_SUPER" -d postgres \
-c "CREATE DATABASE \${AIO_DB} OWNER \${AIO_NCUSER}
ENCODING 'UTF8'
LC_COLLATE='en_US.utf8' LC_CTYPE='en_US.utf8'
TEMPLATE template0;"
log "4/6 Dump restoren als \$AIO_NCUSER..."
docker exec -e PGPASSWORD="\$NCPASS" -i "\$DB_CONTAINER" \
psql -U "\$AIO_NCUSER" "\$AIO_DB" < "\$DUMP"
# Verifieer eigenaarschap — alle tabellen moeten van oc_nextcloud zijn
OWNERS=\$(docker exec "\$DB_CONTAINER" psql -U "\$AIO_SUPER" "\$AIO_DB" \
-tAc "SELECT tableowner, count(*) FROM pg_tables
WHERE schemaname='public' GROUP BY tableowner;")
log "Tabeleigenaarschap na restore: \$OWNERS"
# ── 5. NC starten + config bijwerken ────────────────────────────────────────
log "5/6 NC starten + instanceid/passwordsalt/secret bijwerken..."
docker start "\$NC_CONTAINER"
for i in \$(seq 1 30); do
docker exec "\$NC_CONTAINER" php /var/www/html/occ status &>/dev/null && break || true
sleep 3
done
docker exec "\$NC_CONTAINER" php /var/www/html/occ \
config:system:set instanceid --value="\$INSTANCEID"
docker exec "\$NC_CONTAINER" php /var/www/html/occ \
config:system:set passwordsalt --value="\$PASSWORDSALT"
docker exec "\$NC_CONTAINER" php /var/www/html/occ \
config:system:set secret --value="\$SECRET"
docker exec "\$NC_CONTAINER" php /var/www/html/occ \
config:system:set datadirectory --value="/mnt/ncdata"
log "config.php bijgewerkt."
# ── 6. Repair + maintenance uit ─────────────────────────────────────────────
log "6/6 maintenance:repair + maintenance:mode --off..."
docker exec "\$NC_CONTAINER" php /var/www/html/occ \
maintenance:repair --include-expensive 2>&1 | tail -20
docker exec "\$NC_CONTAINER" php /var/www/html/occ maintenance:mode --off
# groupfolders herinstalleren (AIO start kaal, app zit in de DB maar niet in de container)
log "groupfolders installeren..."
docker exec "\$NC_CONTAINER" php /var/www/html/occ app:install groupfolders 2>&1 | tail -2 || \
docker exec "\$NC_CONTAINER" php /var/www/html/occ app:enable groupfolders 2>&1 | tail -2
docker exec "\$NC_CONTAINER" php /var/www/html/occ status
log "═══ AIO import klaar ═══"
log ""
log "Controleer NC via: https://${NC_DOMAIN}"
log ""
log "Volgende stappen:"
log " • Snapshot aanmaken: ssh <pve> 'qm snapshot <vmid> aio-import-ok'"
log " • Apps herinstalleren (zie output van 03-upgrade.sh / 04-install-aio.sh)"
log " • DNS-cutover naar productie-IP (als dat nog niet gebeurd is)"
log " • Contabo / bron uit maintenance halen na verificatie"
} 2>&1 | tee /var/log/aio-import.log
REMOTE