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>
90 lines
4.3 KiB
Bash
Executable File
90 lines
4.3 KiB
Bash
Executable File
#!/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}'"
|