Table of Contents
- Sincronización local → producción (wp-nuevo)
- Acceso (histórico)
- Subir ficheros (histórico: en CDMON scp/sftp no funcionaban)
- mu-plugins (fea-homepage.php, carta-semana-plugin.php)
- Posts / metas / opciones
- Verificar (Cloudflare bloquea curl/headless)
- Sincronizar IDs entre local y prod
- Ejemplo real: despliegue de avatares (issue #62, 2026-06-15)
Sincronización local → producción (wp-nuevo)
⚠️ PÁGINA OBSOLETA — describe el servidor cPanel/CDMON, retirado en el cutover a Hetzner del 2026-08-03. Los rodeos de aquí abajo (subir ficheros con
ssh 'cat >', evitarmysqldump, usarwpporquephpestaba roto) ya no hacen falta: en Hetzner funcionanscp,docker cp,phpyproc_open.Usa Produccion-Hetzner-acceso. Se conserva esta página como referencia histórica del método antiguo. Credenciales retiradas el 2026-08-12 (— Opix).
Regla general que sigue vigente: los IDs y el código viven en paralelo entre local y prod (misma migración). Replica los cambios del mismo modo y mantén los IDs sincronizados.
Acceso (histórico)
# Credenciales: ver ~/.hermes/profiles/feadulta/.env — no se documentan aquí.
SSH="ssh -i ~/.ssh/id_ed25519 rafa@188.40.120.157" # servidor ACTUAL
Subir ficheros (histórico: en CDMON scp/sftp no funcionaban)
Fichero único (binario-safe):
$SSH 'cat > /web/wp-nuevo/wp-content/.../destino.png' < /local/fichero.png
$SSH 'wc -c /web/wp-nuevo/wp-content/.../destino.png' # verificar tamaño (no hay stat)
Muchos ficheros → empaquetar y extraer con tar (sí existe en prod):
tar czf /tmp/bundle.tgz -C /local/dir subcarpeta/ # ojo a las rutas relativas del tar
$SSH 'cat > /web/wp-nuevo/wp-content/uploads/bundle.tgz' < /tmp/bundle.tgz
$SSH 'cd /web/wp-nuevo/wp-content/uploads && tar xzf bundle.tgz && rm bundle.tgz'
mu-plugins (fea-homepage.php, carta-semana-plugin.php)
# backup primero (no hay mysqldump/stat; cp sí)
$SSH 'cp /web/wp-nuevo/wp-content/mu-plugins/fea-homepage.php /entrada/fea-homepage.php.bak-$(date +%Y%m%d-%H%M)'
# subir
$SSH 'cat > /web/wp-nuevo/wp-content/mu-plugins/fea-homepage.php' < wordpress/wp-content/mu-plugins/fea-homepage.php
⚠️ No copiar
post_contentlocal→prod: mete URLs defarmer.taild3aaf6.ts.net. Transformar siempre sobre el contenido descargado de prod (wp post get ID --field=content), preservando sus URLswp-nuevo.feadulta.com.
Posts / metas / opciones
Vía wp eval-file (sube el .php con cat > y ejecútalo). proc_open off → no wp db query/import; usar wp eval, wp post update ID /ruta/fichero, o mysql directo.
$SSH 'cat > /web/wp-nuevo/script.php' < script.php
$SSH 'cd /web/wp-nuevo && APPLY=1 wp --skip-plugins --skip-themes eval-file script.php'
Verificar (Cloudflare bloquea curl/headless)
Server-side únicamente, o pedir a Rafa que mire en el navegador:
$SSH 'cd /web/wp-nuevo && wp --skip-plugins --skip-themes post get ID --field=content'
$SSH 'cd /web/wp-nuevo && wp --skip-plugins --skip-themes eval "echo wp_get_attachment_url(ID);"'
$SSH 'cd /web/wp-nuevo && wp --skip-plugins --skip-themes cache flush'
Sincronizar IDs entre local y prod
Los IDs de objetos suelen coincidir local↔prod (menú 1, archive 26561, cabecera 42366, pie 42370, template single 42359). Si difieren, mover con offset temporal +99000 para evitar conflictos de PK:
UPDATE wp_posts SET ID = ID + 99000 WHERE ID IN (...);
UPDATE wp_postmeta SET post_id = post_id + 99000 WHERE post_id IN (...);
UPDATE wp_term_relationships SET object_id = object_id + 99000 WHERE object_id IN (...);
-- luego mover a los IDs finales
Ejemplo real: despliegue de avatares (issue #62, 2026-06-15)
Patrón completo de referencia (genera PNGs en local → tar → ssh cat → tar xzf → wp eval-file que crea attachments y reapunta foto_perfil, con backup en _foto_perfil_pre62):
- Generar ficheros en local (
/tmp/...→uploads/avatares/autores/). tar czfcon rutas relativas correctas + manifestuids.json+ script importer.ssh 'cat > .../bundle.tgz'< bundle ·tar xzf.APPLY=1 wp eval-file import_prod_62.php(dry-run sinAPPLY).- Verificar server-side con
wp eval(contar reapuntados); limpiar caché.
Scripts en wordpress/wp-content/uploads/avatares/ (local). Ver master-feadulta.md para detalle.