Cómo instalar PrestaShop en Rocky Linux 9

PrestaShop es una aplicación web de comercio electrónico de código abierto escrita con el framework PHP Symfony. Te permite diseñar, crear y alojar una tienda online para vender productos, recibir pagos y gestionar todos los aspectos relacionados. La utilizan más de 300.000 sitios, lo que la convierte en una de las plataformas de comercio electrónico más populares. Admite módulos que te permiten ampliar aún más su funcionalidad. Puedes personalizarla utilizando varios temas de alta calidad. Ofrece plantillas personalizables, pasarelas de pago seguras, gestión de inventario y herramientas SEO para optimizar el posicionamiento en buscadores.

En este tutorial, aprenderás a instalar Prestashop en un servidor Rocky Linux 9.

Requisitos previos

  • Un servidor que ejecute Rocky Linux 9 con un mínimo de 1 GB de RAM.
  • Un usuario no root con privilegios sudo.
  • Un Nombre de Dominio Completamente Cualificado (FQDN) como prestashop.example.com apuntando a tu servidor.
  • Una cuenta SMTP con un servicio de correo electrónico como Amazon SES o Mailgun.
  • Todo actualizado.
    $ sudo dnf update
    
  • Se necesitan algunos paquetes esenciales para que el tutorial y Prestashop funcionen. Algunos de ellos ya estarán en tu servidor.
    $ sudo dnf install wget curl nano unzip yum-utils policycoreutils-python-utils -y
    

Paso 1 – Configurar el cortafuegos

El primer paso es configurar el cortafuegos. Rocky Linux utiliza el cortafuegos Firewalld. Comprueba el estado del cortafuegos.

$ sudo firewall-cmd --state
running

El cortafuegos funciona con diferentes zonas, y la zona pública es la que utilizaremos por defecto. Enumera todos los servicios y puertos activos en el cortafuegos.

$ sudo firewall-cmd --permanent --list-services

Debería mostrar la siguiente salida.

cockpit dhcpv6-client ssh

Permite los puertos HTTP y HTTPS.

$ sudo firewall-cmd --permanent --add-service=http
$ sudo firewall-cmd --permanent --add-service=https

Vuelve a comprobar el estado del cortafuegos.

$ sudo firewall-cmd --permanent --list-services

Deberías ver un resultado similar.

cockpit dhcpv6-client http https ssh

Recarga el cortafuegos para activar los cambios.

$ sudo firewall-cmd --reload

Paso 2 – Instala Nginx

Rocky Linux 9 incluye una versión antigua de Nginx. Para instalar la última versión, necesitas descargar el repositorio oficial de Nginx.

Crea y abre el archivo /etc/yum.repos.d/nginx.repo para editarlo.

$ sudo nano /etc/yum.repos.d/nginx.repo

Pega en él el siguiente código.

[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

Cuando hayas terminado, guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te pida.

Instala Nginx.

$ sudo dnf install nginx -y

Verifica la instalación.

$ nginx -v
nginx version: nginx/1.24.0

Habilita e inicia el servicio del servidor Nginx.

$ sudo systemctl enable nginx --now

Comprueba el estado del servicio.

$ sudo systemctl status nginx
? nginx.service - nginx - high performance web server
     Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; preset: disabled)
     Active: active (running) since Sat 2023-11-25 10:58:03 UTC; 5s ago
       Docs: http://nginx.org/en/docs/
    Process: 4220 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS)
   Main PID: 4222 (nginx)
      Tasks: 2 (limit: 10841)
     Memory: 1.9M
        CPU: 9ms
     CGroup: /system.slice/nginx.service
             ??4222 "nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf"
             ??4223 "nginx: worker process"

Abre la dirección IP de tu servidor en tu navegador web. Deberías ver la siguiente página, lo que significa que tu servidor está en funcionamiento.

Página por defecto de Nginx

Paso 3 – Instala PHP y las extensiones

