10. Actualizar a una versión nueva (instalación manual, modo producción)
Estos son los pasos reales de la actualización de nuestra propia tienda en producción (de la 0.2.13 a la 0.2.16). En esa actualización el escaparate mostró la página de mantenimiento unos 7 minutos; los productos, los pedidos y los ajustes no cambiaron, y la licencia y la conexión con AliExpress siguieron en buen estado. Su tienda y su servidor son distintos, así que los tiempos serán otros.
Es para usted si instaló GetDropFlow descomprimiéndolo a mano (sin Composer) y su tienda funciona en modo producción. Si lo instaló con Composer, vea la sección "Actualización" de INSTALL.md dentro del paquete.
Lea esto primero
- El escaparate pasa a "mantenimiento" durante un rato corto. Elija una hora tranquila; mire antes cuántos pedidos tuvo en las últimas 24 horas.
- Primero la copia de seguridad. No empiece hasta tenerla hecha y comprobada.
- No descomprima encima de los archivos antiguos. Los archivos que la versión nueva ya no tiene se quedarían. Primero borre las cinco carpetas de módulo antiguas y después descomprima el paquete nuevo.
- Ejecute los comandos con el usuario con el que funciona su sitio web, no como root. Si no, se crean archivos que solo root puede leer o escribir y el escaparate puede fallar.
- En esta página,
WEB_USER,WEB_GROUPyPHPson los valores reales de su servidor. Vea el paso 0.
Paso 0: averigüe cómo está su tienda (solo mirar, no cambiar nada)
En el terminal del servidor, entre en la carpeta raíz de Magento (la que contiene app, bin y pub) y ejecute:
pwd
php -v | head -1
php bin/magento --version
php bin/magento deploy:mode:show
php bin/magento maintenance:status
grep -h '"version"' app/code/DropshipKit/*/composer.json
ls pub/static/frontend/*/*/
df -h . | tail -1
Anote:
- La versión que tiene ahora. Las cinco líneas deben coincidir. La página de Ajustes todavía no muestra la versión, así que este comando es la forma de comprobarla.
- Su versión de Magento. GetDropFlow necesita Magento 2.4.9 y PHP 8.4.1 o superior en la línea de comandos.
- Los idiomas de su escaparate, con el último
ls(por ejemploen_US,es_ES,zh_Hans_CN). En el paso 6 debe listarlos todos al desplegar los archivos estáticos. Si falta uno, ese idioma pierde los estilos. - El espacio libre en disco, suficiente para una copia de seguridad.
- El usuario con el que funciona su sitio web (propietario de los archivos), llámelo
WEB_USER, y el grupo,WEB_GROUP. Comando:ls -ld app.
Abajo usamos estos nombres. Cámbielos por los suyos:
cd /su/raiz/de/magento
M="sudo -u WEB_USER php -d memory_limit=-1 bin/magento"
php debe ser la misma versión que usa su sitio web. Si el servidor tiene varias versiones de PHP, use la del sitio (por ejemplo php8.4). Si no está seguro, pregunte a su proveedor de alojamiento.
Paso 1: copia de seguridad (sin todo esto, no actualice)
B=/root/backup-gdf/before-VERSION_NUEVA
mkdir -p $B && chmod 700 $B
cp -a app/code/DropshipKit $B/DropshipKit-before
cp -a app/etc/env.php app/etc/config.php $B/
$M module:status > $B/modules-before.txt
Copia de la base de datos: haga una copia completa con mysqldump (o con la función de copias del panel de su proveedor). Lea el usuario y la contraseña de la base de datos en app/etc/env.php; nunca los pegue en un chat, un documento ni una captura de pantalla. Después compruebe dos cosas:
- El archivo no está vacío.
- Al final del archivo hay una línea
Dump completed, y el número de tablas que contiene coincide con el de la base de datos real.
Mejor aún, una instantánea de todo el servidor, si su proveedor la ofrece (por ejemplo la "instantánea" de un VPS). Cree una antes de actualizar. Puede devolver todo el servidor a ese momento y es su última defensa. Atención: un proveedor suele guardar una sola instantánea, tiene fecha de caducidad, y al restaurarla se pierden los pedidos hechos después. Es un seguro extra, no sustituye a las copias de arriba.
¿Se puede restaurar de verdad? Si puede, restaure la copia de la base de datos en una base temporal una vez y compare el número de filas de algunas tablas clave (pedidos, productos, tablas que empiezan por dropshipkit_) con la base real. En nuestra actualización este paso no fue posible (la cuenta de base de datos del sitio puede no tener permiso para crear bases), así que lo marcamos como "no verificado" y nos apoyamos en la comprobación de integridad y en una instantánea de todo el servidor.
Paso 2: descargue el paquete nuevo y compruébelo
- Abra la página de descarga de nuestra web, escriba su clave de licencia y descargue
dropshipkit-manual-install-VERSION_NUEVA.zip. - La página muestra la suma de comprobación SHA-256 del archivo. Cuando lo suba al servidor debe compararla; vea el paso 3.
Paso 3: súbalo al servidor y compruébelo
- Suba el zip a la carpeta raíz de Magento (sirven el administrador de archivos de su proveedor o SFTP).
- Una subida puede desordenar el grupo de archivos de todo el sitio. Corríjalo justo después de subir:
chgrp -R WEB_GROUP .
- Compruebe que el archivo no está dañado. Ponga en la primera línea la suma de comprobación de la página de descarga:
E=SUMA_DE_LA_PAGINA_DE_DESCARGA
H=$(sha256sum dropshipkit-manual-install-VERSION_NUEVA.zip | cut -c1-64)
[ "$H" = "$E" ] && echo HASH_OK || echo HASH_BAD
unzip -p dropshipkit-manual-install-VERSION_NUEVA.zip BUILD-INFO.txt | head -4
Siga solo si ve HASH_OK y la primera línea de BUILD-INFO.txt es la versión que quiere. Pare si ve HASH_BAD y descargue de nuevo.
Paso 4: active el modo mantenimiento y cambie los módulos
Desde aquí el escaparate muestra "mantenimiento".
$M maintenance:enable
[ -d app/code/DropshipKit/Core ] && rm -rf app/code/DropshipKit/Admin app/code/DropshipKit/Catalog app/code/DropshipKit/Core app/code/DropshipKit/Orders app/code/DropshipKit/Shipping
unzip -q -o dropshipkit-manual-install-VERSION_NUEVA.zip "app/code/*"
chown -R WEB_USER:WEB_GROUP app/code/DropshipKit
find app/code/DropshipKit -type d -exec chmod 2770 {} +
find app/code/DropshipKit -type f -exec chmod 660 {} +
grep -h '"version"' app/code/DropshipKit/*/composer.json
La última línea debe mostrar cinco veces la versión nueva.
Paso 5: actualización de la base de datos y compilación del código
$M setup:upgrade --keep-generated
$M setup:di:compile
En nuestra tienda pequeña setup:di:compile tardó menos de un minuto; en una tienda grande tarda más. Cuando la pantalla se quede quieta no cierre la página; espere a ver Generated code and dependency injection configuration successfully.
Durante la actualización puede aparecer generated/code/Magento cannot be deleted. Es un aviso conocido e inofensivo y puede ignorarlo. Pare ante cualquier otro error en rojo y lea "Volver atrás" más abajo.
Paso 6: desplegar los archivos estáticos, vaciar la caché y quitar el mantenimiento
Cambie la lista de idiomas por todos los que vio en el paso 0:
$M setup:static-content:deploy -f en_US es_ES zh_Hans_CN
$M cache:flush
chgrp -R WEB_GROUP .
$M maintenance:disable
$M maintenance:status
Deje la tienda en modo producción; no cambie de modo.
Paso 7: compruebe todo
Escaparate (navegador o comando): la página de inicio, la de inicio de sesión, el carrito, la de contacto y una página de producto o categoría deben abrirse con normalidad; la página de pago debe abrirse (hasta "método de envío", no haga ningún pedido). Revise todos los idiomas del escaparate.
Para ver los códigos de estado con un comando:
for u in / /customer/account/login/ /checkout/cart/ /contact/ ; do echo "$u $(curl -s -o /dev/null -w '%{http_code}' https://SU-DOMINIO$u)"; done
Debe ver 200. Ir al pago con el carrito vacío devuelve 302 (una redirección), que también es normal. La primera petición es más lenta porque la caché acaba de vaciarse.
Administración: inicie sesión y revise, por orden:
- GetDropFlow → Ajustes: el estado de la licencia es "Activa" y la cuenta de AliExpress está "Conectada". Pulse Verificar ahora una vez (solo pregunta al servidor de licencias por el estado; no cambia ningún ajuste).
- Se abren todos los submenús de GetDropFlow.
- Se abren todas las entradas nuevas de GetDropFlow en Catálogo.
- Ventas → Pedidos: se muestra la lista. No abra ningún pedido ni pulse ningún botón de enviar.
Después de actualizar no cambie ajustes y no active "enviar de verdad a AliExpress".
Registros: tras la actualización, mire var/log/exception.log y var/report por si hay archivos nuevos. En system.log, líneas como maintenance mode is enabled durante el mantenimiento son normales (las tareas programadas fueron rechazadas mientras la tienda estaba en mantenimiento); dejan de aparecer al quitar el mantenimiento.
Obsérvela durante una hora: ¿hay errores 5xx en el escaparate, errores de las tareas programadas? ¿Siguen entrando pedidos?
Volver atrás (úselo en cuanto un paso parezca mal)
$M maintenance:enable
rm -rf app/code/DropshipKit
cp -a $B/DropshipKit-before app/code/DropshipKit
chown -R WEB_USER:WEB_GROUP app/code/DropshipKit
$M setup:upgrade --keep-generated
$M setup:di:compile
$M setup:static-content:deploy -f TODOS-SUS-IDIOMAS
$M cache:flush
chgrp -R WEB_GROUP .
$M maintenance:disable
Normalmente no hace falta restaurar la base de datos. Si de verdad debe hacerlo, antes asegúrese de que la copia está bien y después restáurela; al restaurar se pierden los pedidos hechos después de la copia, así que piénselo bien. La instantánea de todo el servidor es el último recurso.
Problemas frecuentes
La página de Ajustes no muestra la versión. ¿Cómo sé que funcionó? Ejecute el comando grep '"version"' del paso 0 y mire los cinco módulos; si todos muestran la versión nueva, funcionó. Desde la 0.2.17, el cuadro de licencia de la página de Ajustes tiene una fila "GetDropFlow plugin version" que muestra la versión que comparten los cinco módulos; si los cinco módulos difieren, esa fila avisa en negrita y lista la versión de cada módulo, lo que significa que la actualización no se completó: instale de nuevo el paquete completo. Las versiones anteriores a la 0.2.17 no tienen esa fila.
¿La página de Ajustes muestra un error que dice que la clase de la página de ajustes necesita 15 argumentos pero solo se pasaron 14? La configuración de dependencias compilada sigue siendo la antigua tras la actualización. Ejecute $M setup:di:compile, luego $M cache:flush y recargue la página de Ajustes. Una tienda que estaba compilada antes de actualizar a la 0.2.17 (el modo producción siempre lo está) debe compilarse de nuevo después; los comandos del paso 5 ya incluyen este paso, no lo omita. (Traducción automática de IA, no revisada por una persona.)
¿El escaparate muestra un error 500 o una página en blanco? Primero $M cache:flush, después chgrp -R WEB_GROUP .; si no ayuda, use "Volver atrás".
¿La página de Ajustes de la administración no se abre? Mire las últimas líneas de var/log/exception.log y envíe el error a nuestro soporte. Nunca incluya contraseñas de base de datos ni claves de licencia.
¿Lo instalé con Composer? Esta página no se aplica; vea la sección "Actualización" de INSTALL.md dentro del paquete.