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>
This commit is contained in:
Executable
+89
@@ -0,0 +1,89 @@
|
||||
#!/usr/bin/env bash
|
||||
# 01-transfer.sh — Rsync bestanden + database-dump van bronserver naar doelserver.
|
||||
#
|
||||
# Wat het doet:
|
||||
# 1. Genereert SSH-key op doel en voegt die toe aan bron (authorized_keys)
|
||||
# 2. Rsynct NC-app, configs, crontabs → /root/staging/
|
||||
# 3. Maakt een database-dump op de bron (PostgreSQL of MySQL/MariaDB)
|
||||
# 4. Rsynct ncdata → TARGET_DATA_PATH (herstart-veilig via --partial)
|
||||
#
|
||||
# Herstart-veilig: rsync --partial; dit script is idempotent (delta op re-run).
|
||||
# Voortgang volgen: ssh <doel> 'tail -f /var/log/pull-source.log'
|
||||
|
||||
set -euo pipefail
|
||||
source "$(dirname "$0")/config.sh"
|
||||
log() { echo "[$(date '+%H:%M:%S')] $*"; }
|
||||
|
||||
# ── STAP 1: SSH-key op doel → bron ───────────────────────────────────────────
|
||||
log "SSH-key genereren op doel (indien nodig)..."
|
||||
ssh "${TARGET_SSH}" "test -f /root/.ssh/id_ed25519 || \
|
||||
ssh-keygen -t ed25519 -N '' -f /root/.ssh/id_ed25519 -C nc-migration-pull"
|
||||
|
||||
TARGETKEY=$(ssh "${TARGET_SSH}" "cat /root/.ssh/id_ed25519.pub")
|
||||
|
||||
log "Key toevoegen aan bron authorized_keys (indien nodig)..."
|
||||
ssh "${SOURCE_USER}@${SOURCE_HOST}" \
|
||||
"grep -qF '${TARGETKEY}' /root/.ssh/authorized_keys 2>/dev/null || \
|
||||
echo '${TARGETKEY}' >> /root/.ssh/authorized_keys"
|
||||
|
||||
log "Hostkey accepteren + verbinding testen van doel naar bron..."
|
||||
ssh "${TARGET_SSH}" "
|
||||
ssh-keyscan -H ${SOURCE_HOST} >> /root/.ssh/known_hosts 2>/dev/null
|
||||
ssh -o ConnectTimeout=10 ${SOURCE_USER}@${SOURCE_HOST} hostname
|
||||
"
|
||||
|
||||
# ── DB-dump commando samenstellen ────────────────────────────────────────────
|
||||
# AIO gebruikt PostgreSQL; als de bron MySQL/MariaDB is, wordt de DB later
|
||||
# geconverteerd via 'occ db:convert-type pgsql' (na de upgrade-keten, voor AIO-import).
|
||||
if [[ "${SOURCE_DB_TYPE}" == "mysql" ]]; then
|
||||
# Wachtwoord op de command line is niet ideaal maar werkt voor eenmalige migratie.
|
||||
# Alternatief: zet een .my.cnf op de bronserver met [mysqldump] credentials.
|
||||
DUMP_CMD="mysqldump -u '${SOURCE_DB_USER}' -p'${SOURCE_DB_PASS}' '${SOURCE_DB}' | gzip"
|
||||
else
|
||||
DUMP_CMD="sudo -u postgres pg_dump '${SOURCE_DB}' | gzip"
|
||||
fi
|
||||
|
||||
# ── STAP 2: Pull-script op doel plaatsen en starten ──────────────────────────
|
||||
log "pull-source.sh plaatsen op doel..."
|
||||
ssh "${TARGET_SSH}" "cat > /root/pull-source.sh" << EOF
|
||||
#!/bin/bash
|
||||
# Draait op doel. Log: /var/log/pull-source.log
|
||||
set -uo pipefail
|
||||
SRC="${SOURCE_USER}@${SOURCE_HOST}"
|
||||
{
|
||||
echo "===== START \$(date) ====="
|
||||
mkdir -p /root/staging/etc
|
||||
|
||||
echo "== 1/4 NC-app =="
|
||||
rsync -aHAX --numeric-ids --partial \
|
||||
\${SRC}:${SOURCE_NC_PATH}/ /root/staging/nextcloud-app/
|
||||
|
||||
echo "== 2/4 configs =="
|
||||
rsync -aH --numeric-ids \${SRC}:/etc/apache2/ /root/staging/etc/apache2/ 2>/dev/null || true
|
||||
rsync -aH --numeric-ids \${SRC}:/etc/php/ /root/staging/etc/php/ 2>/dev/null || true
|
||||
rsync -aH --numeric-ids \${SRC}:/etc/letsencrypt/ /root/staging/etc/letsencrypt/ 2>/dev/null || true
|
||||
rsync -aH --numeric-ids \${SRC}:/var/scripts/ /root/staging/var-scripts/ 2>/dev/null || true
|
||||
ssh \${SRC} 'crontab -l' > /root/staging/crontab-root.txt 2>/dev/null || true
|
||||
ssh \${SRC} 'crontab -u www-data -l' > /root/staging/crontab-www-data.txt 2>/dev/null || true
|
||||
|
||||
echo "== 3/4 database dump (${SOURCE_DB_TYPE}: ${SOURCE_DB}) =="
|
||||
ssh \${SRC} '${DUMP_CMD}' > /root/staging/${SOURCE_DB}-\$(date +%F).sql.gz
|
||||
ls -lh /root/staging/${SOURCE_DB}-*.sql.gz | tail -1
|
||||
|
||||
echo "== 4/4 ncdata =="
|
||||
rsync -aHAX --numeric-ids --partial --info=stats1 \
|
||||
\${SRC}:${SOURCE_DATA_PATH}/ ${TARGET_DATA_PATH}/
|
||||
|
||||
echo "===== KLAAR \$(date) ====="
|
||||
df -h ${TARGET_DATA_PATH}
|
||||
} >> /var/log/pull-source.log 2>&1
|
||||
EOF
|
||||
ssh "${TARGET_SSH}" "chmod +x /root/pull-source.sh"
|
||||
|
||||
# ── STAP 3: Starten met nohup ────────────────────────────────────────────────
|
||||
log "Transfer starten (nohup, herstart-veilig)..."
|
||||
ssh "${TARGET_SSH}" "nohup /root/pull-source.sh > /dev/null 2>&1 & echo PID: \$!"
|
||||
|
||||
log "✓ Transfer draait op de achtergrond."
|
||||
log " Voortgang: ssh <doel> 'tail -f /var/log/pull-source.log'"
|
||||
log " Schijfruimte: ssh <doel> 'df -h ${TARGET_DATA_PATH}'"
|
||||
Reference in New Issue
Block a user