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.
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.
Haz clic en Siguiente para pasar a la página siguiente.
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.
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.
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.
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.
Haz clic en Siguiente si la conexión con la base de datos se ha realizado correctamente para pasar a la página siguiente.
Aquí verás el progreso de la instalación de Prestashop. Una vez finalizada, se abrirá automáticamente la siguiente página.
Haz clic en el botón Gestionar tu tienda para abrir el panel de administración y configurar tu tienda.
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.
Introduce las credenciales de tu cuenta y haz clic en el botón INICIAR S ESIÓN para acceder al panel de control.
La página de la tienda de Prestashop para una instalación por defecto debería tener el siguiente aspecto.
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.
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.
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.
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.
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.
A continuación, elige las opciones de actualización sobre las cosas que quieres conservar y las que quieres actualizar.
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.