Rocky Linux 9 viene con PHP 8.1 por defecto. Para estar siempre con la última versión de PHP o si quieres instalar varias versiones de PHP, tenemos que utilizar el repositorio REMI.

El primer paso es coger el repositorio Epel.

$ sudo dnf install epel-release -y

A continuación, instala el repositorio Remi.

$ sudo dnf install https://rpms.remirepo.net/enterprise/remi-release-9.rpm

Comprueba si hay versiones de PHP disponibles.

$ dnf module list php -y
Name    Stream              Profiles                                      Summary
php     8.1                 common [d], devel, minimal                    PHP scripting language

Remi's Modular repository for Enterprise Linux 9 - x86_64
Name    Stream              Profiles                                      Summary
php     remi-7.4            common [d], devel, minimal                    PHP scripting language
php     remi-8.0            common [d], devel, minimal                    PHP scripting language
php     remi-8.1            common [d], devel, minimal                    PHP scripting language
php     remi-8.2            common [d], devel, minimal                    PHP scripting language
php     remi-8.3            common [d], devel, minimal                    PHP scripting language

Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled

La versión por defecto es la 8.1. En el momento de escribir este tutorial, Prestashop es compatible con PHP 8.1. Por lo tanto, habilita el repositorio PHP 8.1 de Remi.

$ sudo dnf module reset php -y
$ sudo dnf module enable php:remi-8.1

Instala PHP y sus extensiones requeridas por Prestashop.

$ sudo dnf install php php-bcmath php-cli php-curl php-common \
    php-fpm php-gd php-gmp php-intl php-mbstring \
    php-mysql php-opcache php-xml php-zip -y

Comprueba la versión de PHP instalada.

$ php --version
PHP 8.1.26 (cli) (built: Nov 21 2023 21:53:48) (NTS gcc x86_64)
Copyright (c) The PHP Group
Zend Engine v4.1.26, Copyright (c) Zend Technologies
    with Zend OPcache v8.1.26, Copyright (c), by Zend Technologies

Habilita e inicia el servicio PHP-FPM.

$ sudo systemctl enable php-fpm --now

Comprueba el estado del servicio.

$ sudo systemctl status php-fpm
? php-fpm.service - The PHP FastCGI Process Manager
     Loaded: loaded (/usr/lib/systemd/system/php-fpm.service; enabled; preset: disabled)
     Active: active (running) since Sat 2023-11-25 12:54:31 UTC; 2s ago
   Main PID: 6160 (php-fpm)
     Status: "Ready to handle connections"
      Tasks: 6 (limit: 10841)
     Memory: 15.2M
        CPU: 56ms
     CGroup: /system.slice/php-fpm.service
             ??6160 "php-fpm: master process (/etc/php-fpm.conf)"
             ??6161 "php-fpm: pool www"
             ??6162 "php-fpm: pool www"
             ??6163 "php-fpm: pool www"
             ??6164 "php-fpm: pool www"
             ??6165 "php-fpm: pool www"

Paso 4 – Instalar el Servidor MySQL Percona

Prestashop requiere un servidor de base de datos MySQL para el almacenamiento de datos. Pero en lugar de instalar MySQL, instalaremos el servidor Percona MySQL. Funciona como un sustituto de MySQL y ofrece más funciones y seguridad.

El primer paso es instalar el repositorio de versiones de Percona para Rocky Linux.

$ sudo dnf install -y https://repo.percona.com/yum/percona-release-latest.noarch.rpm

Si te aparece el siguiente error, puedes ignorarlo y seguir adelante, ya que no afecta a la instalación. La clave GPG se seguirá importando más adelante.

error: can't create transaction lock on /var/lib/rpm/.rpm.lock (Resource temporarily unavailable)
error: /etc/pki/rpm-gpg/RPM-GPG-KEY-Percona: key 1 import failed.

Una vez instalado el repositorio, configura el repositorio Percona Server para MySQL 8.0 ejecutando el siguiente comando.

$ percona-release setup ps80

