Cómo instalar Magento 2 con Nginx y Letsencrypt en Ubuntu 18.04
Magento es un software de comercio electrónico de código abierto ampliamente utilizado y un sistema de gestión de contenidos para sitios web de comercio electrónico basado en PHP Zend Framework. Utiliza MySQL o MariaDB como base de datos. El desarrollo de Magento se inició en 2008 por Varien.
En este tutorial, te mostraré cómo instalar Magento 2 con Nginx, PHP 7.1 FPM y MySQL como base de datos. Utilizaré ubuntu 18.04 (Bionic Beaver) como sistema operativo del servidor. Si aún no tienes una configuración mínima del servidor, consulta este tutorial para obtener una configuración base adecuada.
Requisitos previos
- Ubuntu 18.04
- 2 GB o más de memoria RAM
- Privilegios de root
Qué vamos a hacer
- Instalar Nginx en Ubuntu 18.04
- Instalar y configurar PHP-FPM 7.1
- Instalar y configurar el servidor MySQL
- Instalar y configurar Magento 2
- Instalar PHP Composer
- Descargar Magento 2
- Instalar componentes de Magento
- Generar SSL Letsencrypt
- Configurar el host virtual Nginx para Magento
- Post-Instalación de Magento
- Probando
Paso 1 – Instalar Nginx en Ubuntu 18.04 LTS
En este tutorial, utilizaremos el servidor web Nginx para nuestra instalación de Magento.
Inicia sesión en el servidor, actualiza el repositorio y actualiza todos los paquetes.
sudo apt update sudo apt upgrade
Ahora instala el servidor web Nginx utilizando el siguiente comando apt.
sudo apt install nginx -y
Una vez completada la instalación, inicia el servicio Nginx y habilítalo para que se inicie cada vez que arranque el sistema.
systemctl start nginx systemctl enable nginx
Una vez instalado el servidor web Nginx, compruébalo utilizando el comando netstat y asegúrate de que el puerto HTTP 80 está en estado ‘LISTEN’. Otra forma es utilizando el comando curl como se indica a continuación.
netstat -plntu curl -I localhost
Paso 2 – Instalar y configurar PHP-FPM 7.1
Tras la instalación del servidor web Nginx, instalaremos PHP 7.1 en el servidor, ya que Magento aún no soporta PHP 7.2. Instalaremos PHP-FPM con todas las extensiones que necesita Magento 2.
Lista de extensiones PHP necesarias para la instalación de Magento 2:
- bc-math
- ctype
- curl
- dom
- gd, ImageMagick 6.3.7 (o posterior) o ambos
- intl
- mbstring
- mcrypt
- hash
- openssl
- PDO/MySQL
- SimpleXML
- jabón
- spl
- libxml
- xsl
- zip
- json
- iconv
Para esta guía, instalaremos paquetes PHP-FPM desde el repositorio PPA. Utilizaremos el repositorio ‘ondrej/php’.
Instala el paquete ‘software-properties-common’ y añade el repositorio ‘ondrej/php’ utilizando los siguientes comandos.
sudo apt install software-properties-common -y sudo add-apt-repository ppa:ondrej/php -y
Ahora instala PHP-FPM 7.1 con todas las extensiones necesarias.
sudo apt install php7.1-fpm php7.1-mcrypt php7.1-curl php7.1-cli php7.1-mysql php7.1-gd php7.1-xsl php7.1-json php7.1-intl php-pear php7.1-dev php7.1-common php7.1-mbstring php7.1-zip php7.1-soap php7.1-bcmath -y
Una vez completada la instalación, comprueba la versión de PHP y las extensiones instaladas utilizando los comandos PHP.
php -v php -me
A continuación, configuraremos el archivo php.ini para el PHP-FPM y el PHP-CLI.
Edita los archivos php.ini utilizando vim.
vim /etc/php/7.1/fpm/php.ini vim /etc/php/7.1/cli/php.ini
Cambia el valor de esas líneas como se indica a continuación.
memory_limit = 512M max_execution_time = 180 zlib.output_compression = On
Guarda y sal.
Ahora reinicia el servicio PHP-fpm y habilítalo para que se inicie cada vez al arrancar el sistema.
systemctl restart php7.1-fpm systemctl enable php7.1-fpm
La instalación y configuración de PHP-FPM 7.1 se ha completado, comprueba el servicio utilizando el comando netstat.
netstat -pl | grep php
Y obtendrás el archivo de calcetines PHP-fpm como se muestra a continuación.
Paso 3 – Instalar y configurar el servidor MySQL
El software Magento requiere MySQL 5.6.x, y el Magento 2.1.2 o posterior requiere MySQL 5.7.x. En este tutorial, instalaremos el último servidor MySQL 5.8 en el sistema Ubuntu 18.04.
Instala MySQL 5.8 utilizando el comando apt que aparece a continuación.
sudo apt install mysql-server mysql-client -y
Una vez completada la instalación, inicia el servicio MySQL y habilítalo para que se inicie cada vez que arranque el sistema.
systemctl start mysql systemctl enable mysql
Ahora configuraremos la contraseña raíz de MySQL utilizando el comando ‘mysql_secure_installation’.
mysql_secure_installation
En esta versión MySQL 5.8, hay una mejora de seguridad para la política de contraseñas de MySQL. Tienes que elegir la política de contraseñas: 0 para la política BAJA, 1 para la política MEDIA y 2 para una política de contraseñas FUERTE.
Para esta guía, utilizaremos la política de contraseñas «MEDIA», y se recomienda utilizar la política de contraseñas «FUERTE» en el servidor de producción.
Elige el número «1» y pulsa Intro, a continuación escribe tu nueva contraseña «root» de MySQL.
Remove anonymous users? (Press y|Y for Yes, any other key for No) : Y Disallow root login remotely? (Press y|Y for Yes, any other key for No) : Y Remove test database and access to it? (Press y|Y for Yes, any other key for No) : Y Reload privilege tables now? (Press y|Y for Yes, any other key for No) : Y
La contraseña raíz de MySQL ya está configurada.
A continuación, crearemos una nueva base de datos para nuestra instalación de Magento. Crearemos una nueva base de datos llamada ‘magentodb’ con el usuario ‘magentouser’ y la contraseña ‘Magento0463@#’.
Accede al shell de MySQL utilizando el usuario root.
mysql -u root -p
Ahora ejecuta las siguientes consultas MySQL para crear la base de datos y el usuario.
create database magentodb; create user magentouser@localhost identified by 'Magento0463@#'; grant all privileges on magentodb.* to magentouser@localhost identified by 'Magento0463@#'; flush privileges;
La instalación y configuración del servidor MySQL para la instalación de Magento se ha completado.
Paso 4 – Instalar y configurar Magento 2
En este paso, instalaremos la última versión de Magento 2.2.4 desde el repositorio de Github. Instalaremos el compositor de PHP para instalar los componentes de Magento, descargaremos Magento del repositorio de Github, configuraremos el host virtual Nginx para Magento e instalaremos Magento utilizando la postinstalación basada en web.
– Instalar PHP Composer
Instala PHP Composer en ubuntu 18.04 utilizando el siguiente comando apt.
sudo apt install composer -y
Una vez completada la instalación, comprueba la versión de Composer instalada en el sistema.
composer -V
Se ha instalado la última versión de PHP Composer.
– Descarga Magento 2
Ve al directorio ‘/var/www’ y descarga el código fuente del archivo Magento desde Github utilizando el comando wget.
cd /var/www/ wget https://github.com/magento/magento2/archive/2.2.4.tar.gz
Ahora extrae el archivo Magento y renombra el directorio a ‘magento2’.
tar -xf 2.2.4.tar.gz mv magento2-2.2.4/ magento2/
El código fuente de Magento se ha descargado, y el directorio ‘/var/www/magento2’ será la raíz web del sitio Magento.
– Instalar los componentes de Magento
Instala los componentes de Magento utilizando el compositor PHP. Ve al directorio ‘magento2’ e instala todos los componentes PHP que necesita Magento utilizando el comando ‘composer’.
cd /var/www/magento2 composer install -v
Una vez completada la instalación, obtendrás el resultado que se muestra a continuación.
– Generar SSL Letsencrypt
Protegeremos nuestra instalación de Magento utilizando SSL de Letsencrypt. Instala Letsencrypt utilizando el comando apt que se muestra a continuación.
sudo apt install letsencrypt -y
Una vez completada la instalación, detén el servicio nginx.
systemctl stop nginx
Ahora genera los certificados SSL para el nombre de dominio utilizando el comando certbot como se indica a continuación.
certbot certonly --standalone -d magento.hakase-labs.pw
Escribe tu dirección de correo electrónico, acepta las condiciones de servicio de Letsencrypt y escribe «N» para compartir el correo electrónico.
Cuando se haya completado, obtendrás el resultado que se muestra a continuación.
Los archivos del certificado SSL de Letsencrypt se han generado en el directorio ‘/etc/letsencrypt/live’.
– Configurar el host virtual Nginx
Ve al directorio ‘/etc/nginx/sites-available’ y crea un nuevo archivo de host virtual ‘magento’ utilizando vim.
cd /etc/nginx/sites-available/ vim magento
Pega allí la siguiente configuración.
upstream fastcgi_backend { server unix:/run/php/php7.1-fpm.sock; } server { listen 80; listen [::]:80; server_name magento.hakase-labs.pw; return 301 https://$server_name$request_uri; } server { listen 443 ssl; server_name magento.hakase-labs.pw; ssl on; ssl_certificate /etc/letsencrypt/live/magento.hakase-labs.pw/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/magento.hakase-labs.pw/privkey.pem; set $MAGE_ROOT /var/www/magento2; set $MAGE_MODE developer; include /var/www/magento2/nginx.conf.sample; }
Guarda la configuración y sal.
Ahora activa el host virtual creando el enlace simbólico para el archivo de host virtual de Magento en el directorio ‘sites-enabled’.
ln -s /etc/nginx/sites-available/magento /etc/nginx/sites-enabled/
Prueba el archivo de configuración de nginx y asegúrate de que no hay ningún error.
nginx -t
Ahora reinicia el servicio PHP-FPM y Nginx.
systemctl restart php7.1-fpm systemctl restart nginx
Y cambia el propietario del directorio raíz web de Magento al usuario y grupo ‘www-data’.
chown -R www-data:www-data /var/www/magento2/
Se ha añadido el host virtual nginx para Magento.
– Post-Instalación de Magento
Abre el navegador web y escribe la URL de Magento. La mía es
https://magento.hakase-labs.pw/
En los «Términos y condiciones», haz clic en el botón «Aceptar e instalar Magento».
Ahora comprueba toda la configuración del sistema y del servidor para Magento ‘Readlines Check’, y asegúrate de que ‘pasa’ todas las comprobaciones del sistema y de la configuración como se indica a continuación.
Ahora haz clic en el botón «Siguiente».
Configuración de la base de datos para Magento – escribe toda la información de nuestra base de datos y haz clic en ‘Siguiente’.
Para la configuración web, cambia la «dirección de la tienda» a HTTPS, la «dirección de administración de Magento» por la URL de tu ruta de administración y desmarca la opción «Reescrituras de Apache», porque estamos utilizando el servidor web Nginx.
Vuelve a hacer clic en el botón ‘Siguiente’.
Deja la opción ‘Personalizar tu tienda’ por defecto y haz clic en ‘Siguiente’.
Escribe tu usuario y contraseña de administrador y haz clic en «Siguiente».
Y haz clic en el botón ‘Instalar ahora’ para instalar Magento.
Cuando la instalación se haya completado, obtendrás el resultado «correcto» que se muestra a continuación.
Ahora tenemos que deshabilitar el acceso de escritura para el directorio ‘/var/www/magento2/app/etc’. Ejecuta el siguiente comando.
sudo chmod -w /var/www/magento2/app/etc
Magento se ha instalado en el servidor Ubuntu 18.04 Bionic Beaver.
Paso 5 – Pruebas
Escribe la dirección URL de inicio de Magento y asegúrate de que obtienes la página de inicio predeterminada de Magento. La mía es: https://magento.hakase-labs.pw/
Ahora accede al panel de administración de Magento visitando la URL definida durante la instalación ‘admin_hakase’. La mía es
https://magento.hakase-labs.pw/admin_hakase/
Escribe el nombre de usuario y la contraseña, y haz clic en el botón ‘Iniciar sesión’.
Y obtendrás el panel de administración de Magento como se muestra a continuación.
Magento 2 se ha instalado en Ubuntu 18.04 con un servidor web Nginx, una base de datos MySQL y PHP-FPM 7.1.
Además:
Si recibes un error sobre la falta de un cronjob del indexador de Magento, puedes solucionarlo generando el script crontab utilizando el comando siguiente.:
cd /var/www/magento2 sudo -u www-data php bin/magento cron:install --force
Ahora comprueba el script crontab de la lista para el usuario ‘www-data’.
crontab -u www-data -l