Cómo instalar AbanteCart con Nginx y SSL en Debian 11

Configuraci√≥n de la contrase√Īa ra√≠z de MySQL

Abantecart es una aplicaci√≥n de comercio electr√≥nico gratuita, de c√≥digo abierto y rica en funciones. Est√° escrito en PHP y funciona con las √ļltimas tecnolog√≠as como HTML5, Bootstrap, MVC y m√°s. Puede crear m√ļltiples tiendas en l√≠nea usando una sola instalaci√≥n con soporte para productos digitales y f√≠sicos, integraci√≥n con m√ļltiples pasarelas de pago y monedas, m√ļltiples idiomas, cupones, cr√©ditos de tiendas y un panel de control para el cliente. Puede ejecutar una campa√Īa de marketing por correo electr√≥nico a trav√©s de √©l o crear pancartas para aumentar la participaci√≥n del usuario. Adem√°s, est√° optimizado para SEO con soporte para URL amigables, se integra con m√ļltiples plataformas de an√°lisis y admite complementos.

En este tutorial, aprenderá cómo instalar Abantecart en un servidor basado en Debian 11.

Requisitos previos

  • Un servidor que ejecuta Debian 11.
  • Un usuario no root con privilegios sudo.
  • Todo est√° actualizado.
    $ sudo apt update && sudo apt upgrade
    
  • Pocos paquetes que tu sistema necesita.
    $ sudo apt install wget curl nano ufw software-properties-common dirmngr apt-transport-https gnupg2 ca-certificates lsb-release unzip debian-archive-keyring -y
    

    Es posible que algunos de estos paquetes ya estén instalados en su sistema.

Paso 1: configurar el cortafuegos

El primer paso es configurar el cortafuegos. Debian viene con ufw (cortafuegos sin complicaciones).

Compruebe si el cortafuegos se est√° ejecutando.

$ sudo ufw status

Deberías obtener el siguiente resultado.

Status: inactive

Permita el puerto SSH para que el firewall no interrumpa la conexión actual al habilitarlo.

$ sudo ufw allow OpenSSH

Permita también los puertos HTTP y HTTPS.

$ sudo ufw allow 80/tcp
$ sudo ufw allow 443/tcp

Habilitar 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

Vuelva a comprobar 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/tcp                    ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
80/tcp (v6)                ALLOW       Anywhere (v6)
443/tcp (v6)               ALLOW       Anywhere (v6)

Paso 2 – Instalar PHP

Abantecart es compatible con PHP 8.0. Para instalarlo utilizaremos el repositorio PHP de Ondrej. Ejecute el siguiente comando para agregar el repositorio.

$ echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/sury-php.list

Agregue la clave GPG asociada con el repositorio.

$ wget -qO - https://packages.sury.org/php/apt.gpg | sudo apt-key add -

Actualice los repositorios de Debian.

$ sudo apt update

Instale PHP 8.0 y las extensiones requeridas.

$ sudo apt install php8.0-cli php8.0-fpm php8.0-mysql php8.0-gd php8.0-common php8.0-curl php8.0-xml php8.0-mbstring

Paso 3 – Instalar MySQL

Para instalar el servidor MySQL, el primer paso es agregar la clave GPG para el paquete

Hay un error en Debian en el que debe ejecutar el comando GPG por separado para configurar el directorio .gpg.

$ sudo gpg

Prensa Control + C para salir del comando anterior. Importe la clave GPG y gu√°rdela en el directorio /usr/share/keyrings.

$ sudo gpg --no-default-keyring --keyring /usr/share/keyrings/mysql8.0-archive-keyring.gpg --keyserver hkp://keyserver.ubuntu.com:80 --brecv-keys 3A79BD29

Agregue el repositorio oficial de MySQL.

$ echo "deb [arch=amd64 signed-by=/usr/share/keyrings/mysql8.0-archive-keyring.gpg] http://repo.mysql.com/apt/debian/ `lsb_release -cs` mysql-8.0" \
    | sudo tee /etc/apt/sources.list.d/mysql-8.list

Actualice los repositorios de Debian.

$ sudo apt update

Instalar MySQL.Publicidad

$ sudo apt install mysql-server

Ser√° recibido con una pantalla de configuraci√≥n que le pedir√° que establezca una contrase√Īa de root. Elija una contrase√Īa segura.