El comando anterior te pregunta si quieres desactivar el módulo MySQL por defecto. Introduce y para continuar. Se desactivará el módulo instalador de MySQL y se activará el módulo MySQL de Percona.

Instala Percona Server para MySQL 8.0.

$ sudo dnf -y install percona-server-server

Esto instalará el Servidor Percona y el Cliente para MySQL, que son los paquetes básicos que necesitas por ahora.

Verifica la instalación.

$ mysql --version
mysql  Ver 8.0.34-26 for Linux on x86_64 (Percona Server (GPL), Release 26, Revision 0fe62c85)

Inicia el servicio MySQL.

$ sudo systemctl start mysqld

Comprueba el estado del servicio MySQL.

$ sudo systemctl status mysqld
? mysqld.service - MySQL Server
     Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; preset: disabled)
     Active: active (running) since Sun 2023-11-26 06:25:37 UTC; 7s ago
       Docs: man:mysqld(8)
             http://dev.mysql.com/doc/refman/en/using-systemd.html
    Process: 6522 ExecStartPre=/usr/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS)
   Main PID: 6598 (mysqld)
     Status: "Server is operational"
      Tasks: 39 (limit: 10841)
     Memory: 486.8M
        CPU: 8.131s
     CGroup: /system.slice/mysqld.service
             ??6598 /usr/sbin/mysqld

Nov 26 06:25:28 prestashop.example.com systemd[1]: Starting MySQL Server...
Nov 26 06:25:37 prestashop.example.com systemd[1]: Started MySQL Server.

Percona genera una contraseña temporal de root durante la instalación. Obtén esa contraseña utilizando el siguiente comando.

