Instalación de Grav CMS.

Autor: Joel Barrios Dueñas
Correo electrónico: darkshram en gmail punto com
Sitio de Red: https://www.alcancelibre.org/

Licencia de este documento: Creative Commons Reconocimiento-NoComercial-CompartirIgual 2.1

© 1999-2024 Joel Barrios Dueñas. Usted es libre de copiar, distribuir y comunicar públicamente la obra y hacer obras derivadas bajo las condiciones siguientes: a) Debe reconocer y citar al autor original. b) No puede utilizar esta obra para fines comerciales (incluyendo su publicación, a través de cualquier medio, por entidades con fines de lucro). c) Si altera o transforma esta obra o genera una obra derivada, sólo puede distribuir la obra generada bajo una licencia idéntica a ésta. Al reutilizar o distribuir la obra, tiene que dejar bien claro los términos de la licencia de esta obra. Alguna de estas condiciones puede no aplicarse si se obtiene el permiso del titular de los derechos de autor. Los derechos derivados de usos legítimos u otras limitaciones no se ven afectados por lo anterior. Licencia completa en castellano. La información contenida en este documento y los derivados de éste se proporcionan tal cual son y los autores no asumirán responsabilidad alguna si el usuario o lector hace mal uso de éstos.

Introducción.

Grav CMS es una plataforma Web rápida, simple y flexible. La instalación es simple: sólo extraer el archivo ZIP, acceder al instalador de un sólo clic y listo. Grav sigue los principios similares de otras plataformas CMS basadas en archivos simples, aunque con otra filosofía y diseño. Nos ha enamorado de tal modo que lo hemos implementado en Alcance Libre y difícilmente miraremos atrás a la era con Geeklog.

Tiene las siguientes características:

Sitio de Internet: https://getgrav.org

Requisitos.

Notas.

Este documento asumirá que:

Instalación de paquetes necesarios.

Acceda al sistema como root.

Ejecute lo siguiente para instalar los paquetes de PHP requeridos:

dnf -y install php-fpm php-xml php-gd php-mbstring php-pecl-zip

Generar usuario

Genere el usuario nombreyapellido:

useradd -c "Nombre y Apellido" nombreyapellido
passwd nombreyapellido

Genere el directorio /home/nombreyapellido/public_html:

mkdir -p /home/nombreyapellido/public_html

Asigne pertenencia a este directorio para nombreyapellido:

chown nombreyapellido:nombreyapellido /home/nombreyapellido/public_html

Cambie los permisos de /home/nombreyapellido a fin de permitir que Nginx pueda acceder hacia el directorio /home/nombreyapellido/public_html:

chmod 755 /home/nombreyapellido

Si tiene configurado OpenSSH para sólo permitir acceso de usuarios con jaula a través de SFTP, cambie la pertenencia del directorio /home/nombreyapellido al usuario root, cambie el intérprete de mandatos del usuario nombreyapellido a /usr/sbin/nologin y añada al usuario nombreyapellido al grupo sftpusers.

chown root:root /home/nombreyapellido
usermod -s /usr/sbin/nologin -G sftpusers nombreyapellido

Instalación como sub-directorio del anfitrión virtual.

Descargue el fuente de Grav y descomprimir en un directorio que se pueda acceder desde Nginx:

cd /home/nombreyapellido/
wget https://github.com/getgrav/grav/releases/download/1.7.46/grav-admin-v1.7.46.zip
unzip grav-admin-v1.7.46.zip
mv grav-admin /home/nombreyapellido/public_html/grav
chown -R nombreyapellido:nombreyapellido /home/nombreyapellido/public_html/grav/
restorecon -Rv /home/nombreyapellido/public_html/grav/

Nginx requiere la siguiente configuración para location /grav en el anfitrión virtual:

    location /grav {
        index index.html index.htm index.php;
        try_files $uri $uri/ /grav/index.php?$query_string;
        location ~* /grav/(\.git|cache|bin|logs|backup|tests)/.*$ { return 403; }
        location ~* /grav/(system|vendor)/.*\.(txt|xml|md|html|yaml|yml|php|pl|py|cgi|twig|sh|bat)$ { return 403; }
        location ~* /grav/user/.*\.(txt|md|yaml|yml|php|pl|py|cgi|twig|sh|bat)$ { return 403; }
        location ~  /grav/(LICENSE\.txt|composer\.lock|composer\.json|nginx\.conf|web\.config|htaccess\.txt|\.htaccess) { return 403; }
    }
    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_pass  127.0.0.1:8502;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PHP_VALUE "memory_limit=128M \n upload_max_filesize=128M \n post_max_size=128M \n xdebug.max_nesting_level=512";
    }

De modo que la configuración del anfitrión virtual sea similar a lo siguiente:

