2626036a21
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>
155 lines
7.0 KiB
Bash
Executable File
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
|