$ sudo grep "temporary password" /var/log/mysqld.log
2023-11-26T06:25:33.316696Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: (sDeLSgjs7pI

Accede al shell de MySQL.

$ sudo mysql -u root -p

Ejecuta el asistente de configuración de seguridad de MySQL.

$ sudo mysql_secure_installation

Introduce la contraseña de root cuando se te solicite.

Securing the MySQL server deployment.

Enter password for user root:

La contraseña temporal ya ha caducado y se te pedirá que establezcas una nueva contraseña de root. Elige una contraseña segura para la cuenta raíz. Tu contraseña debe cumplir los requisitos de la política de contraseñas actual, lo que significa que debe tener un carácter en minúscula, un carácter en mayúscula, un número y un carácter especial.

The existing password for the user account root has expired. Please set a new password.

New password:

Re-enter new password:

A continuación, se mostrará la fortaleza de la contraseña y se te preguntará si quieres cambiarla. Escribe N para continuar.

The 'validate_password' component is installed on the server.
The subsequent steps will run with the existing configuration
of the component.
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

 ... skipping.

Escribe Y para eliminar los usuarios anónimos.

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.

Escribe Y para no permitir el acceso remoto de root.

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.

Escribe Y para eliminar la base de datos de prueba.

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.

Y, por último, escribe N para recargar las tablas de privilegios.

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!

Ya está. La próxima vez que quieras acceder al shell de MySQL, utiliza el siguiente comando e introduce la contraseña root cuando se te solicite.

$ sudo mysql -u root -p

Aparecerá el siguiente símbolo de sistema del intérprete de comandos MySQL.

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 16
Server version: 8.0.34-26 Percona Server (GPL), Release 26, Revision 0fe62c85

Copyright (c) 2009-2023 Percona LLC and/or its affiliates
Copyright (c) 2000, 2023, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

Escribe exit para salir del intérprete de comandos.

Paso 5 – Configurar el Servidor MySQL Percona

Accede al intérprete de comandos MySQL.

$ sudo mysql -u root -p

Crea una nueva base de datos MySQL, un usuario de base de datos y una contraseña para tu instalación de Prestashop.

mysql> CREATE DATABASE prestashop COLLATE utf8mb4_general_ci;
mysql> CREATE USER 'prestauser'@'localhost' IDENTIFIED BY 'Your_password2';
mysql> GRANT ALL PRIVILEGES ON prestashop.* TO 'prestauser'@'localhost';

Sustituye prestashop, prestauser y yourpassword por las credenciales de tu elección. Elige una contraseña segura y asegúrate de que sigue la política de contraseñas descrita anteriormente.

Limpia los privilegios para asegurarte de que se guardan en la sesión actual.

mysql> FLUSH PRIVILEGES;

Sal del intérprete de comandos MySQL.

mysql> exit

Paso 6 – Descarga de Prestashop

Crea un directorio para Prestashop.

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

Hay dos versiones de Prestashop disponibles: la versión básica con marca y la versión sin marca. La versión con marca está disponible en el sitio web de Prestashop, mientras que la versión sin marca está disponible en el repositorio de GitHub. La diferencia entre las dos versiones es que la versión con marca contiene módulos adicionales, como un procesador de pagos, módulos de Facebook y Google para promoción y SEO, y otros módulos para conectar con Prestashop y fines analíticos.

La versión básica se publica después de la versión sin marca. Por lo tanto, en el momento de escribir este tutorial, la última versión de la edición básica disponible es la 8.1.1 y la versión sin marca es la 8.1.2. Para nuestro tutorial, utilizaremos la edición básica de marca. Si quieres, puedes utilizar la versión sin marca. El proceso de instalación de ambas versiones es exactamente el mismo.

Descarga la última versión utilizando el siguiente comando.

$ cd /tmp
$ wget https://assets.prestashop3.com/dst/edition/corporate/8.1.1/prestashop_edition_basic_version_8.1.1.zip

Puedes obtener el enlace visitando la página de descargas de Prestashop, introduciendo tu correo electrónico y descargando el archivo. La versión sin marca se puede obtener de la página de versiones de Prestashop en GitHub.

Descomprime el archivo descargado.

$ unzip prestashop_*.zip

Este archivo tiene otro archivo zip llamado prestashop.zip que contiene todos los archivos. Extrae los archivos al directorio de Prestashop.

$ sudo unzip prestashop.zip -d /var/www/html/prestashop

Cambia el propietario del directorio Prestashop por el usuario nginx.

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

Paso 7 – Instalar SSL

Necesitamos instalar Certbot para generar el certificado SSL. Para ello utilizaremos el instalador de paquetes Snapd. Como Rocky Linux no lo incluye, instala el instalador Snapd. Necesita el repositorio EPEL (Extra Packages for Enterprise Linux) para funcionar. Pero como ya lo hemos instalado en el paso 3, podemos avanzar directamente.

Instala Snapd.

$ sudo dnf install -y snapd

Habilita e Inicia el servicio Snap.

$ sudo systemctl enable snapd --now

Instala el paquete principal de Snap, y asegúrate de que tu versión de Snapd está actualizada.

$ sudo snap install core && sudo snap refresh core

Crea los enlaces necesarios para que Snapd funcione.

$ sudo ln -s /var/lib/snapd/snap /snap
$ echo 'export PATH=$PATH:/var/lib/snapd/snap/bin' | sudo tee -a /etc/profile.d/snapd.sh

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.7.4

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 prestashop.example.com

El comando anterior descargará un certificado en el directorio /etc/letsencrypt/live/prestashop.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     
---------------------------------------------------------------------------------------------------------------------------               
Sun 2023-11-26 17:12:40 UTC 1h 34min left Sun 2023-11-26 15:25:36 UTC 12min ago    dnf-makecache.timer       dnf-makecache.service
Sun 2023-11-26 17:48:00 UTC 2h 10min left -                           -            snap.certbot.renew.timer  snap.certbot.renew.service
Mon 2023-11-27 00:00:00 UTC 8h left       Sun 2023-11-26 00:00:00 UTC 15h ago      logrotate.timer           logrotate.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 – Configurar SELinux

Cambia el contexto de seguridad de archivos para Prestashop.

$ sudo semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/html/prestashop(/.*)?"

Aplica la política.

$ sudo restorecon -Rv /var/www/html/prestashop/

Aplica la política para permitir que Nginx dé acceso a MariaDB.

$ sudo setsebool -P httpd_can_network_connect_db 1

Aplica la política para permitir que se realicen conexiones a hosts externos. Esto es necesario para enviar correos electrónicos.

$ sudo setsebool -P httpd_can_network_connect 1

Con MariaDB 10.11, te encontrarás con otro problema y es que SELinux impide que PHP-FPM se conecte a MariaDB. Eso se puede solucionar instalando un módulo SELinux. El primer paso es crear un archivo type enforcement.

Crea el archivo my-phpfpm.te en tu directorio home y ábrelo para editarlo.

$ cd ~
$ nano my-phpfpm.te

Pega en él el siguiente código.

module my-phpfpm 1.0;

require {
        type unconfined_service_t;
        type httpd_t;
        type httpd_sys_content_t;
        class dir write;
        class unix_stream_socket connectto;
}

#============= httpd_t ==============

#!!!! This avc is allowed in the current policy
allow httpd_t httpd_sys_content_t:dir write;

#!!!! This avc is allowed in the current policy
allow httpd_t unconfined_service_t:unix_stream_socket connectto;

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te pida.

El siguiente paso es convertirlo en un módulo de política utilizando el siguiente comando. No modifiques el nombre del archivo en el comando, de lo contrario, no funcionará. El módulo se llama my-phpfpm y el nombre del archivo debe ser el mismo que el del módulo.

$ sudo checkmodule -M -m -o my-phpfpm.mod my-phpfpm.te

A continuación, tenemos que compilar el módulo de políticas para crear un paquete de políticas.

$ sudo semodule_package -o my-phpfpm.pp -m my-phpfpm.mod

El último paso es cargar el paquete de políticas mediante el comando semodule, que instala la política que se va a utilizar.

$ sudo semodule -i my-phpfpm.pp

Paso 9 – Configurar PHP-FPM

Abre php.ini para editarlo.

$ sudo nano /etc/php.ini

Para configurar el tamaño de subida de los archivos, cambia los valores de las variables upload_max_filesize y post_max_size. Este valor decide el tamaño del archivo que puedes subir a Prestashop. Por defecto, está fijado en 10MB que es lo que configuraremos con PHP.

$ sudo sed -i 's/upload_max_filesize = 2M/upload_max_filesize = 16M/' /etc/php.ini
$ sudo sed -i 's/post_max_size = 8M/post_max_size = 16M/' /etc/php.ini

Configura el límite de memoria de PHP en función de los recursos y requisitos de tu servidor.

$ sudo sed -i 's/memory_limit = 128M/memory_limit = 256M/' /etc/php.ini

Abre el archivo /etc/php-fpm.d/www.conf.

$ sudo nano /etc/php-fpm.d/www.conf

Necesitamos establecer el usuario/grupo Unix de los procesos PHP a nginx. Busca las líneas user=apache y group=apache 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 = nobody, listen.group = nobody, listen.mode = 0660 en el archivo y cámbialas después de descomentarlas.

; 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
listen.mode = 0660

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te solicite.

Reinicia el proceso PHP-fpm. Asegúrate de que tienes instalado Nginx antes de reiniciar el servicio PHP, de lo contrario, fallará ya que no podrá encontrar el grupo nginx.

$ sudo systemctl restart php-fpm

Cambia el grupo del directorio de sesiones PHP a Nginx.

$ sudo chgrp -R nginx /var/lib/php/session

Paso 10 – 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/prestashop.conf para editarlo.

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

Pega en él el siguiente código. Sustituye prestashop.example.com por el nombre de tu dominio. Asegúrate de que el valor de client_max_body_size se establece en 10 MB, que es el tamaño de subida de archivos por defecto en Prestashop. Es el mismo valor que configuramos antes con PHP.

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;

    # [EDIT] Your domain name(s) go here.
    server_name prestashop.example.com;

    # [EDIT] Path to your domain Nginx logs.
    access_log /var/log/nginx/prestashop.access.log;
    error_log /var/log/nginx/prestashop.error.log;

    # [EDIT] Path to your SSL certificates (take a look at Certbot https://certbot.eff.org).
    ssl_certificate      /etc/letsencrypt/live/prestashop.example.com/fullchain.pem;
    ssl_certificate_key  /etc/letsencrypt/live/prestashop.example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/prestashop.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;

    # [EDIT] Path to your PrestaShop directory.
    root /var/www/html/prestashop;

    index index.php;

    # This should match the `post_max_size` and/or `upload_max_filesize` settings
    # in your php.ini.
    client_max_body_size 16M;

    # Redirect 404 errors to PrestaShop.
    error_page 404 /index.php?controller=404;

    # HSTS (Force clients to interact with your website using HTTPS only).
    # For enhanced security, register your site here: https://hstspreload.org/.
    # WARNING: Don't use this if your site is not fully on HTTPS!
    # add_header Strict-Transport-Security "max-age=63072000; includeSubDomains" preload; always;

    # [EDIT] If you are using multiple languages.
    # rewrite ^/fr$ /fr/ redirect;
    # rewrite ^/fr/(.*) /$1;

    # Images.
    rewrite ^/(\d)(-[\w-]+)?/.+\.jpg$ /img/p/$1/$1$2.jpg last;
    rewrite ^/(\d)(\d)(-[\w-]+)?/.+\.jpg$ /img/p/$1/$2/$1$2$3.jpg last;
    rewrite ^/(\d)(\d)(\d)(-[\w-]+)?/.+\.jpg$ /img/p/$1/$2/$3/$1$2$3$4.jpg last;
    rewrite ^/(\d)(\d)(\d)(\d)(-[\w-]+)?/.+\.jpg$ /img/p/$1/$2/$3/$4/$1$2$3$4$5.jpg last;
    rewrite ^/(\d)(\d)(\d)(\d)(\d)(-[\w-]+)?/.+\.jpg$ /img/p/$1/$2/$3/$4/$5/$1$2$3$4$5$6.jpg last;
    rewrite ^/(\d)(\d)(\d)(\d)(\d)(\d)(-[\w-]+)?/.+\.jpg$ /img/p/$1/$2/$3/$4/$5/$6/$1$2$3$4$5$6$7.jpg last;
    rewrite ^/(\d)(\d)(\d)(\d)(\d)(\d)(\d)(-[\w-]+)?/.+\.jpg$ /img/p/$1/$2/$3/$4/$5/$6/$7/$1$2$3$4$5$6$7$8.jpg last;
    rewrite ^/(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)(-[\w-]+)?/.+\.jpg$ /img/p/$1/$2/$3/$4/$5/$6/$7/$8/$1$2$3$4$5$6$7$8$9.jpg last;
    rewrite ^/c/([\w.-]+)/.+\.jpg$ /img/c/$1.jpg last;

    # AlphaImageLoader for IE and FancyBox.
    rewrite ^images_ie/?([^/]+)\.(gif|jpe?g|png)$ js/jquery/plugins/fancybox/images/$1.$2 last;

    # Web service API.
    rewrite ^/api/?(.*)$ /webservice/dispatcher.php?url=$1 last;

    # Installation sandbox.
    rewrite ^(/install(?:-dev)?/sandbox)/.* /$1/test.php last;

    location / {
        try_files $uri $uri/ /index.php$is_args$args;
    }

    # [EDIT] Replace 'admin-dev' in this block with the name of your admin directory.
    location /admin-dev/ {
        if (!-e $request_filename) {
            rewrite ^ /admin-dev/index.php last;
        }
    }

    # .htaccess, .DS_Store, .htpasswd, etc.
    location ~ /\. {
        deny all;
    }

    # Source code directories.
    location ~ ^/(app|bin|cache|classes|config|controllers|docs|localization|override|src|tests|tools|translations|var|vendor)/ {
        deny all;
    }

    # vendor in modules directory.
    location ~ ^/modules/.*/vendor/ {
        deny all;
    }

    # Prevent exposing other sensitive files.
    location ~ \.(log|tpl|twig|sass|yml)$ {
        deny all;
    }

    # Prevent injection of PHP files.
    location /img {
        location ~ \.php$
        { deny all; }
    }

    location /upload {
        location ~ \.php$
        { deny all; }
    }

    # enable browser caching
    location ~* \.(?:css|eot|gif|ico|jpe?g|otf|png|ttf|woff2?)$ {
        expires 1M;
        add_header Cache-Control "public";
    }

    location ~ [^/]\.php(/|$) {
        # Split $uri to $fastcgi_script_name and $fastcgi_path_info.
        fastcgi_split_path_info ^(.+?\.php)(/.*)$;

        # Ensure that the requested PHP script exists before passing it
        # to the PHP-FPM.
        try_files $fastcgi_script_name =404;

        # Environment variables for PHP.
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $request_filename;

        fastcgi_index index.php;

        fastcgi_keep_conn on;
        fastcgi_read_timeout 30s;
        fastcgi_send_timeout 30s;

        # Uncomment these in case of long loading or 502/504 errors.
        # fastcgi_buffer_size 256k;
        # fastcgi_buffers 256 16k;
        # fastcgi_busy_buffers_size 256k;

        # [EDIT] Connection to PHP-FPM unix domain socket.
        fastcgi_pass unix:/run/php-fpm/www.sock;
    }

    # enable gzip compression
    gzip on;
    gzip_disable "msie6";

    gzip_vary on;
    gzip_proxied any;
    gzip_comp_level 6;
    gzip_min_length 1000;
    gzip_types
        application/atom+xml
        application/geo+json
        application/javascript
        application/json
        application/ld+json
        application/manifest+json
        application/rdf+xml
        application/rss+xml
        application/x-javascript
        application/xhtml+xml
        application/xml
        font/eot
        font/otf
        font/ttf
        image/svg+xml
        text/css
        text/javascript
        text/plain
        text/xml;
}