Configuraci√≥n de la contrase√Īa ra√≠z de MySQL

Se le pedir√° que confirme la contrase√Īa. A continuaci√≥n, se le presentar√° una pantalla que describe el nuevo sistema de autenticaci√≥n. Seleccione OK para proceder.

Información de autenticación de MySQL

Finalmente, se le pedir√° que seleccione el m√©todo de autenticaci√≥n. Elegir la Cifrado de contrase√Īa fuerte y seleccione OK para finalizar la configuraci√≥n.

Solicitud de autenticaci√≥n de contrase√Īa de MySQL

Paso 4 – Instalar Nginx

Debian se env√≠a con una versi√≥n anterior de Nginx. Debe descargar el repositorio oficial de Nginx para instalar la √ļltima versi√≥n.

Importe la clave de firma oficial de Nginx.

$ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
	 | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null

Agregue el repositorio para la versión estable de Nginx.

$ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg arch=amd64] \
    http://nginx.org/packages/debian `lsb_release -cs` nginx" \
    | sudo tee /etc/apt/sources.list.d/nginx.list

Actualice los repositorios de Debian.

$ sudo apt update

Instala Nginx.

$ sudo apt install nginx

Verifique la instalaci√≥n. Aseg√ļrese de usar sudo cada vez que ejecute el comando Nginx en Debian. De lo contrario, no funcionar√°.

$ sudo nginx -v
nginx version: nginx/1.20.2

Habilite el servicio Nginx.

$ sudo systemctl enable nginx

Paso 5 – Configurar MySQL para AbanteCart

Instalación segura de MySQL.

$ sudo mysql_secure_installation

Para el primer paso, se le pedir√° su contrase√Īa de root. A continuaci√≥n, se le preguntar√° si desea configurar el complemento de validaci√≥n de contrase√Īa, que puede usar para probar la seguridad de su contrase√Īa de MySQL. Elija Y para continuar. Se le pedir√° que elija el nivel de validaci√≥n de la contrase√Īa en el siguiente paso. Elija 2, que es el nivel m√°s fuerte y requerir√° que su contrase√Īa tenga al menos ocho caracteres e incluya una combinaci√≥n de may√ļsculas, min√ļsculas, n√ļmeros y caracteres especiales.

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

En el siguiente paso, se le preguntar√° si desea o no cambiar la contrase√Īa de root. Presione N para continuar.

