¿Cómo transferir el sitio Magento 2 de Localhost al servidor?
Publicado: 2019-06-06El proceso de transferir un sitio basado en Magento 2 de un host local a otro no requiere mucho tiempo. Sin embargo, tiene una serie de detalles esenciales y aspectos especiales que deben tenerse en cuenta antes de sumergirse en el proceso.
En esta publicación de blog, haremos que la transferencia de un sitio Magento 2 de localhost a servidor sea tan fácil como Lego. Tengamos una idea.
Tabla de contenido
- Pasos principales
- Fácil como Lego: Directrices paso a paso
- 1. Comprobación del estado del sitio de Magento 2 en el host actual
- 2. Preparar el host remoto (B)
- 3. Comprobación de host remoto (B)
- 4. Preparar los datos para la transferencia
- 4.1. volcado de archivos
- 4.2. Volcado de bases de datos
- 5. Transferencia de datos
- 6. Desempaquetado de datos
- 6.1. Desempaquetado de archivos
- 6.2. Importación de bases de datos
- 7. Acceda a la corrección de datos en el host remoto (B)
- 8. Corrección de permisos de acceso a archivos y directorios
- 10. Solución de problemas: problemas frecuentes
- Número 1
- Número 2
- Número 3
- Número 4
- Número 5
- Línea de fondo
Pasos principales
Para empezar, echemos un vistazo a los pasos principales de la transferencia:
- Comprobación del estado del sitio de Magento 2 en el host actual (A);
- Preparando el host remoto (B);
- Comprobación de host remoto (B);
- Preparar los datos para la transferencia; 4.1. volcado de archivos; 4.2. volcado de base de datos;
- Transferencia de datos;
- Desempaquetado de datos; 6.1. Desempaquetado de archivos; 6.2. Importación de bases de datos;
- Acceda a la corrección de datos en el host remoto (B);
- Corrección de permisos de acceso a archivos y directorios;
- Procedimientos estándar antes de lanzar Magento;
- Comprobaciones de rendimiento de Magento en el host remoto (B);
- Solución de problemas frecuentes.
Fácil como Lego: Directrices paso a paso
1. Comprobación del estado del sitio de Magento 2 en el host actual
Todo es fácil aquí: ejecutar y comprobar. Por lo general, se debe crear una orden (ciclo completo) para tales fines. Entonces revisa:
- búsqueda;
- paginas de productos,
- categorías,
- cuenta del cliente.
Esta es una etapa importante, ya que le permite evitar luchar con preguntas sobre cuándo exactamente algo dejó de funcionar después de mudarse a un nuevo host. Además, esto le ahorrará la necesidad de lidiar con los problemas básicos del host que se pueden resolver de antemano (A).
Te animo a NO transferir un Magento operativo a medias sin ninguna necesidad urgente. Es mucho más fácil lidiar con todos los problemas en el host actual (A) antes de iniciar el proceso de transferencia. Probado y probado: esto le ahorrará tiempo y dolor en el cuello.
2. Preparar el host remoto (B)
El servidor en el que se implementa la copia de Magento debe cumplir los requisitos mínimos para su versión de Magento.
Estudie la documentación oficial para obtener más información sobre esos requisitos: https://devdocs.magento.com/guides/v2.3/install-gde/system-requirements-tech.html
El entorno debe configurarse antes de continuar con los siguientes pasos del proceso de transferencia (servidor web con host virtual, PHP, base de datos).
Desafortunadamente, la configuración de cada parte por separado está más allá de los límites de este artículo. Sin embargo, puede encontrar fácilmente la información adicional requerida en la web. Por lo tanto, no debería ser de dificultad.
Recomiendo prestar especial atención a la presencia de las extensiones PHP requeridas.
Si tiene alguna pregunta sobre cualquier paso de este tutorial, deje un comentario. Haré todo lo posible para responder a todas ellas.
3. Comprobación de host remoto (B)
Antes de transferir Magento, asegúrese de que funcione en el nuevo host y que el propio host funcione correctamente. Primero, verifique que el servidor web responda en la dirección indicada (suponemos que el host ya se ha configurado).
En mi ejemplo, uso la ruta estándar que está disponible justo después de instalar Apache2 en el servidor Linux:
> /var/www/html
sudo -u apache echo "<?php phpinfo();?>" > /var/www/html/index.php
*Aquí y más allá, los comandos se ejecutarán desde los usuarios correspondientes si es necesario. Si el comando se ejecuta sin un nombre de usuario, la ejecución del comando debe entenderse desde el usuario actual y la disponibilidad de los permisos correspondientes.
Si no aparecen errores después de ejecutar este comando, entonces todo salió bien y su archivo `index.php` debe estar disponible en la siguiente dirección: {host}/index.php. El resultado en su navegador debería verse así (aunque mucho aún depende de su versión de PHP):
Si algo salió mal y no ve información sobre su versión de PHP, consulte la guía correspondiente sobre la configuración del servidor web que necesita.
Además, recomiendo estudiar los registros con anticipación; esto le ahorrará mucho tiempo.
A continuación, compruebe que el servicio de la base de datos se haya iniciado y funcione correctamente:
mysql -u root -p
Como resultado, debería conectarse con éxito a MySQL. Use el comando `exit` para salir.
* Ingrese el nombre de usuario y la contraseña que utilizó al configurar MySQL.
Además, después de conectarse a MySQL con éxito, deberá verificar las bases de datos existentes.
SHOW databases;
Los nombres de las bases de datos que planea transferir no deben ser los mismos que los que ya existen en el nuevo servidor. En caso de que existan bases de datos similares, este problema debe resolverse manualmente eliminando una base de datos existente pero no utilizada, por ejemplo, o cambiando el nombre de una base de datos de Magento que desee transferir. Tenga en cuenta que necesariamente debe ingresar el nombre cambiado en el archivo de configuración del entorno Magento `app/etc/env.php`.
Su resultado debe verse de la siguiente manera:
Además, debe verificar que el servicio en sí se haya iniciado y escuche el puerto estándar utilizando la utilidad netstat :
netstat -vulntp | grep -i mysql
Su resultado se verá de la siguiente manera:
> tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 3366/mysqld
4. Preparar los datos para la transferencia
4.1. volcado de archivos
Antes de crear un volcado de archivos, le recomiendo encarecidamente que elimine todos los archivos innecesarios del directorio de Magento, si los hay, es decir, volcados antiguos, caché, registros, etc.
rm -rf var/cache/* var/page_cache/* var/generation/* var/composer_home/cache/* var/log/* pub/static/*
Esto le permitirá acortar el proceso. Además de ahorrarte la transferencia de archivos innecesarios, evitarás usar espacio en el servidor sin ninguna necesidad particular.
* NO elimine a la fuerza `.htaccess` y otros archivos ocultos, si usa el servidor web Apache2 (el comando `rf` no los elimina por defecto). Estos archivos son necesarios para el correcto funcionamiento de Magento.
Ahora, ve al directorio donde está nuestro Magento en el servidor local (A). En mi ejemplo, es:
> /Users/sergei/PhpstormProjects
El directorio con Magento se nombra bajo aws-botapi
.
Vamos a crear un archivo para su posterior transferencia al host remoto (B):
tar -zcf aws-botapi.tar.gz aws-botapi
Debe verificar que el archivo haya sido creado:
ls -la aws-botapi.tar.gz
4.2. Volcado de bases de datos
Si hay varias bases de datos separadas que están organizadas localmente en su sitio de Magento, entonces todas deben transferirse. En mi ejemplo, se utilizan dos bases de datos. Puedes encontrarlos en las configuraciones del entorno Magento `app/etc/env.php` en la sección `db => connection => `.
Ahora, descargue todas las bases de datos:
mysqldump -u root -p db1 | gzip > ./db1.sql.gz mysqldump -u root -p db2 | gzip > ./db2.sql.gz
*Utilice información como el nombre de usuario y el nombre de la base de datos.
5. Transferencia de datos
Transfiera el volcado de archivos de Magento usando la utilidad `scp` (copiando a través de ssh) o use cualquier otro medio según su conveniencia (por ejemplo, copiando a través de `ftp`):
scp -i ~/.ssh/myprivatekey.pem aws-botapi.tar.gz [email protected]:/home/ec2-user
Dónde,
a) -i ~/.ssh/myprivatekey.pem es la ruta a la clave privada para la conexión (ignore esto si usa solo la contraseña);
b) ec2-user es el nombre de usuario para la conexión;
c) 52.12.187.98 es la dirección del servidor;
d) /home/ec2-user es la ruta absoluta en el servidor, donde copiamos los archivos.
*Si usa un puerto diferente al estándar, no olvide identificarlo usando un parámetro separado (por ejemplo, `-P 6000` para el puerto 6000).
Una vez completada la copia, verá una línea del tipo:
> aws-botapi.tar.gz 100% 312MB 4.3MB/s 01:11
Repita las mismas acciones para el volcado de archivos:
scp -i ~/.ssh/myprivatekey.pem db1.sql.gz [email protected]:/home/ec2-user scp -i ~/.ssh/myprivatekey.pem db2.sql.gz [email protected]:/home/ec2-user
6. Desempaquetado de datos
6.1. Desempaquetado de archivos
En el servidor (B), vayamos al directorio en el que copiamos los archivos. Descomprimamos los archivos de Magento en el directorio del host local:
> tar -zxf aws-botapi.tar.gz -C /var/www/html/
Asegúrese de comprobar que los archivos se han descomprimido correctamente:
ls -la /var/www/html
Si los archivos de Magento se han desempaquetado en el subdirectorio, transfiéralos usando los comandos `mv` o `cp`.
6.2. Importación de bases de datos
Conéctese a MySQL en el servidor (B):
mysql -u root -p
Ahora, vamos a crear una nueva base de datos:
CREATE DATABASE IF NOT EXISTS db1 CHARACTER SET utf8 COLLATE utf8_general_ci;
*El resultado debería verse así:
> Query OK, 1 row affected (0.01 sec)
Realice acciones similares en caso de que tenga otras bases de datos.
Luego, importe bases de datos desde el volcado:
gunzip < /home/ec2-user/db1.sql.gz | mysql -u root -p db1 gunzip < /home/ec2-user/db2.sql.gz | mysql -u root -p db2
Conéctese a MySQL:
mysql -u root -p
y verifique que todas las bases de datos estén presentes:
SHOW databases;
La lista de todas las bases de datos debe estar disponible, incluida la nuestra:
+--------------------+ | Database | +--------------------+ | db1 | | db2 | | information_schema | | mysql | | performance_schema | +--------------------+ 5 rows in set (0.00 sec)
Seleccione la base de datos que acabamos de importar:
USE db1;
y comprobar la presencia de tablas:
SHOW tables;
En caso de que las tablas no se hayan creado o estén vacías, verifique el archivo de volcado y repita todo el proceso una vez más, excepto el paso en el que se creó una nueva base de datos (ya que ya existe).
7. Acceda a la corrección de datos en el host remoto (B)
Los principales datos que se deben cambiar en Magento luego de ser transferidos son 1) URLs básicas y 2) claves de acceso a MySQL:
Cambiar las URL básicas
Deberá cambiar todas las rutas antiguas en la tabla `core_config_data`. Para empezar, localicemos estos campos usando la consulta 'valor' que incluye la dirección anterior. Supongamos que la dirección del sitio web anterior era '1001101010.com', entonces el comando de búsqueda se verá de la siguiente manera:
SELECT * FROM core_config_data WHERE `value` LIKE '%1001101010.com%' \G
*`\G` al final de la consulta en lugar de `;` hará que los registros sean más legibles.
** No olvide usar `table_prefix` antes de los nombres de las tablas si se instaló.
El resultado se verá así:
mysql> SELECT * FROM core_config_data WHERE `value` LIKE '%1001101010.com%' \G *************************** 1. row *************************** config_id: 2 scope: default scope_id: 0 path: web/unsecure/base_url value: http://1001101010.com/
*************************** 12. row *************************** config_id: 2401 scope: default scope_id: 0 path: web/secure/base_url value: https://1001101010.com/ *************************** 13. row *************************** config_id: 2402 scope: default scope_id: 0 path: web/secure/base_link_url value: https://1001101010.com/ 13 rows in set (0.00 sec)
En este punto, nuestro objetivo es cambiar la dirección anterior por una nueva. Para este propósito, asegurémonos de que se debe cambiar en todas las líneas (es así la mayoría de las veces, excepto en algunos casos raros que involucran la configuración de módulos de terceros) y ejecute la siguiente consulta:
UPDATE `core_config_data` SET `value` = replace(value, '1001101010.com', 'mynewdomain.com') WHERE `value` LIKE '%1001101010.com%';
Reemplazará todas las apariciones de las líneas `1001101010.com` en el campo `valor` a la línea `mynewdomain.com`.
El resultado debería ser el siguiente (el número de líneas debería ser igual):
> Query OK, 13 rows affected (0.00 sec) > Rows matched: 13 Changed: 13 Warnings: 0
La siguiente solicitud:
SELECT * FROM core_config_data WHERE `value` LIKE '%1001101010.com%' \G
Ahora, es momento de proceder a editar el archivo del entorno `app/etc/env.php` (desde la raíz de Magento; en el ejemplo, era `/var/www/html/`).
Abrámoslo en un programa de edición de texto (yo uso Nano aunque seguramente es una cuestión de preferencias personales).
nano /var/www/html/app/etc/env.php
Luego edite los datos en `'db' => 'conexión'` especificando los datos precisos del nuevo servidor en los campos 'nombre de usuario' y 'contraseña'.
* ¡IMPORTANTE! Si su base de datos está ubicada en un servidor remoto, no es necesario cambiar los datos. Lo único que debe hacer es asegurarse de que haya acceso desde el servidor actual a esa base de datos remota. (Por ejemplo, que se haya agregado a la lista blanca del firewall en el servidor de la base de datos).
Utilice el valor 'localhost' en el campo 'host' para comprender si la conexión es local o no.
A continuación, guarde el archivo.
8. Corrección de permisos de acceso a archivos y directorios
Para configurar con precisión los permisos de acceso, necesita saber de qué usuario y con qué grupo se ejecuta su servidor web.
Con mayor frecuencia, es `apache` para CentOS o `www-data` en Ubuntu. Como regla general, el nombre de usuario es igual al nombre del grupo. Sin embargo, en diferentes servidores, esto puede diferir.
El siguiente comando te ayudará a resolverlo:
ps aux | egrep '(apache|httpd)'
Como resultado, en la primera columna, verá el nombre de usuario (es probable que el nombre del grupo sea el mismo). Sin embargo, si no está seguro, use el comando `groups apache`, donde `apache` es el nombre de usuario para Échale un vistazo).
Lo primero después de esto, necesitaremos transferir todos los archivos y directorios dentro de Magento al usuario del servidor web (es `apache` en el ejemplo. Para el usuario `www-data` simplemente reemplace `apache:apache` a ` www-data:www-data`, y de manera similar para otros):
sudo chown -R apache:apache /var/www/html
A continuación, compruebe si los cambios se han aplicado o no:
ls -la /var/www/html
Todos los archivos y directorios (excepto el principal marcado como `..` deben tener un usuario y el grupo `apache` (si `www-data` es un usuario del servidor web en su sistema, entonces debe estar marcado como un dueño):
Ahora, se requiere configurar con precisión los permisos de acceso a los archivos y directorios de Magento. Según la documentación, se recomienda encarecidamente la siguiente configuración:
*¡Todos los comandos deben ejecutarse desde la raíz de Magento!, consistentemente 1 tras 1. En el ejemplo, la raíz de Magento en el servidor es `/var/www/html`.
Utilice el comando `pwd` para comprobar la ubicación actual.
find var generated vendor pub/static pub/media app/etc -type f -exec chmod u+w {} + find var generated vendor pub/static pub/media app/etc -type d -exec chmod u+w {} + chmod u+x bin/magento
*Si el usuario actual no tiene permisos para ejecutar estos comandos, use el comando `root` del usuario (comando `sudo`, como `sudo find …`)
9. Procedimientos estándar antes de lanzar Magento
Es hora de comprobar que Magento se inicia desde la línea de comandos. Para empezar, probemos la salida estándar de los comandos a los que tiene acceso:
*Ahora, después de configurar los permisos, cualquier acceso a Magento se realizará desde el mismo usuario del servidor web que genera archivos, archivos de caché, estática, etc. Si ignora esto, Magento puede dejar de ejecutarse y se verá obligado a restaurar los permisos. una vez más (el paso anterior en estas pautas).
**Para una operación precisa, deberá encontrar el intérprete de php
correcto en su servidor. Por lo general, el alias `php` se refiere a la versión actualizada. Sin embargo, a menudo deberá indicar la ruta completa, como `/usr/bin/php72`, por ejemplo.
***Aquí y más adelante, todos los comandos de Magento se ejecutarán desde el directorio raíz de Magento en el servidor (B).
sudo -u apache php bin/magento list
Esto hará que la lista con los comandos disponibles en la línea de comandos:
Si todo salió bien, puede continuar con los siguientes comandos:
*Si antes de la transferencia no borraste los directorios con caché y los archivos generados, este es el momento adecuado para hacerlo usando el siguiente comando:
sudo rm -rf var/cache/* var/page_cache/* var/generation/*
sudo -u apache php bin/magento setup:upgrade
Puede evitar ejecutar este comando, pero aun así recomiendo asegurarse de que todos los módulos estén escritos y no ocurran errores. Como resultado, verá una lista con los módulos que se procesaron, sin ver ningún error en el proceso.
Realice la compilación para generar los archivos Magento necesarios:
sudo -u apache php bin/magento setup:di:compile
*En este punto, es fundamental detectar todos los errores que se han producido. De lo contrario, Magento funcionará incorrectamente. Si no se han encontrado errores, entonces todo es perfecto. ?
Luego, genere estáticas (si el modo de producción está habilitado. Para verificar su modo actual, use el siguiente comando:
sudo -u apache php bin/magento deploy:mode:show
sudo -u apache php bin/magento setup:static-content:deploy
*Para generar estadísticas para un lugar específico, especifíquelo como un parámetro después del comando. Por ejemplo, `sudo -u apache php bin/magento setup:static-content:deploy ru_RU` se utilizará para la configuración regional rusa.
¡Felicidades! Ha transferido con éxito su tienda Magento2 desde localhost para operar correctamente en un nuevo servidor. ¡Ahora, ábralo en un navegador ingresando una nueva dirección!
10. Solución de problemas: problemas frecuentes
Número 1
Problema:
Si al copiar el archivo, recibe un mensaje del tipo:
scp: /var/www/html/aws-botapi.tar.gz: Permission denied
Luego, debe verificar dónde copió el archivo en el servidor en primera instancia. Es muy probable que el usuario que pretende conectarse carezca de permisos para realizar un registro en este directorio (`/var/www/html` en el ejemplo).
Solución:
Esto se puede resolver cambiando el directorio donde intenta copiar al ejecutar el comando ` scp ` o conectándose al servidor y ajustando los permisos de acceso a este directorio para el usuario actual:
`sudo chown -R ec2-user /var/www/html` (hace que un usuario sea el propietario del directorio `/var/www/html` y de todos los archivos y directorios incluidos), o
`sudo chmod -R o+w /var/www/html` (permite que todos (`o-ther`) hagan un registro (`w-rite`) en el directorio `/var/www/html`).
Utilice estos comandos con precaución ya que influyen directamente en la seguridad de su sistema.
Número 2
Problema:
Si al importar bases de datos, ocurre el siguiente error `ERROR 1049 (42000): Base de datos desconocida 'db1'` (donde `db1` es el nombre de una base de datos), entonces su base de datos no ha sido creada.
Solución:
Intente acceder a `mysql` y vuelva a crear esta base de datos una vez más.
Número 3
Problema:
Si al cambiar el propietario de los archivos y directorios, ve el comando `chown: usuario no válido: …`, entonces es probable que haya especificado incorrectamente el usuario del servidor web en su servidor.
Solución:
Consulte las guías correspondientes sobre la configuración del servidor en su sistema o use la utilidad `ps aux` para determinar el usuario correcto.
Número 4
Problema:
Si hay errores de PHP al iniciar Magento en un nuevo servidor (por regla general, significa la ausencia de algunas extensiones de PHP)…
Solución:
Esto se puede solucionar instalando las extensiones que faltan.
a) `Se requiere la extensión json de PHP para usar NormalizerFormatter de Monolog` ―
Falta la extensión *php-json*;
b) `Error fatal de PHP: Error no detectado: Clase 'DOMDocument' no encontrada en...' ―
Falta la extensión *php-xml*;
c) `Error fatal de PHP: Clase 'IntlDateFormatter' no encontrada en...' ―
Falta la extensión *php-intl*.
Número 5
Problema:
Si faltan las extensiones de PHP al ejecutar el comando `composer update`, verá los siguientes errores:
Por ejemplo,
`phpunit/phpunit 6.5.14 requiere ext-mbstring * -> la extensión PHP solicitada mbstring no se encuentra en su sistema.`
Solución:
Para lidiar con tales errores, simplemente debe instalar las extensiones de PHP a las que se refiere el compositor. Por ejemplo, `yum install php-mbstring`.
Puede encontrar una lista completa de las extensiones requeridas para su versión Magento 2 en la documentación oficial.
Línea de fondo
¡Estas listo! En este artículo, hice todo lo posible para presentar pasos fáciles de seguir para transferir su sitio Magento 2 de localhost a servidor.
Si aún tiene preguntas o desea compartir su opinión, no dude en utilizar la sección de comentarios a continuación. ¡Haré todo lo posible para responder a todas las preguntas e inquietudes!