# enforce HTTPS
server {
    listen 80;
    listen [::]:80;
    server_name  prestashop.example.com;
    return 301   https://$host$request_uri;
}

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te pida.

Verifica la configuración de Nginx.

$ sudo nginx -t

Reinicia el servidor Nginx.

$ sudo systemctl restart nginx

Paso 11 – Instalar Prestashop

Visita la URL https://prestashop.example.com en tu navegador y verás la siguiente pantalla del instalador.

Página de instalación de Prestashop

Haz clic en Siguiente para pasar a la página siguiente.

Página del Acuerdo de Licencia de Prestashop

Se te mostrará la Licencia de Prestashop. Marca el botón Acepto los términos y condiciones anteriores para aceptar la licencia y haz clic en Siguiente para continuar.

Página de información de la tienda Prestashop

A continuación, se te pedirá que compartas información sobre la tienda. Indica el nombre de tu tienda, el país, la zona horaria y el tipo de tienda, y activa la opción SSL. Introduce también tu nombre de cuenta, dirección de correo electrónico y contraseña para acceder a la tienda. Haz clic en Siguiente cuando hayas terminado.

Página de contenido de la tienda Prestashop

A continuación, se te preguntará si quieres añadir algunos productos de demostración a la tienda. Selecciona no si no los quieres. Además, selecciona la opción Instalar todos los módulos o puedes elegir qué módulos quieres instalar. Haz clic en Siguiente cuando hayas terminado.

