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-2022 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.
Grav CMS es una plataforma Web rápida, simple y flexible. La instalación es simple: sólo extraer el archivo ZIP, accede 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.
Sitio de Internet: https://getgrav.org
Este documento asumirá que:
nombreyapellido
y un grupo con el mismo nombre.8010
para la instancia de PHP-FPM que será utilizada.nombreyapellido
.nombreyapellido.net
para los ejemplos.nombreyapellido.net
y con directorio raíz en /home/nombreyapellido/public_html
.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
Genere el usuario nombreyapellido
:
useradd -c "Nombre y Apellido" nombreyapellido
passwd nombreyapellido
Genere el directorio /home/nombreyapellido/public_html
y asigne pertenencia 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
Descargar 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.37.1/grav-admin-v1.7.37.1.zip
unzip grav-admin-v1.7.37.1.zip
mv grav-admin public_html/grav
chown -R nombreyapellido: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
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.37.1/grav-admin-v1.7.37.1.zip
unzip grav-admin-v1.7.37.1.zip
Mueva contenido de grav-admin-v1.7.37.1
directamente dentro de public_html
:
mv grav-admin/* public_html/
mv grav_admin/.htaccess public_html/
chown -R nombreyapellido: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=512";
}
}
Recargue servicio nginx
para aplicar los cambios:
systemctl reload nginx
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
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
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.
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
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
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
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
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
Grav tiene una comunidad muy amistosa, entusiasta y en crecimiento.