Cómo instalar Craft CMS en Debian 12

Craft CMS es un sistema de gestión de contenidos de código abierto para crear todo tipo de 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á construido sobre 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 que funcione con él y a hacer copias de seguridad y restaurar un sitio creado con Craft CMS.

Requisitos previos

  • Un servidor que ejecute Debian 12 con un mínimo de 1 GB de RAM.
  • Un usuario no root con privilegios sudo.
  • Firewall sin complicaciones (UFW) activado y en ejecución.
  • 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 está actualizado.
    $ sudo apt update && sudo apt upgrade
    
  • Se necesitan algunos paquetes esenciales para que el tutorial y Craft CMS funcionen. Algunos de ellos ya estarán en tu servidor.
    $ sudo apt install curl wget nano software-properties-common dirmngr apt-transport-https ca-certificates lsb-release debian-archive-keyring gnupg2 ufw unzip -y
    

Paso 1 – Configurar el cortafuegos

El primer paso antes de instalar ningún paquete es configurar el cortafuegos para permitir conexiones HTTP y HTTPS.

Comprueba el estado del cortafuegos.

$ sudo ufw status

Deberías ver algo como lo siguiente

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)

Permitir puertos HTTP y HTTPs.

$ sudo ufw allow http
$ sudo ufw allow https

Vuelve a comprobar el estado para confirmarlo.

$ sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
80/tcp                     ALLOW       Anywhere
443/tcp                    ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
80/tcp (v6)                ALLOW       Anywhere (v6)
443/tcp (v6)               ALLOW       Anywhere (v6)

Paso 2 – Instala Nginx

Debian 12 incluye una versión antigua de Nginx. Necesitas descargar el repositorio oficial de Nginx para instalar la última versión.

Importa la clave de firma de Nginx.

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

Añade el repositorio de la versión estable de Nginx.

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

Actualiza los repositorios del sistema.

$ sudo apt update

Instala Nginx.

$ sudo apt install nginx

Verifica la instalación. En los sistemas Debian, el siguiente comando sólo funcionará con sudo.

$ sudo nginx -v
nginx version: nginx/1.24.0

Inicia el servidor Nginx.

$ sudo systemctl start nginx

Comprueba el estado del servicio.

$ sudo systemctl status nginx
? nginx.service - nginx - high performance web server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; preset: enabled)
     Active: active (running) since Fri 2023-12-01 09:46:46 UTC; 18s ago
       Docs: https://nginx.org/en/docs/
    Process: 39483 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS)
   Main PID: 39484 (nginx)
      Tasks: 2 (limit: 2315)
     Memory: 1.7M
        CPU: 6ms
     CGroup: /system.slice/nginx.service
             ??39484 "nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf"
             ??39485 "nginx: worker process"

Paso 3 – Instala PHP y las extensiones

Debian 12 incluye PHP 8.2 por defecto. Puedes instalarlo junto con las extensiones que necesita Craft CMS ejecutando el siguiente comando.

$ sudo apt 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

Para estar siempre con la última versión de PHP o si quieres instalar varias versiones de PHP, añade el repositorio PHP de Ondrej.

Primero, importa la clave GPG PHP del repositorio de Sury.

$ sudo curl -sSLo /usr/share/keyrings/deb.sury.org-php.gpg https://packages.sury.org/php/apt.gpg

Añade el repositorio PHP de Ondrej Sury.

$ sudo sh -c 'echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'

Actualiza la lista de repositorios de tu sistema.

$ sudo apt update

Probablemente recibirás información sobre actualizaciones pendientes. Ejecútalas.

$ sudo apt upgrade

Instala PHP y sus extensiones.

$ sudo apt install php8.2 php8.2-cli php8.2-common php8.2-gmp php8.2-fpm php8.2-xmlrpc php8.2-bcmath php8.2-imagick php8.2-curl php8.2-zip php8.2-gd php8.2-mysql php8.2-xml php8.2-mbstring php8.2-xmlrpc php8.2-intl php8.2-pgsql

Comprueba la versión de PHP instalada.

$ php --version
PHP 8.2.13 (cli) (built: Nov 24 2023 13:10:42) (NTS)
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

Comprueba el estado del servicio PHP.

$ sudo systemctl status php8.2-fpm
? php8.2-fpm.service - The PHP 8.2 FastCGI Process Manager
     Loaded: loaded (/lib/systemd/system/php8.2-fpm.service; enabled; preset: enabled)
     Active: active (running) since Fri 2023-12-01 10:29:53 UTC; 34min ago
       Docs: man:php-fpm8.2(8)
    Process: 65825 ExecStartPost=/usr/lib/php/php-fpm-socket-helper install /run/php/php-fpm.sock /etc/php/8.2/fpm/pool.d/www.conf 82 (code=exited, status=0/SUCCESS)
   Main PID: 65821 (php-fpm8.2)
     Status: "Processes active: 0, idle: 3, Requests: 208, slow: 0, Traffic: 0.2req/sec"
      Tasks: 4 (limit: 2315)
     Memory: 83.4M
        CPU: 6.456s
     CGroup: /system.slice/php8.2-fpm.service
             ??65821 "php-fpm: master process (/etc/php/8.2/fpm/php-fpm.conf)"
             ??65823 "php-fpm: pool www"
             ??65824 "php-fpm: pool www"
             ??65843 "php-fpm: pool www"