Configuración de la base de datos de Prestashop

A continuación, introduce las credenciales de la base de datos que creamos en el paso 5. Deja intactas las demás opciones. Haz clic en la opción Probar base de datos para verificar la conexión.

Prueba de conexión a la base de datos Prestashop

Haz clic en Siguiente si la conexión con la base de datos se ha realizado correctamente para pasar a la página siguiente.

Progreso del instalador de Prestashop

Aquí verás el progreso de la instalación de Prestashop. Una vez finalizada, se abrirá automáticamente la siguiente página.

Página de instalación finalizada de Prestashop

Haz clic en el botón Gestionar tu tienda para abrir el panel de administración y configurar tu tienda.

Advertencia sobre el directorio de instalación de Prestashop

Aquí aparecerá una advertencia sobre la eliminación del directorio install antes de intentar gestionar la tienda para mejorar la seguridad. Vuelve a entrar en tu sitio a través de SSH y ejecuta el siguiente comando.

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

Vuelve a la página final del instalador y abre de nuevo la URL. Si te das cuenta, la URL de la página de administración es aleatoria. Esto se hace para mejorar la seguridad. Cada instalación de Prestashop tiene una URL de administración diferente. Para nuestro tutorial, el enlace generado es https://prestashop.example.com/admin705saygwpwquwnhixx1. Obtendrás la siguiente página de acceso.

