Cómo instalar Magento eCommerce en Ubuntu 22.04 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 y pasó a llamarse Adobe eCommerce. 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 Ubuntu 22.04 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 software-properties-common dirmngr apt-transport-https gnupg2 ca-certificates lsb-release ubuntu-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. Ubuntu viene con ufw (Uncomplicated Firewall) por defecto.

Comprueba si el cortafuegos se está ejecutando.

$ sudo ufw status

Deberías obtener la siguiente salida.

Status: inactive

Permite el puerto SSH para que el cortafuegos no rompa la conexión actual al activarlo.

$ sudo ufw allow OpenSSH

Permite también los puertos HTTP y HTTPS.

$ sudo ufw allow http
$ sudo ufw allow https

Habilita el cortafuegos

$ sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup

Comprueba de nuevo el estado del cortafuegos.

$ sudo ufw status

Deberías ver un resultado 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

Ubuntu 22.04 viene con la versión PHP 8.1.2, que está un poco obsoleta. Instalaremos la última versión PHP 8.2 utilizando el repositorio PHP de Ondrej.

$ sudo add-apt-repository ppa:ondrej/php

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 libcurl14-openssl-dev

Verifica la instalación.

$ php --version
PHP 8.2.5 (cli) (built: Apr 14 2023 04:27:02) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.2.5, Copyright (c) Zend Technologies
    with Zend OPcache v8.2.5, 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 MySQL

Ubuntu 22.04 incluye la última versión de MySQL. Puedes instalarla con un solo comando.

$ sudo apt install mysql-server

Comprueba la versión de MySQL.

$ mysql --version
mysql  Ver 8.0.33-0ubuntu0.22.04.1 for Linux on x86_64 ((Ubuntu))

Este paso es necesario para las versiones de MySQL 8.0.28 y superiores. Entra en la Shell de MySQL.

$ sudo mysql

Ejecuta el siguiente comando para establecer la contraseña de tu usuario root. Asegúrate de que tiene una mezcla de números, mayúsculas, minúsculas y caracteres especiales.

mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'YourPassword12!';

Sal del intérprete de comandos.

mysql> exit

Ejecuta el script de instalación segura de MySQL.

$ sudo mysql_secure_installation

Primero se te pedirá la contraseña de root. Introdúcela. A continuación, se te pedirá que instales el Componente Validar Contraseña. Comprueba la seguridad de las contraseñas utilizadas en MySQL. Pulsa Y para instalarlo. A continuación, se te pedirá que establezcas el nivel de la política de validación de contraseñas. Elige 2, ya que es el más fuerte.

Securing the MySQL server deployment.

Enter password for user root:

VALIDATE PASSWORD COMPONENT can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD component?

Press y|Y for Yes, any other key for No: Y

There are three levels of password validation policy:

LOW    Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary                  file

Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 2
Using existing password for root.

Estimated strength of the password: 100

A continuación, introduce N para negarte a cambiar la contraseña de root. Además, introduce Y para eliminar usuarios anónimos, no permitir inicios de sesión remotos de root, eliminar la base de datos de prueba y recargar las tablas de privilegios.

Change the password for root ? ((Press y|Y for Yes, any other key for No) : N

 ... skipping.
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL 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? (Press y|Y for Yes, any other key for No) : 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? (Press y|Y for Yes, any other key for No) : Y
Success.

By default, MySQL 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? (Press y|Y for Yes, any other key for No) : 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? (Press y|Y for Yes, any other key for No) : Y
Success.

All done!

Paso 5 – Configurar MySQL

Accede al shell de MySQL. Introduce tu contraseña de root cuando se te solicite.

$ sudo mysql -u root -p

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 al usuario todos los privilegios sobre la base de datos.

mysql> GRANT ALL PRIVILEGES ON magento.* TO 'magentouser'@'localhost';

Elimina los privilegios del usuario.

mysql> FLUSH PRIVILEGES;

Sal del intérprete de comandos.

mysql> exit

Paso 6 – Instalar Nginx

Ubuntu 22.04 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 arch=amd64] \
http://nginx.org/packages/ubuntu `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.

$ nginx -v
nginx version: nginx/1.24.0

Iniciar el servidor Nginx.

$ sudo systemctl start nginx

Paso 7 – Instalar SSL