server {
    listen 443 http2 ssl;
    server_name nombreyapellido.net;
    root /home/nombreyapellido/public_html;
    access_log /var/log/nginx/nombreyapellido-access_log main;
    error_log /var/log/nginx/nombreyapellido-error_log notice;
    ssl_certificate /ruta/del/archivo/del/certificado.crt;
    ssl_certificate_key /ruta/del/archivo/de/firma.key;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers off;
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
    # Se recomienda que client_max_body_size tenga el mismo valor que
    # memory_limit, post_max_size y upload_max_filesize en la instancia
    # de PHP-FPM.
    client_max_body_size 128M;
    location / {
        index index.html index.htm
    }
    # Se asume que Grav estará en /home/nombreyapellido/public_html/grav/
    location /grav {
        index index.html index.htm index.php;
        try_files $uri $uri/ /grav/index.php?$query_string;
        location ~* /grav/(\.git|cache|bin|logs|backup|tests)/.*$ { return 403; }
        location ~* /grav/(system|vendor)/.*\.(txt|xml|md|html|yaml|yml|php|pl|py|cgi|twig|sh|bat)$ { return 403; }
        location ~* /grav/user/.*\.(txt|md|yaml|yml|php|pl|py|cgi|twig|sh|bat)$ { return 403; }
        location ~  /grav/(LICENSE\.txt|composer\.lock|composer\.json|nginx\.conf|web\.config|htaccess\.txt|\.htaccess) { return 403; }
    }
    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_pass  127.0.0.1:8502;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        # Se recomienda que memory_limit, post_max_size y
        # y upload_max_filesize tengan el mismo valor que 
        # client_max_body_size.
        fastcgi_param PHP_VALUE "memory_limit=128M \n upload_max_filesize=128M \n post_max_size=128M \n xdebug.max_nesting_level=512";
    }
}

Recargue servicio nginx para aplicar los cambios:

systemctl reload nginx

Instalación como directorio raíz del anfitrión virtual.

Descargar el fuente de Grav y descomprimir en un directorio que se pueda acceder desde Nginx. Ejemplo:

cd /home/nombreyapellido
wget https://github.com/getgrav/grav/releases/download/1.7.46/grav-admin-v1.7.46.zip
unzip grav-admin-v1.7.46.zip

Mueva contenido de grav-admin-v1.7.46 directamente dentro de public_html:

mv grav-admin/* /home/nombreyapellido/public_html/
mv grav_admin/.htaccess /home/nombreyapellido/public_html/
chown -R nombreyapellido:nombreyapellido /home/nombreyapellido/public_html/
restorecon -Rv /home/nombreyapellido/public_html/

Nginx requiere la siguiente configuración para location / en el anfitrión virtual:

    location / {
        index index.html index.htm index.php;
        try_files $uri $uri/ /index.php?$query_string;
        location ~* /(\.git|cache|bin|logs|backup|tests)/.*$ { return 403; }
        location ~* /(system|vendor)/.*\.(txt|xml|md|html|yaml|yml|php|pl|py|cgi|twig|sh|bat)$ { return 403; }
        location ~* /user/.*\.(txt|md|yaml|yml|php|pl|py|cgi|twig|sh|bat)$ { return 403; }
        location ~  /(LICENSE\.txt|composer\.lock|composer\.json|nginx\.conf|web\.config|htaccess\.txt|\.htaccess) { return 403; }
    }
    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_pass  127.0.0.1:8502;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PHP_VALUE "memory_limit=128M \n upload_max_filesize=128M \n post_max_size=128M \n xdebug.max_nesting_level=512";
    }

De modo que la configuración del anfitrión virtual sea similar a lo siguiente:

server {
    listen 443 http2 ssl;
    server_name nombreyapellido.net;
    root /home/nombreyapellido/public_html;
    access_log /var/log/nginx/nombreyapellido-access_log main;
    error_log /var/log/nginx/nombreyapellido-error_log notice;
    ssl_certificate /ruta/del/archivo/del/certificado.crt;
    ssl_certificate_key /ruta/del/archivo/de/firma.key;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers off;
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
    # Se recomienda que client_max_body_size tenga el mismo valor que
    # memory_limit, post_max_size y upload_max_filesize en la instancia
    # de PHP-FPM.
    client_max_body_size 128M;
    location / {
        index index.html index.htm index.php;
        try_files $uri $uri/ /index.php?$query_string;
        location ~* /(\.git|cache|bin|logs|backup|tests)/.*$ { return 403; }
        location ~* /(system|vendor)/.*\.(txt|xml|md|html|yaml|yml|php|pl|py|cgi|twig|sh|bat)$ { return 403; }
        location ~* /user/.*\.(txt|md|yaml|yml|php|pl|py|cgi|twig|sh|bat)$ { return 403; }
        location ~  /(LICENSE\.txt|composer\.lock|composer\.json|nginx\.conf|web\.config|htaccess\.txt|\.htaccess) { return 403; }
    }
    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_pass  127.0.0.1:8502;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        # Se recomienda que memory_limit, post_max_size y
        # y upload_max_filesize tengan el mismo valor que 
        # client_max_body_size.
        fastcgi_param PHP_VALUE "memory_limit=128M \n upload_max_filesize=128M \n post_max_size=128M \n xdebug.max_nesting_level=1024";
    }
}

Recargue servicio nginx para aplicar los cambios:

systemctl reload nginx

Configuración de PHP_FPM.

Ejecute lo siguiente para autorizar en SELinux que php-fpm pueda utilizar el puerto 8010:

semanage port -a -t http_port_t -p tcp 8010

Genere un nuevo archivo de configuración dentro de /etc/php-fpm.d/ denominado grav.conf:

vim /etc/php-fpm.d/grav.conf

Añada la siguiente configuración recomendada para php-fpm. Por favor, modifique a su conveniencia.

[grav]
user = nombreyapellido
group = nombreyapellido
listen = 127.0.0.1:8010
listen.allowed_clients = 127.0.0.1
pm = dynamic
pm.max_children = 9999
pm.start_servers = 1
pm.min_spare_servers = 1
pm.max_spare_servers = 5
php_admin_value[upload_tmp_dir] = /home/nombreyapellido/tmp
php_admin_value[session.save_path] = /home/nombreyapellido/tmp
php_value[expose_php] = Off
; Defina la zona horaria que le corresponda.
php_value[date.timezone] = America/Mexico_City
php_value[file_uploads] = On
php_value[max_execution_time] = 7200
php_value[request_terminate_timeout] = 300
php_value[max_input_time] = 180
php_value[max_input_vars] = 2000
php_value[output_buffering] = off

Genere el directorio /home/nombreyapellido/tmp:

mkdir -p /home/nombreyapellido/tmp
semanage fcontext -a -t httpd_sys_rw_content_t "/home/nombreyapellido/tmp"
semanage fcontext -a -t httpd_sys_rw_content_t "/home/nombreyapellido/tmp(/.*)?"
restorecon -Rv /home/nombreyapellido/tmp

Cambie la pertenencia del directorio /home/nombreyapellido/tmp al mismo usuario y grupo definidos para la instancia de PHP-FPM:

chown nombreyapellido:nombreyapellido /home/nombreyapellido/tmp

Reinicie el servicio php-fpm para aplicar los cambios:

systemctl restart php-fpm

Finalizando procedimientos.

Dependiendo de qué tipo de instalación realizó, acceda con navegador hacia https://nombreyapellido.net/grav/ o bien https://nombreyapellido.net. La instalación de Grav consiste en un único clic con el ratón y sólo requiere definir un usuario administrador, contraseña, su cuenta de correo electrónico y nombre para aparecer en pantalla. Grav está listo para usarse tras lo anterior.

Acceda hacia https://nombreyapellido.net/grav/admin o bien https://nombreyapellido.net/admin/ para personalizar el sitio.

grav-install-web

Administración.

Ejecute las operaciones con el mismo usuario con el que se esté ejecutando la instancia de php-fpm.

Grav puede ser administrado desde interfaz de intérprete de mandatos. Acceda hacia https://learn.getgrav.org/17/cli-console/grav-cli para más detalles.

Cambie al usuario regular que ejecuta la instancia de PHP-FPM:

su -l nombreyapellido

Acceda hacia el directorio donde esté instalado Grav:

cd /home/nombreyapellido/public_html/grav

O bien:

cd /home/nombreyapellido/public_html

Herramienta gpm.

Ejecute lo siguiente para mostrar una lista de todos los componentes de Grav instalados y disponibles en el almacén de software principal:

php bin/gpm index

Instalación de complementos y temas.

Instale el complemento para incluir fácilmente videos de Youtube en las publicaciones:

php bin/gpm install youtube

Instale el complemento para incluir resaltado de sintaxis en las publicaciones que incluyan ejemplos de código o ejemplos de configuraciones:

php bin/gpm install highlight

Puede instalar temas del mismo modo. Ejemplo de instalación del tema solarize:

php bin/gpm install solarize

Actualización de Grav y componentes.

Ejecute lo siguiente para actualizar Grav:

php bin/gpm self-upgrade --all-yes

Ejecute lo siguiente para actualizar todos los complementos y temas:

php bin/gpm update --all-yes

Herramienta grav.

Ejecute el programa grav con la opción cache para limpiar todos el caché de Grav:

php bin/grav cache

Ejecute lo siguiente para limpiar todos los caché de Grav junto con archivos compilados y caché de twig y doctrine:

php bin/grav cache --all

Ejecute lo siguiente para generar un respaldo de la instalación de Grav:

php bin/grav backup

Ejecute lo siguiente para ejecutar de inmediato las tareas programadas pendientes en Grav:

php bin/grav scheduler

Extendiendo las capacidades de Grav.

Grav tiene una comunidad muy amistosa, entusiasta y en crecimiento.