Página de inicio de sesión de Prestashop

Introduce las credenciales de tu cuenta y haz clic en el botón INICIAR S ESIÓN para acceder al panel de control.

Prestashop Admin Dasboard

La página de la tienda de Prestashop para una instalación por defecto debería tener el siguiente aspecto.

Página de inicio de Prestashop

A partir de aquí puedes empezar a utilizar Prestashop.

Paso 12 – Actualizar Prestashop

Hay varias formas de actualizar Prestashop. La más sencilla es utilizar el módulo asistente de actualización incorporado. Tu instalación de Prestashop viene con el módulo.

El primer paso es poner tu tienda en modo mantenimiento. Haz clic en la opción Configurar >> Parámetros de la Tienda >> General del menú izquierdo de la página de administración. Cambia a la pestaña de mantenimiento de la página.

Desactiva la tienda y añade tu dirección IP como IP de mantenimiento haciendo clic en el botón Añadir mi IP. Esto garantizará que puedas acceder a la tienda incluso cuando esté en mantenimiento. Haz clic en el botón Guardar cuando hayas terminado.

Página de mantenimiento de Prestashop

A continuación, abre la página del Gestor de Módulos en tu panel de administración seleccionando la opción Mejorar >> Módulos >> Gestor de Módulos en la parte izquierda.