Using existing password for root.
Estimated strength of the password: 100
Change the password for root ? ((Press y|Y for Yes, any other key for No) : N

Presione Y y luego la tecla ENTER para todas las indicaciones siguientes para eliminar los usuarios anónimos y la base de datos de prueba, deshabilitar los inicios de sesión raíz y cargar las reglas recién establecidas.

...
Remove anonymous users? (Press y|Y for Yes, any other key for No) : Y
Success.
...
Disallow root login remotely? (Press y|Y for Yes, any other key for No) : Y
Success.
...
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!

Ingrese el shell de MySQL. Ingrese su contrase√Īa ra√≠z para continuar.

$ mysql -u root -p

Crear usuario abcart. Aseg√ļrese de que la contrase√Īa cumpla con los requisitos establecidos anteriormente.

mysql> CREATE USER 'abcart'@'localhost' IDENTIFIED BY 'Your_password2';

Crear base de datos abantecart.

mysql> CREATE DATABASE abantecart;

Concede al usuario privilegios sobre la base de datos de abantecart.

mysql> GRANT ALL PRIVILEGES ON abantecart.* TO 'abcart'@'localhost';

Sal de la Concha.

mysql> exit

Paso 6 – Instalar AbanteCart

Descarga la √ļltima versi√≥n de AbanteCart desde Github.

$ wget https://github.com/abantecart/abantecart-src/archive/master.zip

Extraiga el archivo.

$ unzip master.zip

Cree el directorio ra√≠z web p√ļblico para Abantecart.

$ sudo mkdir /var/www/html/abantecart -p

Copie el directorio abantecart-src-master/public_html extraído en el directorio webroot. Tenga en cuenta la barra diagonal (/) al final del siguiente comando.

$ sudo cp -r abantecart-src-master/public_html /var/www/html/abantecart/

Establezca los permisos adecuados para el directorio webroot.

$ sudo chown -R nginx:nginx /var/www/html/abantecart

Por ahora, la instalación básica está terminada. A continuación, debemos configurar SSL y Nginx antes de finalizar la instalación.

Paso 7 – Instalar SSL

Para instalar un certificado SSL usando Let’s Encrypt, necesitamos instalar la herramienta Certbot.

Usaremos el instalador del paquete Snapd para eso. Dado que la mayoría de los servidores Debian no lo incluyen, instale Snap.

$ sudo apt install snapd

Aseg√ļrese de que su versi√≥n de Snapd est√© actualizada.

$ sudo snap install core && sudo snap refresh core

Instale Certbot.

$ sudo snap install --classic certbot

Utilice el siguiente comando para asegurarse de que el comando Certbot se pueda ejecutar creando un enlace simbólico al directorio /usr/bin.

$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

Verifique la instalación.

$ certbot --version
certbot 1.22.0

Genere el certificado SSL.

$ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d abantecart.example.com

El comando anterior descargar√° un certificado en el directorio /etc/letsencrypt/live/abantecart.example.com de su servidor.

Generar un grupo Diffie-Hellman certificado.

$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

Cree un directorio webroot de desaf√≠o para la renovaci√≥n autom√°tica de Let’s Encrypt.

$ sudo mkdir -p /var/lib/letsencrypt

Cree un trabajo cron para renovar el SSL. Se ejecutará todos los días para verificar el certificado y renovarlo si es necesario. Para eso, primero, cree el archivo /etc/cron.daily/certbot-renew y ábralo para editarlo.

$ sudo nano /etc/cron.daily/certbot-renew

Pegue el siguiente código.

#!/bin/sh
certbot renew --cert-name abantecart.example.com --webroot -w /var/lib/letsencrypt/ --post-hook "systemctl reload nginx"

Guarde el archivo presionando Control + X y entrando Y Cuando se le solicite.

Cambie los permisos en el archivo de tareas para que sea ejecutable.

$ sudo chmod +x /etc/cron.daily/certbot-renew

Paso 8: configurar Nginx y PHP

Configurar PHP-FPM

Abra el archivo /etc/php/8.0/fpm/pool.d/www.conf.

$ sudo nano /etc/php/8.0/fpm/pool.d/www.conf

Necesitamos configurar el usuario/grupo de Unix de procesos PHP para nginx. Busque las líneas user=www-data y group=www-data en el archivo y cámbielas a 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.
user = nginx
group = nginx
...

Además, busque las líneas listen.owner=www-data y listen.group=www-data en el archivo y cámbielas a nginx.

listen.owner = nginx
listen.group = nginx

Guarde el archivo presionando Control + X y entrando Y Cuando se le solicite.

El siguiente paso es deshabilitar la extensión opcache de PHP.

Abra el archivo /etc/php/8.0/fpm/conf.d/10-opcache.ini para editarlo.

$ sudo nano /etc/php/8.0/fpm/conf.d/10-opcache.ini

Pegue la siguiente línea al final.

opcache.enable=0

Guarde el archivo presionando Control + X y entrando Y Cuando se le solicite.

Reinicie el proceso de PHP-fpm.

$ sudo systemctl restart php8.0-fpm

Configurar Nginx

Cree y abra el archivo /etc/nginx/conf.d/abantecart.conf para editarlo.

$ sudo nano /etc/nginx/conf.d/abantecart.conf

Pegue el siguiente código en él.

server {
    listen       443 ssl http2;
    listen       [::]:443 ssl http2;
    server_name  abantecart.example.com;

    access_log  /var/log/nginx/abantecart.access.log;
    error_log   /var/log/nginx/abantecart.error.log;
    
    # SSL
    ssl_certificate      /etc/letsencrypt/live/abantecart.example.com/fullchain.pem;
    ssl_certificate_key  /etc/letsencrypt/live/abantecart.example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/abantecart.example.com/chain.pem;
    ssl_session_timeout  5m;
    ssl_session_cache shared:MozSSL:10m;
    ssl_session_tickets off;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
    ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1;
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_dhparam /etc/ssl/certs/dhparam.pem;
    resolver 8.8.8.8;
    
    root /var/www/html/abantecart;
    index index.php;
    
    location / {
        try_files $uri $uri/ /index.php?$args;
    }
    
    # Pass PHP Scripts To FastCGI Server
    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(.*)$;
        fastcgi_pass unix:/run/php/php8.0-fpm.sock; # Depends On The PHP Version
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        include fastcgi_params;
        try_files $uri =404;
    }
    
    location = /favicon.ico {
        log_not_found off;
        access_log off;
    }
    
    location = /robots.txt {
        allow all;
        log_not_found off;
        access_log off;
    }
    
    # Make sure files with the following extensions do not get loaded by nginx because nginx would
    # display the source code, and these files can contain PASSWORDS!
    location ~* \.(engine|inc|info|install|make|module|profile|test|po|sh|.*sql|theme|tpl(\.php)?|xtmpl)$|^(\..*|Entries.*|Repository|Root|Tag|Template)$|\.php_ {
        deny all;
    }
    
    # Deny all attempts to access hidden files such as .htaccess, .htpasswd, .DS_Store (Mac).
    location ~ /\. {
        deny all;
        access_log off;
        log_not_found off;
    }
    
    ### Retina images handler. Check cookie and looking for file with @2x at the end of name
    location ~* ^(.*)\.(jpg|jpeg|png|gif|webp)$ {
        set $hidpi_uri [email protected]$2;
        if ($http_cookie !~ 'HTTP_IS_RETINA=1') {
          break;
        }
        try_files $hidpi_uri $uri =404;
    }

    location ~*  \.(jpg|jpeg|png|gif|css|js|ico|webp)$ {
        expires max;
        log_not_found off;
    }
    
    location ~ /(system/logs|resources/download) {
      deny all;
      return 403;
    }
    
    location /admin/ {
        location ~ .*\.(php)?$ {
          deny all;
          return 403;
        }
    }
    
    #rewrite for images for retina-displays
    location ~ / {
        if (!-e $request_filename){
            rewrite ^/(.*)\?*$ /index.php?_route_=$1 last;
        }
    }
}
# enforce HTTPS
server {
    listen       80;
    listen       [::]:80;
    server_name  abantecart.example.com;
    return 301   https://$host$request_uri;
}

