Cómo instalar AbanteCart con Nginx y SSL en Debian 11
Abantecart es una aplicación de comercio electrónico gratuita, de código abierto y con muchas funciones. Está escrita en PHP y cuenta con las últimas tecnologías como HTML5, Bootstrap, MVC y otras. Puede crear varias tiendas online con una sola instalación, con soporte para productos digitales y físicos, integración con varias pasarelas de pago y divisas, varios idiomas, cupones, créditos para la tienda y un panel de control para los clientes. Puedes realizar una campaña de marketing por correo electrónico a través de ella o crear banners para aumentar el compromiso de los usuarios. Además, está optimizado para el SEO con soporte para URLs amigables, se integra con múltiples plataformas de análisis y soporta plugins.
En este tutorial, aprenderás a instalar Abantecart en un servidor basado en Debian 11.
Requisitos previos
-
Un servidor con Debian 11.
-
Un usuario no root con privilegios sudo.
-
Todo 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 unzip debian-archive-keyring -y
Algunos de estos paquetes pueden estar ya instalados en tu sistema.
Paso 1 – Configurar el cortafuegos
El primer paso es configurar el cortafuegos. Debian viene con ufw (Uncomplicated Firewall).
Comprueba si el cortafuegos se está ejecutando.
$ sudo ufw status
Deberías obtener el siguiente resultado.
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 80/tcp $ sudo ufw allow 443/tcp
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 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 soporta PHP 8.0. Para instalarlo, utilizaremos el repositorio PHP de Ondrej. Ejecuta el siguiente comando para añadir el repositorio.
$ echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/sury-php.list
Añade la clave GPG asociada al repositorio.
$ wget -qO - https://packages.sury.org/php/apt.gpg | sudo apt-key add -
Actualiza los repositorios de Debian.
$ sudo apt update
Instala PHP 8.0 y las extensiones necesarias.
$ 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 añadir la clave GPG del paquete
Hay un error en Debian por el que tienes que ejecutar el comando GPG por separado para configurar el directorio .gpg
.
$ sudo gpg
Pulsa Ctrl + C para salir del comando anterior. Importa la clave GPG y guárdala 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
Añade 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
Actualiza los repositorios de Debian.
$ sudo apt update
Instala MySQL.
$ sudo apt install mysql-server
Aparecerá una pantalla de configuración que te pedirá que establezcas una contraseña de root. Elige una contraseña fuerte.
Se te pedirá que confirmes la contraseña. A continuación, aparecerá una pantalla que describe el nuevo sistema de autenticación. Selecciona Aceptar para continuar.
Por último, se te pedirá que selecciones el método de autenticación. Escoge el Cifrado de Contraseña Fuerte y selecciona Aceptar para finalizar la configuración.
Paso 4 – Instalar Nginx
Debian incluye una versión antigua de Nginx. Necesitas descargar el repositorio oficial de Nginx para instalar la última versión.
Importa 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
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/debian `lsb_release -cs` nginx" \ | sudo tee /etc/apt/sources.list.d/nginx.list
Actualiza los repositorios de Debian.
$ sudo apt update
Instala Nginx.
$ sudo apt install nginx
Verifica la instalación. Asegúrate de utilizar sudo
cada vez que ejecutes el comando Nginx en Debian. De lo contrario, no funcionará.
$ sudo nginx -v nginx version: nginx/1.20.2
Activa el servicio Nginx.
$ sudo systemctl enable nginx
Paso 5 – Configurar MySQL para AbanteCart
Asegura la instalación de MySQL.
$ sudo mysql_secure_installation
En el primer paso, se te pedirá la contraseña de root. A continuación, se te preguntará si quieres configurar el Plugin de Validación de Contraseñas, con el que podrás comprobar la fortaleza de tu contraseña de MySQL. Elige Y
para proceder. Se te pedirá que elijas el nivel de validación de la contraseña en el siguiente paso. Elige 2
que es el nivel más fuerte y requerirá que tu contraseña tenga al menos ocho caracteres e incluya una mezcla 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 te preguntará si quieres cambiar la contraseña de root o no. Pulsa 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
Pulsa Y
y luego ENTER
para todas las siguientes indicaciones para eliminar los usuarios anónimos y la base de datos de prueba, desactivar los inicios de sesión de root 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!
Entra en el shell de MySQL. Introduce la contraseña de root para continuar.
$ mysql -u root -p
Crea el usuario abcart
. Asegúrate de que la contraseña cumple los requisitos establecidos anteriormente.
mysql> CREATE USER 'abcart'@'localhost' IDENTIFIED BY 'Your_password2';
Crea la base de datos abantecart
.
mysql> CREATE DATABASE abantecart;
Concede al usuario privilegios en la base de datos abantecart
.
mysql> GRANT ALL PRIVILEGES ON abantecart.* TO 'abcart'@'localhost';
Salir de la Shell.
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
Extrae el archivo.
$ unzip master.zip
Crea el directorio raíz de la web pública para Abantecart.
$ sudo mkdir /var/www/html/abantecart -p
Copia el directorio extraído abantecart-src-master/public_html
al directorio webroot. Ten en cuenta la barra diagonal(/) al final del siguiente comando.
$ sudo cp -r abantecart-src-master/public_html /var/www/html/abantecart/
Establece 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, tenemos que configurar SSL y Nginx antes de terminar la instalación.
Paso 7 – Instalar SSL
Para instalar un certificado SSL con Let’s Encrypt, necesitamos instalar la herramienta Certbot.
Para ello utilizaremos el instalador de paquetes Snapd. Como la mayoría de los servidores de Debian no lo incluyen, instala Snap.
$ sudo apt install snapd
Asegúrate 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 el comando Certbot puede ejecutarse creando un enlace simbólico al directorio /usr/bin
.
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot
Verifica la instalación.
$ certbot --version certbot 1.22.0
Genera 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 tu servidor.
Genera un certificado de grupo Diffie-Hellman.
$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
Crea un directorio webroot de desafío para la renovación automática de Let’s Encrypt.
$ sudo mkdir -p /var/lib/letsencrypt
Crea un Cron Job para renovar el SSL. Se ejecutará cada día para comprobar el certificado y renovarlo si es necesario. Para ello, primero crea el archivo /etc/cron.daily/certbot-renew
y ábrelo para editarlo.
$ sudo nano /etc/cron.daily/certbot-renew
Pega el siguiente código.
#!/bin/sh certbot renew --cert-name abantecart.example.com --webroot -w /var/lib/letsencrypt/ --post-hook "systemctl reload nginx"
Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando te lo pida.
Cambia los permisos del archivo de la tarea para que sea ejecutable.
$ sudo chmod +x /etc/cron.daily/certbot-renew
Paso 8 – Configurar Nginx y PHP
Configurar PHP-FPM
Abre el archivo /etc/php/8.0/fpm/pool.d/www.conf
.
$ sudo nano /etc/php/8.0/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. user = nginx group = nginx ...
Además, busca las líneas listen.owner=www-data
y listen.group=www-data
en el archivo y cámbialas por nginx
.
listen.owner = nginx listen.group = nginx
Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando te lo pida.
El siguiente paso es desactivar la extensión PHP opcache.
Abre 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
Pega la siguiente línea al final.
opcache.enable=0
Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te pida.
Reinicia el proceso PHP-fpm.
$ sudo systemctl restart php8.0-fpm
Configurar Nginx
Crea y abre el archivo /etc/nginx/conf.d/abantecart.conf
para editarlo.
$ sudo nano /etc/nginx/conf.d/abantecart.conf
Pega en él el siguiente código.
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 $1@2x.$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; }
Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando te lo pida una vez que hayas terminado.
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.
Verifica 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
Inicia el servicio Nginx para habilitar la nueva configuración.
$ sudo systemctl start nginx
Paso 9 – Finaliza la instalación
Inicia https://abantecart.example.com
en tu navegador, y se te presentará la siguiente pantalla.
Marca la casilla que indica que estás de acuerdo con la licencia y pulsa Continuar para proseguir. A continuación, el instalador comprobará si se cumplen o no todos los requisitos.
Si todo está bien, pulsa Continuar para pasar a la siguiente página.
Se te pedirá que rellenes las credenciales de la base de datos. Aquí puedes crear una cuenta de administrador y una clave de seguridad para acceder al panel de control. Si quieres datos de demostración, mantén la casilla marcada; de lo contrario, déjala sin marcar si quieres empezar desde cero.
Pulsa Continuar para proceder cuando hayas terminado. El instalador procederá a configurar todo y, una vez terminado, te presentará la siguiente pantalla.
Marca el enlace a tu panel de control porque lo necesitarás. Ejecuta el siguiente comando para eliminar los archivos del instalador porque no son necesarios y suponen un riesgo para la seguridad.
$ sudo rm -rf /var/www/html/abantecart/install
Accede al panel de control y se te pedirá que termines de configurar tu tienda.
Puedes 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 parámetros básicos.
Conclusión
Con esto concluye nuestro tutorial sobre la configuración de AbanteCart en un servidor basado en Debian 11. Si tienes alguna pregunta, publícala en los comentarios de abajo.