Cómo instalar Magento eCommerce Suite en Debian 12 con Nginx y Elasticsearch
Magento es una plataforma de comercio electrónico de código abierto escrita en PHP. Fue adquirida por Adobe en 2018. También se ofrece como producto comercial y basado en la nube. Puedes utilizar Magento para crear sitios web de compras profesionales de gran capacidad. Ofrece tanto el modo de tienda única como el de tienda múltiple. Viene con un montón de módulos para ampliar su funcionalidad.
En este tutorial, instalaremos la edición comunitaria de código abierto de Magento. Ofrece toda la funcionalidad que necesitas para crear una tienda online profesional. También instalaremos Elasticsearch para buscar en el catálogo de productos, Redis para la caché de sesiones y archivos, y lo serviremos utilizando el servidor Nginx.
Requisitos previos
- Un servidor que ejecute Debian 12 con un mínimo de 2 GB de RAM. Es posible que necesites más RAM en función de tus necesidades.
- Un usuario no root con privilegios sudo.
- Un nombre de dominio completo (FQDN) para el servidor,
magento.example.com
- Asegúrate de que todo está actualizado.
$ sudo apt update $ sudo apt upgrade
- Pocos paquetes que necesite tu sistema.
$ sudo apt install wget curl nano ufw software-properties-common dirmngr apt-transport-https gnupg2 ca-certificates lsb-release debian-archive-keyring unzip -y
Puede que algunos de estos paquetes ya estén instalados en tu sistema.
Paso 1 – Configurar el cortafuegos
El primer paso es configurar el cortafuegos. Debian viene con ufw (Uncomplicated Firewall) por defecto.
Comprueba si el cortafuegos se está ejecutando.
$ sudo ufw status
Deberías ver algo como lo siguiente
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6)
Permite también los puertos HTTP y HTTPS.
$ sudo ufw allow http $ sudo ufw allow https
Comprueba de nuevo el estado del cortafuegos.
$ sudo ufw status
Deberías ver una salida similar.
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere 80/tcp ALLOW Anywhere 443 ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) 80/tcp (v6) ALLOW Anywhere (v6) 443 (v6) ALLOW Anywhere (v6)
Paso 2 – Instala PHP y sus extensiones
Debian 12 incluye la versión PHP 8.2 por defecto. Puedes instalarlo junto con las extensiones que necesita Magento ejecutando el siguiente comando.
$ sudo apt install php-fpm php-cli php-mysql php-mbstring php-xml php-gd php-bcmath php-zip php-curl php-tidy php-intl php-soap php-xsl libsodium-dev libsodium23 libssl-dev libcurl4-openssl-dev
Para estar siempre con la última versión de PHP o si quieres instalar varias versiones de PHP, añade el repositorio PHP de Ondrej.
Primero, importa la clave GPG del repositorio PHP de Sury.
$ sudo curl -sSLo /usr/share/keyrings/deb.sury.org-php.gpg https://packages.sury.org/php/apt.gpg
Añade el repositorio PHP de Ondrej Sury.
$ sudo sh -c 'echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'
Actualiza la lista de repositorios del sistema.
$ sudo apt update
A continuación, instala PHP y sus extensiones requeridas por Magento.
$ sudo apt install php8.2-fpm php8.2-mysql php8.2-bcmath php8.2-xml php8.2-zip php8.2-curl php8.2-mbstring php8.2-gd php8.2-tidy php8.2-intl php8.2-cli php8.2-soap php8.2-xsl libsodium-dev libsodium23 libssl-dev libcurl4-openssl-dev
Verifica la instalación.
$ php --version PHP 8.2.8 (cli) (built: Jul 16 2023 11:00:43) (NTS) Copyright (c) The PHP Group Zend Engine v4.2.8, Copyright (c) Zend Technologies with Zend OPcache v8.2.8, Copyright (c), by Zend Technologies
Paso 3 – Instalar Composer
Composer es una herramienta de gestión de dependencias para PHP y es necesaria para la instalación de Magento.
Ejecuta los siguientes comandos para descargar el binario de Composer. Magento requiere Composer 2.2 LTS por lo que hemos modificado el comando en consecuencia.
$ php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" $ php composer-setup.php --2.2 $ php -r "unlink('composer-setup.php');"
Instala Composer moviendo el binario al directorio /usr/local/bin
.
$ sudo mv composer.phar /usr/local/bin/composer
Verifica la instalación comprobando su versión.
$ composer --version Composer version 2.2.21 2023-02-15 13:07:40
Paso 4 – Instala MariaDB
Debian 12 no incluye MySQL por defecto y aún no han publicado un paquete oficial para ello. Por lo tanto, utilizaremos MariaDB para ello. MariaDB tampoco tiene un paquete oficial para Debian 12, pero Debian lo incluye. Por lo tanto, instálalo utilizando el siguiente comando.
$ sudo apt install mariadb-server
Comprueba la versión de MySQL.
$ mysql --version mysql Ver 15.1 Distrib 10.11.3-MariaDB, for debian-linux-gnu (x86_64) using EditLine wrapper
Ahora bien, esta versión de MariaDB no es compatible con Magento y el paquete oficial de MariaDB para Debian 12 no está disponible por el momento. Así que continuaremos con la instalación y utilizaremos una solución más adelante para evitar la restricción.
Ejecuta el script de instalación segura de MariaDB.
$ sudo mysql_secure_installation
Se te pedirá la contraseña de root. Pulsa Intro porque no hemos establecido ninguna contraseña para ella.
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY! In order to log into MariaDB to secure it, we'll need the current password for the root user. If you've just installed MariaDB, and haven't set the root password yet, you should just press enter here. Enter current password for root (enter for none):
A continuación, se te preguntará si quieres cambiar al método de autenticación por socket Unix. El complemento unix_socket
te permite utilizar las credenciales de tu sistema operativo para conectarte al servidor MariaDB. Como ya tienes una cuenta raíz protegida, introduce n
para continuar.
OK, successfully used password, moving on... Setting the root password or using the unix_socket ensures that nobody can log into the MariaDB root user without the proper authorisation. You already have your root account protected, so you can safely answer 'n'. Switch to unix_socket authentication [Y/n] n
A continuación, se te preguntará si quieres cambiar la contraseña de root. En Debian 12, la contraseña de root está estrechamente ligada al mantenimiento automatizado del sistema, por lo que conviene no modificarla. Escribe n
para continuar.
... skipping. You already have your root account protected, so you can safely answer 'n'. Change the root password? [Y/n] n
A continuación, se te harán algunas preguntas para mejorar la seguridad de MariaDB. Escribe Y para eliminar los usuarios anónimos, desautorizar los inicios de sesión remotos de root, eliminar la base de datos de prueba y recargar las tablas de privilegios.
... skipping. By default, a MariaDB installation has an anonymous user, allowing anyone to log into MariaDB without having to have a user account created for them. This is intended only for testing, and to make the installation go a bit smoother. You should remove them before moving into a production environment. Remove anonymous users? [Y/n] y ... Success! Normally, root should only be allowed to connect from 'localhost'. This ensures that someone cannot guess at the root password from the network. Disallow root login remotely? [Y/n] y ... Success! By default, MariaDB comes with a database named 'test' that anyone can access. This is also intended only for testing, and should be removed before moving into a production environment. Remove test database and access to it? [Y/n] y - Dropping test database... ... Success! - Removing privileges on test database... ... Success! Reloading the privilege tables will ensure that all changes made so far will take effect immediately. Reload privilege tables now? [Y/n] y ... Success! Cleaning up... All done! If you've completed all of the above steps, your MariaDB installation should now be secure. Thanks for using MariaDB!
Puedes entrar en el intérprete de comandos de MariaDB escribiendo sudo mysql
o sudo mariadb
en la línea de comandos.
Paso 5 – Configurar MariaDB
Accede al intérprete de comandos MariaDB.
$ sudo mysql
Crea una base de datos para Magento.
mysql> CREATE DATABASE magento;
Crea una cuenta de usuario SQL.
mysql> CREATE USER 'magentouser'@'localhost' IDENTIFIED BY 'Your_password2';
Concede todos los privilegios sobre la base de datos al usuario.
mysql> GRANT ALL PRIVILEGES ON magento.* TO 'magentouser'@'localhost';
Como no vamos a modificar el usuario root, debes crear otro usuario SQL para realizar tareas administrativas que empleen autenticación por contraseña. Elige una contraseña segura para éste.
MariaDB> GRANT ALL ON *.* TO 'navjot'@'localhost' IDENTIFIED BY 'Yourpassword32!' WITH GRANT OPTION;
Elimina los privilegios del usuario.
mysql> FLUSH PRIVILEGES;
Sal del intérprete de comandos.
mysql> exit
Paso 6 – Instalar Nginx
Debian 12 incluye una versión antigua de Nginx. Para instalar la última versión, tienes que descargar el repositorio oficial de Nginx.
Importa la clave de firma de Nginx.
$ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \ | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
Añade el repositorio de la versión estable de Nginx.
$ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \ http://nginx.org/packages/debian `lsb_release -cs` nginx" \ | sudo tee /etc/apt/sources.list.d/nginx.list
Actualiza los repositorios del sistema.
$ sudo apt update
Instala Nginx.
$ sudo apt install nginx
Verifica la instalación. En los sistemas Debian, el siguiente comando sólo funcionará con sudo
.
$ sudo nginx -v nginx version: nginx/1.24.0
Inicia el servidor Nginx.
$ sudo systemctl start nginx
Comprueba el estado del servicio.
? nginx.service - nginx - high performance web server Loaded: loaded (/lib/systemd/system/nginx.service; enabled; preset: enabled) Active: active (running) since Wed 2023-08-02 06:45:52 UTC; 14s ago Docs: https://nginx.org/en/docs/ Process: 18326 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS) Main PID: 18327 (nginx) Tasks: 2 (limit: 2315) Memory: 1.8M CPU: 11ms CGroup: /system.slice/nginx.service ??18327 "nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf" ??18328 "nginx: worker process"
Paso 7 – Instalar SSL
Necesitamos instalar Certbot para generar el certificado SSL. Puedes instalar Certbot utilizando el repositorio de Debian u obtener la última versión utilizando la herramienta Snapd. Nosotros utilizaremos la versión Snapd.
Debian 12 no viene con Snapd instalado. Instala el paquete Snapd.
$ sudo apt install snapd
Ejecuta los siguientes comandos para asegurarte de que tu versión de Snapd está actualizada.
$ sudo snap install core && sudo snap refresh core
Instala Certbot.
$ sudo snap install --classic certbot
Utiliza el siguiente comando para asegurarte de que se puede ejecutar el comando Certbot creando un enlace simbólico al directorio /usr/bin
.
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot
Comprueba si Certbot funciona correctamente.
$ certbot --version certbot 2.6.0
Ejecuta el siguiente comando para generar un certificado SSL.
$ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d magento.example.com
El comando anterior descargará un certificado en el directorio /etc/letsencrypt/live/magento.example.com
de tu servidor.
Genera un certificado de grupo Diffie-Hellman.
$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096
Comprueba el servicio programador de renovación de Certbot.
$ sudo systemctl list-timers
Encontrarás snap.certbot.renew.service
como uno de los servicios programados para ejecutarse.
NEXT LEFT LAST PASSED UNIT ACTIVATES ..... Wed 2023-08-02 08:09:00 UTC 9h left Wed 2023-08-02 07:39:06 UTC 2h 59min ago snap.certbot.renew.timer snap.certbot.renew.service Thu 2023-08-03 06:41:11 UTC 9h left Wed 2023-08-02 06:24:33 UTC 10h ago apt-daily-upgrade.timer apt-daily-upgrade.service Wed 2023-08-02 14:06:00 UTC 11h left Sun 2021-11-14 02:03:02 UTC 5min ago apt-daily.timer apt-daily.service
Realiza una ejecución en seco del proceso para comprobar si la renovación SSL funciona correctamente.
$ sudo certbot renew --dry-run
Si no ves ningún error, ya está todo listo. Tu certificado se renovará automáticamente.
Paso 8 – Instalar Elasticsearch
Magento utiliza Elasticsearch para las búsquedas de productos. Instalaremos Elasticsearch 7.x utilizando su repositorio oficial ya que es la versión compatible con Magento.
Importa la clave GPG de Elasticsearch.
$ wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --dearmor -o /usr/share/keyrings/elasticsearch-keyring.gpg
Añade el repositorio de Elasticsearch.
$ echo "deb [signed-by=/usr/share/keyrings/elasticsearch-keyring.gpg] https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-7.x.list
Actualiza la lista de repositorios del sistema.
$ sudo apt update
Instala Elasticsearch.
$ sudo apt install elasticsearch
Elasticsearch utiliza mucha memoria. Debes limitar su uso en función del tamaño de tu servidor. Crea el archivo /etc/elasticsearch/jvm.options.d/memory.options
y ábrelo para editarlo.
$ sudo nano /etc/elasticsearch/jvm.options.d/memory.options
Pega en él el siguiente código. Modifica los valores según el tamaño de tu servidor. El primer valor se refiere a la memoria inicial y el segundo a la memoria máxima disponible. A partir de 1 GB, utiliza el formato -Xms1g
.
-Xms512m -Xmx784m
Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te solicite. Esto configura Elasticsearch para que utilice 1GB de RAM. Puedes utilizar cualquier valor que necesites.
Inicia y activa el servicio.
$ sudo systemctl enable elasticsearch --now
Comprueba si Elasticsearch funciona.
$ curl http://localhost:9200
Deberías ver la siguiente salida.
{ "name" : "magento", "cluster_name" : "elasticsearch", "cluster_uuid" : "LNFRevgvQIOGeWCdtvc7bA", "version" : { "number" : "7.17.12", "build_flavor" : "default", "build_type" : "deb", "build_hash" : "e3b0c3d3c5c130e1dc6d567d6baef1c73eeb2059", "build_date" : "2023-07-20T05:33:33.690180787Z", "build_snapshot" : false, "lucene_version" : "8.11.1", "minimum_wire_compatibility_version" : "6.8.0", "minimum_index_compatibility_version" : "6.0.0-beta1" }, "tagline" : "You Know, for Search" }
Paso 9 – Instalar el servidor Redis
Magento utiliza Redis para el almacenamiento de sesiones y caché. Es totalmente opcional y puedes utilizar la base de datos para el almacenamiento de sesiones. Pero Redis hace un mejor trabajo. La última versión de Magento funciona con Redis 7.0. Debian incluye Redis 6.0, así que utilizaremos el repositorio de Redis para la instalación.
Importa la clave GPG oficial de Redis.
$ curl -fsSL https://packages.redis.io/gpg | sudo gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg
Añade el repositorio APT a tu lista de fuentes.
$ echo "deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/redis.list
Actualiza la lista de repositorios del sistema.
$ sudo apt update
Ejecuta el siguiente comando para instalar el servidor Redis.
$ sudo apt install redis
Confirma la versión de Redis.
$ redis-server -v Redis server v=7.0.12 sha=00000000:0 malloc=jemalloc-5.2.1 bits=64 build=d706905cc5f560c1
Verifiquemos la conexión al servicio mediante el siguiente comando.
$ redis-cli
Pasarás a la shell de Redis.
El primer paso es establecer la contraseña para el usuario Redis por defecto. Sustituye Your_Redis_Password
por una contraseña segura de tu elección. Asegúrate de anteponer a la contraseña el carácter >
.
127.0.0.1:6379> acl setuser default >Your_Redis_Password
Prueba la autenticación de Redis.
127.0.0.1:6379> AUTH Your_Redis_Password OK
Haz ping al servicio.
127.0.0.1:6379> ping PONG
Sal del servicio escribiendo exit
.
Paso 10 – Descarga Magento
Crea un directorio raíz web para Magento.
$ sudo mkdir /var/www/magento -p
Da los derechos del directorio Magento al usuario actual.
$ sudo chown $USER:$USER /var/www/magento/ -R
Antes de seguir adelante, necesitas las claves de autenticación requeridas por el repositorio de Magento. Visita el sitio web https://account.magento.com/
y aparecerá la siguiente página pidiéndote que inicies sesión con tu Adobe ID.
Haz clic en el botón Iniciar sesión con Adobe ID para acceder a la siguiente página.
Si tienes un Adobe ID, introduce tus credenciales para continuar o puedes crear una cuenta aquí. Una vez que hayas creado tu cuenta e iniciado sesión, abre la URL https://marketplace.magento.com/customer/accessKeys/
. También puedes acceder a esta página visitando tu perfil y haciendo clic en el enlace Claves de acceso.
Haz clic en el botón Crear una nueva clave de acceso para crear tu clave de autenticación. Dale un nombre a tu clave para identificarla.
Anota tanto la clave pública como la privada para el siguiente paso.
Crea el archivo ~/.config/composer/auth.json
y ábrelo para editarlo.
$ nano ~/.config/composer/auth.json
Pega en él el siguiente código. Utiliza la clave pública para el nombre de usuario y la clave privada para la contraseña.
{ "http-basic": { "repo.magento.com": { "username": "<public_key>", "password": "<private_key>" } } }
Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te solicite.
Cambia al directorio /var/www/magento
.
$ cd /var/www/magento
Crea el proyecto Magento. Observa el period
al final del comando. Se refiere al directorio actual en el que se está ejecutando el comando.
$ composer create-project --repository-url=https://repo.magento.com/ magento/project-community-edition .
Deberías ver un resultado similar.
Creating a "magento/project-community-edition" project at "./" Installing magento/project-community-edition (2.4.6-p1) - Downloading magento/project-community-edition (2.4.6-p1) - Installing magento/project-community-edition (2.4.6-p1): Extracting archive Created project in /var/www/magento/. Loading composer repositories with package information Info from https://repo.packagist.org: #StandWithUkraine Updating dependencies Lock file operations: 565 installs, 0 updates, 0 removals - Locking 2tvenom/cborencode (1.0.2) - Locking adobe-commerce/adobe-ims-metapackage (2.2.0) - Locking allure-framework/allure-codeception (v2.3.0) - Locking allure-framework/allure-php-commons (v2.3.1) - Locking allure-framework/allure-phpunit (v2.1.0) ...............................................
Hay un problema con el archivo de configuración Nginx de ejemplo proporcionado por Adobe. Ejecuta el siguiente comando para solucionarlo.
$ sed -i 's/php-fpm:9000/fastcgi_backend/g' /var/www/magento/nginx.conf.sample
Ejecuta los siguientes comandos para establecer los permisos de archivo y hacer ejecutable el binario de Magento. Además, establece el propietario del directorio Magento en el usuario Nginx para que pueda acceder al sitio web.
$ sudo find var generated vendor pub/static pub/media app/etc -type f -exec chmod g+w {} + $ sudo find var generated vendor pub/static pub/media app/etc -type d -exec chmod g+ws {} + $ sudo chown -R :nginx . $ sudo chmod u+x bin/magento
Paso 11 – Instalar Magento
Antes de continuar con la instalación, tenemos que modificar el instalador para que nos permita utilizar MariaDB 10.11.3, que actualmente no es compatible con Magento. Magento soporta hasta ahora las versiones MariaDB 10.2-10.6.
Abre el archivo /var/www/magento/app/etc/di.xml
para editarlo.
$ sudo nano /var/www/magento/app/etc/di.xml
Busca la siguiente línea.
<item name="MariaDB-(10.2-10.6)" xsi:type="string">^10\.[2-6]\.</item>
Sustitúyela por el siguiente código.
<item name="MariaDB-(10.2-10.11)" xsi:type="string">^10\.([2-9]|10|11)\.</item>
Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te pida.
Asegúrate de que estás en el directorio de Magento.
$ cd /var/www/magento
Ejecuta el siguiente comando para instalar Magento.
$ bin/magento setup:install \ --base-url=http://magento.example.com \ --use-secure=1 \ --base-url-secure=https://magento.example.com \ --use-secure-admin=1 \ --db-host=localhost \ --db-name=magento \ --db-user=magentouser \ --db-password=Your_password2 \ --admin-firstname=Navjot \ --admin-lastname=Singh \ [email protected] \ --admin-user=navjot \ --admin-password=admin_password \ --language=en_US \ --currency=USD \ --timezone=America/Chicago \ --use-rewrites=1 \ --elasticsearch-host=http://127.0.0.1 \ --elasticsearch-port=9200 \ --session-save=redis \ --session-save-redis-db=0 \ --session-save-redis-password=redis_password \ --cache-backend=redis \ --cache-backend-redis-db=2 \ --cache-backend-redis-password=redis_password \ --page-cache=redis \ --page-cache-redis-db=4 \ --page-cache-redis-password=redis_password
Una vez completado el proceso, obtendrás una salida similar.
....... [SUCCESS]: Magento installation complete. [SUCCESS]: Magento Admin URI: /admin_11xb2x Nothing to import.
Anota el Admin URI que necesitarás más adelante para acceder al panel de administración.
Crea trabajos cron de Magento.
$ php bin/magento cron:install
Verifica la tarea cron.
$ crontab -l
Deberías ver el siguiente resultado.
#~ MAGENTO START d1957f62aa710cc367525c9ec68dd7456d4311756b5aa37d2143c4a98b25318c * * * * * /usr/bin/php8.2 /var/www/magento/bin/magento cron:run 2>&1 | grep -v "Ran jobs by schedule" >> /var/www/magento/var/log/magento.cron.log #~ MAGENTO END d1957f62aa710cc367525c9ec68dd7456d4311756b5aa37d2143c4a98b25318c
Paso 12 – Configurar PHP-FPM
Abre el archivo /etc/php/8.2/fpm/pool.d/www.conf
.
$ sudo nano /etc/php/8.2/fpm/pool.d/www.conf
Necesitamos establecer el usuario/grupo Unix de los procesos PHP a nginx. Busca las líneas user=www-data
y group=www-data
en el archivo y cámbialas por nginx
.
... ; Unix user/group of the child processes. This can be used only if the master ; process running user is root. It is set after the child process is created. ; The user and group can be specified either by their name or by their numeric ; IDs. ; Note: If the user is root, the executable needs to be started with ; --allow-to-run-as-root option to work. ; Default Values: The user is set to master process running user by default. ; If the group is not set, the user's group is used. user = nginx group = nginx ...
Busca las líneas listen.owner = www-data
y listen.group = www-data
en el archivo y cámbialas por nginx
.
; Set permissions for unix socket, if one is used. In Linux, read/write ; permissions must be set in order to allow connections from a web server. Many ; BSD-derived systems allow connections regardless of permissions. The owner ; and group can be specified either by name or by their numeric IDs. ; Default Values: user and group are set as the running user ; mode is set to 0660 listen.owner = nginx listen.group = nginx
Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te solicite.
Aumenta el tiempo de ejecución de PHP-FPM y PHP-CLI a 180 segundos.
$ sudo sed -i 's/max_execution_time = 30/max_execution_time = 180/' /etc/php/8.2/fpm/php.ini $ sudo sed -i 's/max_execution_time = 30/max_execution_time = 180/' /etc/php/8.2/cli/php.ini
Aumenta el límite de memoria para PHP-FPM de 128MB a 256MB. Puedes aumentar el límite en función del tamaño y los requisitos de tu servidor.
$ sudo sed -i 's/memory_limit = 128M/memory_limit = 256M/' /etc/php/8.2/fpm/php.ini
Magento establece por defecto el límite de tamaño de archivo para la biblioteca multimedia en 2MB. Ejecuta los siguientes comandos para aumentar el límite de tamaño de archivo a 25MB.
$ sudo sed -i 's/upload_max_filesize = 2M/upload_max_filesize = 25M/g' /etc/php/8.2/fpm/php.ini $ sudo sed -i 's/post_max_size = 8M/post_max_size = 25M/g' /etc/php/8.2/fpm/php.ini
Activa la compresión Zlib.
$ sudo sed -i 's/zlib.output_compression = Off/zlib.output_compression = On/g' /etc/php/8.2/fpm/php.ini
Reinicia el servicio PHP-FPM.
$ sudo systemctl restart php8.2-fpm
Cambia el grupo del directorio de sesiones PHP a Nginx.
$ sudo chgrp -R nginx /var/lib/php/sessions
Paso 13 – Configurar Nginx
Abre el archivo /etc/nginx/nginx.conf
para editarlo.
$ sudo nano /etc/nginx/nginx.conf
Añade la siguiente línea antes de la línea include /etc/nginx/conf.d/*.conf;
.
server_names_hash_bucket_size 64;
Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te solicite.
Crea y abre el archivo /etc/nginx/conf.d/magento.conf
para editarlo.
$ sudo nano /etc/nginx/conf.d/magento.conf
Pega en él el siguiente código.
upstream fastcgi_backend { server unix:/run/php/php8.2-fpm.sock; } server { # Redirect any http requests to https listen 80; listen [::]:80; server_name magento.example.com; return 301 https://$host$request_uri; } server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name magento.example.com; set $MAGE_ROOT /var/www/magento; include /var/www/magento/nginx.conf.sample; client_max_body_size 25m; access_log /var/log/nginx/magento.access.log; error_log /var/log/nginx/magento.error.log; # TLS configuration ssl_certificate /etc/letsencrypt/live/magento.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/magento.example.com/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/magento.example.com/chain.pem; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384'; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:50m; ssl_session_timeout 1d; # OCSP Stapling --- # fetch OCSP records from URL in ssl_certificate and cache them ssl_stapling on; ssl_stapling_verify on; ssl_dhparam /etc/ssl/certs/dhparam.pem; }
Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te solicite una vez hayas terminado.
Magento viene con una plantilla de configuración Nginx en /var/www/magento/nginx.conf.sample
que hemos incluido en nuestra configuración. La variable $MAGE_ROOT
apunta al directorio raíz web de Magento que hemos establecido en nuestro archivo y que se utiliza en el archivo de configuración de ejemplo.
Comprueba la sintaxis del archivo de configuración de Nginx.
$ sudo nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
Reinicia el servicio Nginx.
$ sudo systemctl restart nginx
Abre el sitio web de Magento a través de la URL https://magento.example.com
. Deberías ver la siguiente página.
Si el CSS y el JS no se cargan, ejecuta los siguientes comandos.
$ cd /var/www/magento $ php bin/magento setup:static-content:deploy -f $ php bin/magento indexer:reindex
Paso 14 – Desactivar la autenticación de dos factores
Antes de acceder al panel de administración, tenemos que desactivar la autenticación de dos factores que está activada por defecto. Magento intenta enviar un correo a través de sendmail
para habilitar la autenticación de dos factores durante la instalación, pero como no la hemos configurado, la única forma de acceder al panel de administración es deshabilitar primero la función.
Si tienes configurado sendmail
en tu servidor para enviar correos electrónicos, entonces puedes saltarte este paso. Para desactivar la autenticación de dos factores, necesitamos desactivar dos de los módulos de Magento utilizando los siguientes comandos.
$ php /var/www/magento/bin/magento module:disable Magento_AdminAdobeImsTwoFactorAuth $ php /var/www/magento/bin/magento module:disable Magento_TwoFactorAuth
Ejecuta el siguiente comando para crear las clases.
$ php /var/www/magento/bin/magento setup:di:compile
Limpia también la caché.
$ php /var/www/magento/bin/magento c:c
Paso 15 – Acceder al Portal de Administración
Tendrás que abrir el portal de administración utilizando el URI que te dio el script de instalación de Magento. Si de algún modo olvidaste anotarlo o lo perdiste, puedes recuperar el URI de nuevo utilizando el siguiente comando.
$ php /var/www/magento/bin/magento info:adminuri Admin URI: /admin_11xb2x
Abre la URL https://magento.example.com/admin_11xb2x
en tu navegador y obtendrás la siguiente pantalla.
Introduce tus credenciales de administrador proporcionadas durante la instalación y haz clic en el botón Iniciar sesión para continuar. Aparecerá la siguiente pantalla.
Aparecerá una ventana emergente solicitando permiso para que Adobe recopile datos de uso. Haz clic en el botón No permitir para continuar.
El siguiente paso es configurar SMTP para los correos electrónicos, de modo que podamos volver a activar la autenticación de dos factores. Accede al menú Tiendas >> Configuración.
Despliega el Menú Avanzado de la parte izquierda y haz clic en la opción Sistemas para abrir la página Configuración de correo electrónico.
Desmarca la opción Utilizar valor del sistema delante de las opciones Transporte , Host y Puerto. Haz clic en el menú desplegable Transporte y selecciona SMTP. Para nuestro tutorial, utilizaremos Amazon SES como servidor de correo.
Introduce tu host SMTP, 587 como puerto, nombre de usuario y contraseña, establece Auth como LOGIN y SSL como TLS en los campos indicados. Haz clic en el botón Guardar configuración cuando hayas terminado. Ahora que ya hemos configurado los ajustes de correo electrónico, el siguiente paso es configurar los ID de correo electrónico de la tienda para que podamos probarlos.
Desplázate hacia arriba y despliega el menú General de la misma página y selecciona la opción Direcciones de correo electrónico de la tienda.
Desmarca los campos predeterminados de Correo electrónico del remitente e introduce los identificadores de correo electrónico de tu tienda. Haz clic en el botón Guardar configuración cuando hayas terminado. Del mismo modo, abre la pantalla Contactos y realiza los mismos cambios y haz clic en el botón Guardar Config para finalizar.
Cambiar las opciones de administrador puede afectar a la caché y recibirás un aviso. Ejecuta el siguiente comando para borrar la caché manualmente.
$ php /var/www/magento/bin/magento c:c
Para probar los correos electrónicos, visita la página del escaparate y abre la página Contact Us
. Puedes utilizar directamente la URL https://magento.example.com/contact/
para acceder a ella. Envía un mensaje de prueba y pulsa el botón Enviar. Deberías recibir un correo similar.
Paso 16 – Habilitar y configurar la autenticación de dos factores
Ahora que hemos habilitado el servidor de correo SMTP, es hora de volver a habilitar la autenticación de dos factores. Ejecuta los siguientes comandos para habilitar la autenticación de dos factores.
$ php /var/www/magento/bin/magento module:enable Magento_AdminAdobeImsTwoFactorAuth $ php /var/www/magento/bin/magento module:enable Magento_TwoFactorAuth
Actualiza la configuración de los módulos.
$ php /var/www/magento/bin/magento setup:upgrade
Ejecuta el siguiente comando para crear las clases.
$ php /var/www/magento/bin/magento setup:di:compile
Limpia también la caché.
$ php /var/www/magento/bin/magento c:c
Si no puedes acceder al área de administración, ejecuta también los siguientes comandos.
Fuerza el despliegue del contenido estático.
$ php /var/www/magento/bin/magento setup:static-content:Deploy -f
Establece los permisos de los archivos.
$ cd /var/www/magento $ sudo find var generated vendor pub/static pub/media app/etc -type f -exec chmod g+w {} + $ sudo find var generated vendor pub/static pub/media app/etc -type d -exec chmod g+ws {} + $ sudo chown -R :nginx .
Visita el portal de administración y obtendrás la siguiente pantalla.
Utilizaremos el método del autenticador de Google. Puedes utilizar una llave hardware si la tienes. El método Google Authenticator funciona con cualquier aplicación TOTP, incluyendo Authy, 1Password, Bitwarden, Microsoft Authenticator, etc. Haz clic en el botón Aplicar para continuar.
En la página siguiente, obtendrás el código QR para escanearlo con tu aplicación 2FA. Introduce los datos en tu aplicación y copia el código generado en el campo Código del aut enticador. Pulsa el botón Confirmar para acceder al panel de administración.
Conclusión
Con esto concluye nuestro tutorial sobre la instalación de Magento eCommerce Site en un servidor Debian 12 con un servidor Nginx y Elasticsearch. Si tienes alguna pregunta, publícala en los comentarios a continuación.