Menú Admin del Gestor de Módulos de Prestashop

Una vez allí, instala el módulo Actualización con 1-Click haciendo clic en el botón Instalar. Una vez instalado, haz clic en el botón Configurar para abrir una nueva página en la que configurar los ajustes antes de realizar la actualización.

La primera parte de la página enumera algunas comprobaciones previas a la actualización. Todas las comprobaciones deben satisfacerse antes de realizar la actualización.

Lista de comprobación previa a la actualización de Prestashop

La primera configuración te permite seleccionar qué tipo de actualización quieres ejecutar. Como estamos utilizando la edición básica 8.1.1, la edición de código abierto 8.1.2 está disponible para la actualización. Se recomienda seguir con las ramas menor/mayor.

Tipo de actualización de Prestashop

Desplázate hacia abajo en la página hasta las opciones de Copia de seguridad, donde puedes seleccionar que Prestashop haga copias de seguridad de los archivos, la base de datos y las imágenes. Estas funciones son experimentales, pero deberías incluirlas.

Opciones de copia de seguridad de Prestashop

A continuación, elige las opciones de actualización sobre las cosas que quieres conservar y las que quieres actualizar.

Opciones de actualización de Prestashop

Haz clic en el botón Guardar en cada sección para guardar las opciones. Cuando estés satisfecho, haz clic en el botón ¡Actualizar Prestashop ahora! de la misma página para actualizar tu tienda. Si la actualización no se realiza correctamente por algún motivo, tendrás la oportunidad de volver atrás.

Conclusión

Con esto concluye nuestro tutorial en el que has aprendido a instalar Prestashop en un servidor Rocky Linux 9. Si tienes alguna pregunta, publícala en los comentarios a continuación.

También te podría gustar...