Paso 4 – Configurar PHP-FPM

Abre php.ini para editarlo.

$ sudo nano /etc/php/8.2/fpm/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/8.2/fpm/php.ini
$ sudo sed -i 's/post_max_size = 8M/post_max_size = 128M/' /etc/php/8.2/fpm/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/8.2/fpm/php.ini

Abre el archivo /etc/php/8.2/fpm/pool.d/www.conf.

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

Necesitamos establecer el usuario/grupo Unix de los procesos PHP a nginx. Busca las líneas user=www-data y group=www-data en el archivo y cámbialas por nginx.

...
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
;       will be used.
user = nginx
group = nginx
...

Busca también las líneas listen.owner=www-data y listen.group=www-data en el archivo y cámbialas por nginx.

listen.owner = nginx
listen.group = nginx

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando 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 php8.2-fpm

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 hace funcionar 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

Debian 12 incluye PostgreSQL 15 por defecto. Nosotros utilizaremos PostgreSQL 16.

Ejecuta el siguiente comando para añadir la clave GPG de PostgreSQL.

$ curl https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor | sudo tee /usr/share/keyrings/postgresql-key.gpg >/dev/null

Añade el repositorio APT a tu lista de fuentes.

$ sudo sh -c 'echo "deb [signed-by=/usr/share/keyrings/postgresql-key.gpg arch=amd64] http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'

Actualiza el repositorio del sistema.

$ sudo apt update

Ahora, puedes instalar PostgreSQL utilizando el comando siguiente.

$ sudo apt install postgresql postgresql-contrib

El paquete postgresql-contrib contiene algunas utilidades adicionales.

Verifica la versión.

$ psql --version
psql (PostgreSQL) 16.1 (Debian 16.1-1.pgdg120+1)

Comprueba el estado del servicio PostgreSQL.

$ sudo systemctl status postgresql
? postgresql.service - PostgreSQL RDBMS
     Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; preset: enabled)
     Active: active (exited) since Wed 2023-11-29 05:54:03 UTC; 11s ago
   Main PID: 20170 (code=exited, status=0/SUCCESS)
        CPU: 1ms

Nov 29 05:54:03 craftcms systemd[1]: Starting postgresql.service - PostgreSQL RDBMS...
Nov 29 05:54:03 craftcms systemd[1]: Finished postgresql.service - PostgreSQL RDBMS.

Verás 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 (Debian 16.1-1.pgdg120+1))
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, compression: off)
Type "help" for help.

craftcms=>

Sal del intérprete de comandos escribiendo \q.

Paso 7 – Instalar y configurar Redis

Debian 12 incluye Redis 7.0 por defecto, que es lo que vamos a utilizar. Instala Redis.

$ sudo apt install redis

Comprueba la versión.

$ redis-server --version
Redis server v=7.0.11 sha=00000000:0 malloc=jemalloc-5.3.0 bits=64 build=c4e7f6bf175a885b

Sin embargo, si quieres instalar la última versión, puedes hacerlo utilizando el repositorio oficial de Redis mediante los siguientes comandos.

$ curl -fsSL https://packages.redis.io/gpg | sudo gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg
$ echo "deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/redis.list
$ sudo apt update
$ sudo apt install redis

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 solicite. 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. Puedes instalar Certbot utilizando el repositorio de Debian u obtener la última versión utilizando la herramienta Snapd. Nosotros utilizaremos la versión Snapd.

Debian 12 no viene con Snapd instalado. Instala el paquete Snapd.

$ sudo apt install snapd

Ejecuta los siguientes comandos para asegurarte de que tu versión de Snapd está actualizada.

$ sudo snap install core && sudo snap refresh core

Instala Certbot.

$ sudo snap install --classic certbot

Utiliza el siguiente comando para asegurarte de que 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     
---------------------------------------------------------------------------------------------------------------------------               
Fri 2023-12-01 10:39:00 UTC 12min left   Fri 2023-12-01 10:09:01 UTC 17min ago  phpsessionclean.timer    phpsessionclean.service
Fri 2023-12-01 17:01:47 UTC 6h left      Thu 2023-11-30 17:01:47 UTC 17h ago    systemd-tmpfiles-clean.timer systemd-tmpfiles-clean.service
Fri 2023-12-01 18:34:00 UTC 8h 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 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/php8.2-fpm.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 11 – Accede a Craft CMS

Abre la URL https://craftcms.example.com en tu navegador y accederás a la siguiente página.

Página de inicio de Craft CMS

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.

Página de inicio de sesión de Craft CMS

Introduce tus credenciales de administración y haz clic en la tecla Iniciar sesión para acceder. Accederás al siguiente panel de control.

Craft CMS Admin Dashboard

Ya puedes empezar a utilizar Craft CMS para crear tu sitio web.

Paso 12 – 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.

Copia de seguridad de la base de datos de Craft CMS

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, sólo tienes que copiar y guardar 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 13 – 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.

También te podría gustar...