Necesitamos instalar Certbot para generar el certificado SSL. Puedes instalar Certbot utilizando el repositorio de Ubuntu o descargar la última versión utilizando la herramienta Snapd. Nosotros utilizaremos la versión Snapd.

Ubuntu 22.04 viene con Snapd instalado por defecto. 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

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 renovaciones 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
.....
Sun 2023-02-26 06:32:00 UTC 9h left       Sat 2023-02-25 18:04:05 UTC 2h 59min ago  snap.certbot.renew.timer  snap.certbot.renew.service
Sun 2023-02-26 06:43:20 UTC 9h left       Sat 2023-02-25 10:49:23 UTC 10h ago       apt-daily-upgrade.timer   apt-daily-upgrade.service
Sun 2023-02-26 09:00:06 UTC 11h left      Sat 2023-02-25 20:58:06 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.

-Xms1g
-Xmx1g

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te pida. 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" : "6yks8tZ6T4GskIwWoXuSLA",
  "version" : {
    "number" : "7.17.10",
    "build_flavor" : "default",
    "build_type" : "deb",
    "build_hash" : "fecd68e3150eda0c307ab9a9d7557f5d5fd71349",
    "build_date" : "2023-04-23T05:33:18.138275597Z",
    "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. Ubuntu viene con 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.11 sha=00000000:0 malloc=jemalloc-5.2.1 bits=64 build=3af367a78d5e21e9

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

Cambia al directorio /var/www.

$ cd /var/www

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.

Página de inicio de sesión de Adobe ID

Haz clic en el botón Iniciar sesión con Adobe ID para acceder a la siguiente página.

Página de inicio de sesión de Magento Adobe

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.

Página de claves de acceso al perfil de Adobe Magento

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.

Claves de acceso a Magento

Anota las claves pública y privada para el siguiente paso.

Crea el proyecto Magento.

$ composer create-project --repository-url=https://repo.magento.com/ magento/project-community-edition magento

Se te pedirá el nombre de usuario y la contraseña para el repositorio. Utiliza la clave pública como nombre de usuario y la clave privada como contraseña. Se te preguntará si quieres almacenar las credenciales en el directorio de configuración de Composer. Introduce y para hacerlo.

Creating a "magento/project-community-edition" project at "./magento"
    Authentication required (repo.magento.com):
      Username: 53211xxxxxxxxxxxxxxxxxxxxxxxxxxx
      Password:
Do you want to store credentials for repo.magento.com in /home/navjot/.config/composer/auth.json ? [Yn] y
Installing magento/project-community-edition (2.4.6)
  - Downloading magento/project-community-edition (2.4.6)
  - Installing magento/project-community-edition (2.4.6): 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: 564 installs, 0 updates, 0 removals
  - Locking 2tvenom/cborencode (1.0.2)
  - Locking adobe-commerce/adobe-ims-metapackage (2.2.0)
...............................................

Ejecuta los siguientes comandos para establecer los permisos de archivo y hacer ejecutable el binario de Magento. Además, establece el propietario del directorio de Magento en el usuario Nginx para que pueda acceder al sitio web.

$ 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 .
$ sudo chmod u+x bin/magento

Paso 11 – Instalar Magento

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_19uadb
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 processes
; Note: The user is mandatory. If the group is not set, the default user's group
;       will be used.
; RPM: apache user chosen to provide access to the same directories as httpd
user = nginx
; RPM: Keep a group allowed to write in log dir.
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.

Página de inicio de Magento

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_19uadb

Abre la URL https://magento.example.com/admin_19uadb en tu navegador y obtendrás la siguiente pantalla.

Página de inicio de sesión del panel de administración de Magento

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.

Panel de administración de Magento

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.

Magento Stores > Config Menu

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.

Configuración de envío de correo electrónico de Magento

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.

Configuración del correo de Magento Amazon SES

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.

Página de direcciones de correo electrónico de tiendas Magento

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.

Configuración del correo electrónico de contacto de Magento

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.

Prueba de correo electrónico de Magento

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.

Configurar Magento 2FA

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.

Configurar Magento Google 2FA

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 un sitio de comercio electrónico Magento en un servidor Ubuntu 22.04 con un servidor Nginx y Elasticsearch. Si tienes alguna pregunta, publícala en los comentarios a continuación.

También te podría gustar...