65359338f8
Cutover hecho el 3-ago a las 10:50 UTC. feadulta.com y www.feadulta.com ya apuntan a 188.40.120.157, proxied. Ventana real ~3 min 10 s: dump 67 s, saneo 2 s, import 114 s, delta de uploads 6 s (0 ficheros, como estaba medido). Cuadro al digito con produccion: 43.893 posts, 1.228 usuarios, 4.416 terms, 135.959 postmeta. Los options salen 958 frente a 975 porque son transients (hay 580 y caducan solos). Con trafico real: 581 respuestas 200, 62 301, 16 302, cero 5xx y cero errores PHP en 20 minutos, 61 IPs distintas atendidas. Se anaden los cuatro scripts que faltaban, que hasta hoy solo existian como comandos sueltos del ensayo: 01-traer-dump, 02-sanear-dump, 03-importar, 04-delta-uploads y 05-mover-dns. El runbook ya los citaba por nombre. Tres cosas encontradas al ejecutar, anotadas en los propios scripts: - docker exec -i dentro de un ssh 'bash -s' <<EOF se come el resto del script, porque hereda el stdin del heredoc. Las consultas van sin -i y con </dev/null. - Smart Slider cachea el HTML del slider con URLs absolutas, una fila por idioma en wp_nextend2_section_storage con application='cache'. Al verificar el import con la constante del staging todavia puesta quedaron 5 filas apuntando a nuevo.feadulta.com. Se borran y se regeneran solas. - El cliente de MariaDB de la jaula de CDMON exige TLS y el servidor local no lo tiene: con --skip-ssl si se puede consultar la BD de produccion directamente, que es como se comprobo que no habia cambiado nada desde el dump de las 05:09. Pendiente y fuera de nuestro alcance: purgar la cache de Cloudflare (el token solo tiene permiso de DNS) y darle a Inma su contrasena nueva. Y los certificados de Let's Encrypt para www y el apex, que fallan porque el WAF de Cloudflare devuelve 403 a la validacion; no bloquea mientras la zona este en Full, pero por eso mismo no se puede subir a Full (strict) todavia. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
55 lines
2.0 KiB
Bash
Executable File
55 lines
2.0 KiB
Bash
Executable File
#!/bin/bash
|
|
#
|
|
# Paso 1-2 del cutover: traer el dump de BD del dia. CDMON -> WSL -> Hetzner.
|
|
#
|
|
# Dos saltos a proposito: scp/sftp no funcionan contra la jaula de CDMON, y no
|
|
# queremos dejar la contrasena de CDMON escrita en el Hetzner. Se verifica el
|
|
# sha256 en los tres puntos y la integridad del gzip en dos.
|
|
#
|
|
# Uso: bash 01-traer-dump.sh [nombre-del-dump]
|
|
# sin argumento coge el mas reciente de /web/wp-content/updraft/
|
|
#
|
|
set -euo pipefail
|
|
set -a; . ~/.hermes/profiles/feadulta/.env 2>/dev/null; set +a
|
|
|
|
WORK=/home/rafa/migracion-wp
|
|
SRV=root@188.40.120.157
|
|
ORIG=feadulta@134.0.10.170
|
|
mkdir -p "$WORK"
|
|
|
|
s() { sshpass -p "$FEA_PROD_SSH_PASS" ssh -o StrictHostKeyChecking=accept-new "$ORIG" "$@"; }
|
|
|
|
DUMP="${1:-}"
|
|
if [ -z "$DUMP" ]; then
|
|
# sin xargs ni basename: la jaula de CDMON tiene un PATH minimo
|
|
DUMP=$(s 'ls -t /web/wp-content/updraft/*-db.gz | head -1 | sed "s|.*/||"')
|
|
fi
|
|
echo "== dump elegido: $DUMP"
|
|
|
|
echo "== en origen:"
|
|
s "php -r \"\\\$p='/web/wp-content/updraft/$DUMP'; echo ' ',filesize(\\\$p),' bytes sha256=',hash_file('sha256',\\\$p),\\\"\n\\\";\""
|
|
|
|
echo "== descargando a la WSL:"
|
|
T0=$(date +%s)
|
|
s "cat /web/wp-content/updraft/$DUMP" > "$WORK/$DUMP"
|
|
T1=$(date +%s); echo " descarga: $((T1-T0))s"
|
|
|
|
echo "== integridad en la WSL:"
|
|
ls -l "$WORK/$DUMP" | awk '{print " ", $5, "bytes"}'
|
|
sha256sum "$WORK/$DUMP" | awk '{print " sha256=", $1}'
|
|
gzip -t "$WORK/$DUMP" && echo " gzip: integro"
|
|
|
|
echo "== subiendo al Hetzner:"
|
|
ssh -o BatchMode=yes "$SRV" 'mkdir -p /data/feadulta-migracion'
|
|
T2=$(date +%s)
|
|
scp -q "$WORK/$DUMP" "$SRV:/data/feadulta-migracion/"
|
|
T3=$(date +%s); echo " subida: $((T3-T2))s"
|
|
|
|
echo "== verificacion en destino:"
|
|
ssh -o BatchMode=yes "$SRV" "cd /data/feadulta-migracion && ls -l $DUMP | awk '{print \" \", \$5, \" bytes\"}' && sha256sum $DUMP | awk '{print \" sha256=\", \$1}' && gzip -t $DUMP && echo ' gzip: integro'"
|
|
|
|
echo ""
|
|
echo "== total: $(( $(date +%s) - T0 ))s"
|
|
echo "$DUMP" > "$WORK/DUMP-DEL-DIA"
|
|
echo " (nombre guardado en $WORK/DUMP-DEL-DIA para el paso siguiente)"
|