Cómo instalar Craft CMS en Rocky Linux 9
Craft CMS es un sistema de gestión de contenidos de código abierto para crear sitios web. Es un CMS seguro y escalable, con un amplio ecosistema de plugins gratuitos y de pago de gran calidad. Tiene un panel de control intuitivo y fácil de usar para la creación de contenidos y las tareas administrativas. Está basado en el framework PHP Yii. El motor de plantillas Twig impulsa su sistema de plantillas. Puede trabajar con bases de datos MySQL y PostgreSQL para el almacenamiento y utiliza la base de datos Redis para el almacenamiento en caché y de sesiones.
En este tutorial, aprenderás a instalar Craft CMS en un servidor Debian 12. También aprenderás a habilitar Redis para trabajar con él y a hacer copias de seguridad y restaurar un sitio creado con Craft CMS.
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
craftcms.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 Craft CMS 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 viene con una versión antigua de Nginx. Necesitas utilizar el repositorio oficial de Nginx para instalar la última versión.
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 Mon 2023-12-04 14:01:19 UTC; 3s ago Docs: http://nginx.org/en/docs/ Process: 59396 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS) Main PID: 59397 (nginx) Tasks: 2 (limit: 10866) Memory: 1.9M CPU: 10ms CGroup: /system.slice/nginx.service ??59397 "nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf" ??59398 "nginx: worker process"
Paso 3 – Instala PHP y las extensiones
Rocky Linux 9 incluye 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, Craft CMS es compatible con PHP 8.2. Por lo tanto, habilita el repositorio PHP 8.2 de Remi.
$ sudo dnf module reset php -y $ sudo dnf module enable php:remi-8.2
Instala PHP y sus extensiones requeridas por Craft CMS.
$ sudo dnf install php php-cli php-common php-json php-gmp php-fpm php-xmlrpc php-bcmath php-imagick php-curl php-zip php-gd php-mysql php-xml php-mbstring php-xmlrpc php-intl php-pgsql
Comprueba la versión de PHP instalada.
$ php --version PHP 8.2.13 (cli) (built: Nov 21 2023 09:55:59) (NTS gcc x86_64) Copyright (c) The PHP Group Zend Engine v4.2.13, Copyright (c) Zend Technologies with Zend OPcache v8.2.13, Copyright (c), by Zend Technologies
Habilita e inicia el servicio PHP-FPM.
$ sudo systemctl enable php-fpm --now
Comprueba el estado del servicio PHP.
$ 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 Mon 2023-12-04 14:05:58 UTC; 6s ago Main PID: 61410 (php-fpm) Status: "Ready to handle connections" Tasks: 6 (limit: 10866) Memory: 16.6M CPU: 96ms CGroup: /system.slice/php-fpm.service ??61410 "php-fpm: master process (/etc/php-fpm.conf)" ??61411 "php-fpm: pool www" ??61412 "php-fpm: pool www" ??61413 "php-fpm: pool www" ??61414 "php-fpm: pool www" ??61415 "php-fpm: pool www"
Paso 4 – 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 de archivo que puedes subir a Craft CMS. Para nuestros propósitos, lo estamos fijando en 128 MB. Puedes fijarlo a tu gusto.
$ sudo sed -i 's/upload_max_filesize = 2M/upload_max_filesize = 128M/' /etc/php.ini $ sudo sed -i 's/post_max_size = 8M/post_max_size = 128M/' /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=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. ; 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 5 – Instala Composer
Composer actúa como gestor de dependencias para PHP. También es el gestor de dependencias del framework PHP Laravel, que es lo que potencia Craft CMS.
Descarga el script de instalación de Composer.
$ php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
Verifica el instalador descargado.
$ php -r "if (hash_file('sha384', 'composer-setup.php') === 'e21205b207c3ff031906575712edab6f13eb0b361f2085f1f1237b7126d785e826a450292b6cfd1d64d92e6563bbde02') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
Recibirás la siguiente salida.
Installer verified
Ejecuta el script de instalación para descargar la última versión de Composer.
$ php composer-setup.php
Elimina el script de instalación.
$ php -r "unlink('composer-setup.php');"
Mueve el archivo binario descargado al directorio /usr/local/bin
.
$ sudo mv composer.phar /usr/local/bin/composer
Confirma la instalación.
$ composer --version Composer version 2.6.5 2023-10-06 10:11:52
Paso 6 – Instalar y configurar PostgreSQL
Rocky Linux 9 viene con PostgreSQL 13 por defecto. En su lugar utilizaremos PostgreSQL 16 desde su repositorio oficial.
Instala el repositorio RPM de PostgreSQL.
$ sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm
Desactiva el módulo incorporado de PostgreSQL.
$ sudo dnf -qy module disable postgresql
Ahora, puedes instalar PostgreSQL utilizando el comando que se indica a continuación.
$ sudo dnf install -y postgresql16-server postgresql16-contrib
El paquete postgresql-contrib
contiene algunas utilidades adicionales.
Verifica la versión.
$ psql --version psql (PostgreSQL) 16.1
Inicializa la base de datos PostgreSQL.
$ sudo /usr/pgsql-16/bin/postgresql-16-setup initdb Initializing database ... OK
Habilita el servicio PostgreSQL.
$ sudo systemctl enable postgresql-16
Inicia el servicio PostgreSQL.
$ sudo systemctl start postgresql-16
Comprueba el estado del servicio PostgreSQL.
$ sudo systemctl status postgresql-16 ? postgresql-16.service - PostgreSQL 16 database server Loaded: loaded (/usr/lib/systemd/system/postgresql-16.service; enabled; preset: disabled) Active: active (running) since Mon 2023-12-04 22:28:34 UTC; 2s ago Docs: https://www.postgresql.org/docs/16/static/ Process: 72143 ExecStartPre=/usr/pgsql-16/bin/postgresql-16-check-db-dir ${PGDATA} (code=exited, status=0/SUCCESS) Main PID: 72148 (postgres) Tasks: 7 (limit: 10866) Memory: 17.4M CPU: 45ms CGroup: /system.slice/postgresql-16.service ??72148 /usr/pgsql-16/bin/postgres -D /var/lib/pgsql/16/data/ ??72149 "postgres: logger " ??72150 "postgres: checkpointer " ??72151 "postgres: background writer " ??72153 "postgres: walwriter " ??72154 "postgres: autovacuum launcher " ??72155 "postgres: logical replication launcher " Dec 04 22:28:33 craftcms.nspeaks.com systemd[1]: Starting PostgreSQL 16 database server... Dec 04 22:28:33 craftcms.nspeaks.com postgres[72148]: 2023-12-04 22:28:33.999 UTC [72148] LOG: redirecting log output to logging collector process Dec 04 22:28:33 craftcms.nspeaks.com postgres[72148]: 2023-12-04 22:28:33.999 UTC [72148] HINT: Future log output will appear in directory "log". Dec 04 22:28:34 craftcms.nspeaks.com systemd[1]: Started PostgreSQL 16 database server.
Puedes ver que el servicio está activado y en ejecución por defecto.
Inicia el intérprete de comandos PostgreSQL.
$ sudo -i -u postgres psql
Crea la base de datos de Craft CMS.
postgres=# CREATE DATABASE craftcms;
Crea el usuario de Craft CMS y elige una contraseña segura.
postgres-# CREATE USER craftuser WITH PASSWORD 'Your_Password';
Cambia el propietario de la base de datos por el usuario Craft CMS.
postgres-# ALTER DATABASE craftcms OWNER TO craftuser;
Concede todos los privilegios de la base de datos al usuario Craft CMS.
postgres-# GRANT ALL PRIVILEGES ON DATABASE craftcms TO craftuser;
Sal del intérprete de comandos.
postgres-# \q
Comprueba que tus credenciales funcionan.
$ psql --username craftuser --password --host localhost craftcms Password: psql (16.1) Type "help" for help. craftcms=>
Sal del intérprete de comandos escribiendo \q
.
Paso 7 – Instalar y configurar Redis
Rocky Linux 9 incluye Redis 6.2 por defecto. Sin embargo, nosotros utilizaremos Redis 7.0, que instalaremos utilizando el repositorio Remi.
Como hemos instalado el repositorio Remi al instalar PHP, podemos saltarnos esa parte. Lista todos los módulos Redis disponibles.
$ sudo dnf module list redis Rocky Linux 9 - AppStream Name Stream Profiles Summary redis 7 common [d] Redis persistent key-value database Remi's Modular repository for Enterprise Linux 9 - x86_64 Name Stream Profiles Summary redis remi-5.0 common [d] Redis persistent key-value database redis remi-6.0 common [d] Redis persistent key-value database redis remi-6.2 common [d] Redis persistent key-value database redis remi-7.0 common [d] Redis persistent key-value database redis remi-7.2 common [d] Redis persistent key-value database Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled
Activa el último módulo Redis 7.2.
$ sudo dnf module enable -y redis:remi-7.2
Instala Redis.
$ sudo dnf install redis
Verifica la versión.
$ redis-server --version Redis server v=7.2.3 sha=00000000:0 malloc=jemalloc-5.3.0 bits=64 build=7bd3173e4e30c3e4
Activa el servicio Redis.
$ sudo systemctl enable redis
Inicia el servicio Redis.
$ sudo systemctl start redis
Comprueba el estado del servicio.
$ sudo systemctl status redis ? redis.service - Redis persistent key-value database Loaded: loaded (/usr/lib/systemd/system/redis.service; enabled; preset: disabled) Drop-In: /etc/systemd/system/redis.service.d ??limit.conf Active: active (running) since Mon 2023-12-04 22:36:25 UTC; 1min 32s ago Main PID: 72877 (redis-server) Status: "Ready to accept connections" Tasks: 5 (limit: 10866) Memory: 7.5M CPU: 176ms CGroup: /system.slice/redis.service ??72877 "/usr/bin/redis-server 127.0.0.1:6379" Dec 04 22:36:25 craftcms.nspeaks.com systemd[1]: Starting Redis persistent key-value database... Dec 04 22:36:25 craftcms.nspeaks.com systemd[1]: Started Redis persistent key-value database.
El siguiente paso es añadir autenticación al servidor Redis. Desde Redis v6.0, la mejor forma de añadir autenticación es utilizar ACL (Listas de Control de Acceso). Abre el archivo /etc/redis/redis.conf
para editarlo.
$ sudo nano /etc/redis/redis.conf
Busca la entrada de la línea # aclfile /etc/redis/users.acl
y descoméntala eliminando la almohadilla (#
) que hay delante.
aclfile /etc/redis/users.acl
Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te pida.
A continuación, crea y abre el archivo /etc/redis/users.acl
para editarlo.
$ sudo nano /etc/redis/users.acl
Añádele la siguiente línea.
user navjot on +@all ~* >yourpassword
Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te solicite.
Reinicia el servidor Redis para aplicar el cambio.
$ sudo systemctl restart redis
Abre el intérprete de comandos de Redis.
$ redis-cli
Utiliza el comando PING
. Dará un error de autenticación.
127.0.0.1:6379> PING (error) NOAUTH Authentication required.
Utiliza el comando AUTH
para iniciar sesión.
127.0.0.1:6379> AUTH navjot yourpassword OK
Vuelve a utilizar el comando PING
.
127.0.0.1:6379> PING OK
Sal del intérprete de comandos.
127.0.0.1:6379> exit
También tendrás que instalar la extensión PHP Redis.
$ sudo apt install php-redis
Paso 8 – Instalar Craft CMS
Antes de instalar Craft CMS, puedes comprobar si cumples todos los requisitos del servidor para ejecutarlo utilizando el siguiente comando.
$ curl -Lsf https://raw.githubusercontent.com/craftcms/server-check/HEAD/check.sh | bash
Obtendrás la siguiente salida.
Running Craft Server Check… Craft CMS Requirement Checker This script checks if your web server configuration meets the requirements for running a Craft CMS installation. It checks if the server is running the right version of PHP, if appropriate PHP extensions have been loaded, and if php.ini file settings are correct. Results: -------- PHP 8.2+: OK BCMath extension: OK ctype extension: OK cURL extension: OK DOM extension: OK Fileinfo extension: OK GD extension or ImageMagick extension: OK iconv extension: OK Intl extension: OK JSON extension: OK Multibyte String extension (with Function Overloading disabled): OK OPcache extension (with save_comments): OK OpenSSL extension: OK PCRE extension (with UTF-8 support): OK PDO extension: OK Reflection extension: OK SPL extension: OK Zip extension: OK ignore_user_abort(): OK password_hash(): OK proc_close(): OK proc_get_status(): OK proc_open(): OK proc_terminate(): OK allow_url_fopen: OK ini_set calls: OK Memory Limit: OK ------------------------------------------ Errors: 0 Warnings: 0 Total checks: 27
Una vez que todo esté bien, puedes proceder. Crea el directorio raíz de la web.
$ sudo mkdir /var/www/html/craftcms -p
Establece al usuario actualmente conectado como propietario de este directorio.
$ sudo chown -R $USER:$USER /var/www/html/craftcms
Cambia al directorio.
$ cd /var/www/html/craftcms
Descarga e instala Craft CMS utilizando Composer. El punto (.
) al final del comando significa que la instalación debe realizarse en el directorio actual.
$ composer create-project craftcms/craft .
Durante la instalación, se te pedirán varios detalles sobre la base de datos, y la cuenta de administrador. URL del sitio y su idioma como se muestra a continuación.
> @php craft setup/welcome ______ .______ ___ _______ .___________. / || _ \ / \ | ____|| | | ,----'| |_) | / ^ \ | |__ `---| |----` | | | / / /_\ \ | __| | | | `----.| |\ \----./ _____ \ | | | | \______|| _| `._____/__/ \__\ |__| |__| A N E W I N S T A L L ______ .___ ___. _______. / || \/ | / | | ,----'| \ / | | (----` | | | |\/| | \ \ | `----.| | | | .----) | \______||__| |__| |_______/ Generating an application ID ... done (CraftCMS--923f03f1-9bea-4c3d-a7ca-1466645ce75d) Generating a security key ... done (iMdcUi6wQyf9MshEda__vZcCwILbclxz) Welcome to Craft CMS! Are you ready to begin the setup? (yes|no) [no]:yes Which database driver are you using? (mysql or pgsql) [mysql] pgsql Database server name or IP address: [127.0.0.1] Database port: [5432] Database username: [root] craftuser Database password: Database name: craftcms Database table prefix: Testing database credentials ... success! Using default schema "public". Saving database credentials to your .env file ... done Install Craft now? (yes|no) [yes]:yes Username: [admin] navjot Email: [email protected] Password: Confirm: Site name: Howtoforge Tutorials Site URL: https://craftcms.example.com Site language: [en-US] *** installing Craft
Haz que Redis funcione con Craft CMS
Instala el paquete yiisoft/yii2-redis
.
$ composer require --prefer-dist yiisoft/yii2-redis:"~2.0.0"
Abre el archivo /var/www/html/craftcms/config/app.php
para editarlo.
$ nano config/app.php
Verás el siguiente contenido en él.
use craft\helpers\App; return [ 'id' => App::env('CRAFT_APP_ID') ?: 'CraftCMS', ];
Cámbialo como se indica a continuación.
use craft\helpers\App; return [ 'id' => App::env('CRAFT_APP_ID') ?: 'CraftCMS', 'components' => [ 'cache' => function() { $config = [ 'class' => yii\redis\Cache::class, 'keyPrefix' => Craft::$app->id, 'defaultDuration' => Craft::$app->config->general->cacheDuration, // Full Redis connection details: 'redis' => [ 'hostname' => App::env('REDIS_HOSTNAME') ?: 'localhost', 'port' => 6379, 'username' => App::env('REDIS_USERNAME') ?: null, 'password' => App::env('REDIS_PASSWORD') ?: null, ], ]; return Craft::createObject($config); }, ], ];
Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te pida. Esto habilita Redis como almacenamiento en caché para Craft CMS. También puedes utilizar Redis para almacenar datos de sesión PHP, cola de trabajos y como controlador mutex. Puedes encontrar la configuración para ello en la documentación de Craft CMS.
También tienes que añadir la configuración de Redis al archivo .env
.
$ nano .env
Añade el siguiente código al final del archivo.
REDIS_HOSTNAME=localhost REDIS_USERNAME=navjot REDIS_PASSWORD=yourpassword
Elige las opciones como se muestra arriba. Una vez finalizado, cambia el grupo del directorio a nginx
. De esta forma, tanto el usuario actualmente conectado como Nginx tendrán acceso a Craft CMS.
$ sudo chgrp -R nginx /var/www/html/craftcms
Da permiso al grupo nginx
para escribir en el directorio.
$ sudo chmod -R g+w /var/www/html/craftcms
A partir de aquí, no necesitarás volver a cambiar los permisos y podrás realizar todas las operaciones sin utilizar privilegios de root.
Paso 9 – 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 de 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 craftcms.example.com
El comando anterior descargará un certificado en el directorio /etc/letsencrypt/live/craftcms.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 --------------------------------------------------------------------------------------------------------------------------- Mon 2023-12-04 23:38:47 UTC 18min left Mon 2023-12-04 22:19:02 UTC 1h 0min ago dnf-makecache.timer dnf-makecache.service Tue 2023-12-05 00:00:00 UTC 40min left - - logrotate.timer logrotate.service Tue 2023-12-05 09:36:00 UTC 10h left - - snap.certbot.renew.timer snap.certbot.renew.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 10 – Configurar SELinux
Cambia el contexto de seguridad de archivos para Craft CMS.
$ sudo semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/html/craftcms(/.*)?"
Aplica la política.
$ sudo restorecon -Rv /var/www/html/craftcms/
Aplica la política para permitir que Nginx dé acceso a PostgreSQL.
$ sudo setsebool -P httpd_can_network_connect_db 1
Aplica la política para permitir que se establezcan conexiones con hosts externos.
$ 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 11 – 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/craftcms.conf
para editarlo.
$ sudo nano /etc/nginx/conf.d/craftcms.conf
Pega en él el siguiente código. Sustituye craftcms.example.com
por el nombre de tu dominio. Asegúrate de que el valor de client_max_body_size
se establece en 128 MB, que es lo que establecimos para Craft CMS al configurar PHP anteriormente.
server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name craftcms.example.com; root /var/www/html/craftcms/web; index index.php; client_max_body_size 128M; access_log /var/log/nginx/craftcms.access.log; error_log /var/log/nginx/craftcms.error.log; ssl_certificate /etc/letsencrypt/live/craftcms.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/craftcms.example.com/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/craftcms.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; location / { try_files $uri/index.html $uri $uri/ /index.php?$query_string; } location ~ [^/]\.php(/|$) { try_files $uri $uri/ /index.php?$query_string; fastcgi_index index.php; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_keep_conn on; include fastcgi_params; fastcgi_pass unix:/run/php-fpm/www.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param HTTP_PROXY ""; } } # enforce HTTPS server { listen 80; listen [::]:80; server_name craftcms.example.com; return 301 https://$host$request_uri; }
Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te pida.
Comprueba la configuración de Nginx.
$ sudo nginx -t
Reinicia el servidor Nginx.
$ sudo systemctl restart nginx
Paso 12 – Accede a Craft CMS
Abre la URL https://craftcms.example.com
en tu navegador y accederás a la siguiente página.
Para acceder a la página de administración, visita la URL https://craftcms.example.com/admin
y accederás a la página de inicio de sesión.
Introduce tus credenciales de administración y haz clic en la tecla Iniciar sesión para acceder. Accederás al siguiente panel de control.
Ya puedes empezar a utilizar Craft CMS para crear tu sitio web.
Paso 13 – Copia de seguridad y restauración de Craft CMS
Puedes hacer una copia de seguridad de la base de datos de Craft CMS desde el panel de administración visitando Panel de control >> Utilidades >> Copia de seguridad de la base de datos.
Haz clic en el botón Copia de seguridad para descargar la copia de seguridad de tu base de datos. También puedes crear la copia de seguridad utilizando el terminal. Ejecuta el siguiente comando para crear la copia de seguridad. Introduce tu contraseña cuando se te solicite.
$ mysqldump -u craftcmsuser -p craftcms > ~/craftcms.database.sql
También puedes crear la copia de seguridad de la base de datos utilizando la utilidad de línea de comandos Craft CMS. La ventaja de esta utilidad es que no necesitas pasar tus credenciales de la base de datos. Lee más sobre la utilidad de la consola de comandos de Craft CMS aquí.
$ cd /var/www/html/craftcms $ php craft db/backup ~/ Backing up the database ... done Backup file: /home/navjot/howtoforge-tutorials--2023-12-03-065138--v4.5.11.1.sql (200.019 KB)
Si no especificas ninguna ubicación en el comando anterior, el archivo de copia de seguridad se escribirá en el directorio /var/www/html/craftcms/storage/backups
.
Para hacer una copia de seguridad de los archivos, copia y guarda toda la carpeta /var/www/html/craftcms
.
$ cd /var/www/html $ tar -zcf ~/craftcms.tar.gz craftcms
Para restaurarla en un nuevo servidor, extrae los archivos a la carpeta /var/www/html
.
$ tar -xzf craftcms.tar.gz -C /var/www/html/
Crea una base de datos con las mismas credenciales en el nuevo servidor y restaura la base de datos utilizando el siguiente comando. Introduce tu contraseña cuando se te solicite.
$ mysqlimport -u craftcmsuser -p craftcms craftcms.database.sql
Paso 14 – Actualizar Craft CMS
Hay dos formas de actualizar Craft CMS. Una es desde dentro del panel de administración. Cuando haya una actualización disponible, recibirás un aviso. Haz clic en el aviso para actualizar. Craft CMS hará automáticamente una copia de seguridad de la base de datos antes de realizar una actualización.
También puedes actualizarla a través del terminal.
Para comprobar todas las actualizaciones disponibles, ejecuta el siguiente comando.
$ cd /var/www/html/craftcms/ $ php craft update
Si hay una actualización disponible, ejecuta el siguiente comando para aplicarla.
$ php craft update all
Conclusión
Con esto concluye nuestro tutorial, en el que has aprendido a instalar el software Craft CMS en un servidor Debian 12. Si tienes alguna pregunta, publícala en los comentarios a continuación.