Guarde el archivo presionando Control + X y entrando Y cuando se le solicite una vez terminado.

Abra el archivo /etc/nginx/nginx.conf para editarlo.

$ sudo nano /etc/nginx/nginx.conf

Agregue la siguiente línea antes de la línea include /etc/nginx/conf.d/*.conf;.

server_names_hash_bucket_size  64;

Guarde el archivo presionando Control + X y entrando Y Cuando se le solicite.

Verifique 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

Inicie el servicio Nginx para habilitar la nueva configuración.

$ sudo systemctl start nginx

Paso 9 РTerminar la instalación

Inicie https://abantecart.example.com en su navegador y ver√° la siguiente pantalla.

Pantalla de licencia de AbanteCart

Marque la casilla para aceptar la licencia y presione Continuar para proceder. A continuación, el instalador comprobará si se cumplen o no todos los requisitos.

Comprobación de requisitos del sistema AbanteCart

Si todo est√° bien, presione Continuar para pasar a la p√°gina siguiente.

Se le pedirá que complete las credenciales de la base de datos. Aquí puede crear una cuenta de administrador y una clave de seguridad para acceder al panel de control. Si desea datos de demostración, mantenga la casilla marcada; de lo contrario, déjela sin marcar si desea comenzar desde cero.

Configuración de la base de datos de AbanteCart

Prensa Continuar para continuar cuando haya terminado. El instalador proceder√° a configurar todo y, una vez terminado, le presentar√° la siguiente pantalla.

Pantalla de finalización de la instalación de AbanteCart

Marque el enlace a su panel de control porque lo necesitar√°. Ejecute el siguiente comando para eliminar los archivos del instalador porque no son necesarios y representan un riesgo para la seguridad.

$ sudo rm -rf /var/www/html/abantecart/install

Panel de control de AbanteCart

Inicie sesión en el Panel de control y se le pedirá que termine de configurar su tienda.

Asistente de configuración de la tienda AbanteCart

Puede cerrar el asistente rápido y configurarlo desde el Panel de control que se muestra a continuación o continuar con el asistente para configurar los ajustes básicos.

Panel de control de AbanteCart

Conclusión

Esto concluye nuestro tutorial sobre cómo configurar AbanteCart en un servidor basado en Debian 11. Si tiene alguna pregunta, publíquela en los comentarios a continuación.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *