Grav: escribe un blog sin base de datos

GRAV CMS

Los gestores habituales para crear blogs, conocidos como CMS (sistema de gestión de contenidos, del inglés Content Management System), en su gran mayoría basan su funcionamiento interno en consultas que crean conexiones a una base de datos. Esos continuos accesos a una base de datos suponen un gran consumo de recursos del servidor que aloja nuestro blog y a veces conllevan que nuestra web resulte pesada y tarde en cargar.

Para resolver esto, muchos proyectos han desarrollado gestores de contenido que utilizando bibliotecas modernas buscan ser lo más ligeros y rápidos posible. Es el caso de Bolt (Bolt, una buena alternativa a WP: impresiones sobre el sofisticado, ligero y simple CMS) que usa SQLite (aunque también es capaz de usar MySQL o PostgreSQL).

Otros proyectos han ido un poco más allá y han abandonado totalmente las bases de datos. Es precisamente lo que ofrecen los llamados Flat File CMS o CMS basados en archivos (File based CMS en inglés).

En principio, estos CMS se orientan hacia la velocidad, la estabilidad y la sencillez de uso, pero todo en la vida tiene sus pros y sus contras:

  • Velocidad. No hay que buscar los datos en ninguna base de datos, simplemente se accede a archivos que se guardan de una forma lógica dentro de carpetas. No obstante, hay que ser conscientes de que no cuentan con los sistemas de indexación propios de las bases de datos que agilizan el resultado de cualquier búsqueda. Sin una base de datos, la velocidad depende del servidor y del número de archivos y carpetas.
  • Estabilidad. La carga sólo depende del servidor web y nunca más una web tendrá una caída por desconexión con la base de datos. Son sólo archivos que no saben de tablas corruptas, lo que también redunda en una mayor seguridad. A su vez, estos sistemas facilitan las copias de respaldo: tan fácil como copiar y pegar carpetas y archivos. Y de la misma manera cambiamos de hosting o pasamos una web de un sitio a otro.
  • Usabilidad. La instalación suele ser sencilla, muchas veces limitada a descargar los archivos en el servidor y listo, aunque en algunos casos puede ser necesario recurrir a la línea de comandos vía terminal, lo que puede echar para atrás a muchos usuarios. Este tipo de usuario final posiblemente también eche de menos una interfaz WYSIWYG llena de botones para editar sus posts o una interminable colección de plugins. Y aunque creo que el proceso de aprendizaje no es complicado, hay que asumir que aventurarse en este tipo de CMS requiere de ganas para aprender cosas nuevas, aunque la habituación puede ser rápida. Por ejemplo, podemos enfrentarnos al lenguaje Markdown por primera vez o encontrar un sistema de plantillas que inicialmente no reconocemos aunque pronto podemos entender su estructura lógica (especialmente si se ha manejado PHP previamente).

En este punto, cuando ya tenía el gusanillo por probar cosas nuevas y he tenido distintas experiencias con blogs pesados que devoraban recursos, me puse a indagar un poco en la red y a comparar distintas opciones. Pero antes de nada, comentar mi punto de partida por si puede servir de referencia a otros: estoy habituado a plataformas de blog tipo WordPress con editor WYSIWYG, con numerosos plugins y soluciones en la red a cualquier inconveniente que encuentro, aunque también he probado otros sistemas más minotitarios como OctoPress; autodidacta en programación he hecho mis pinitos con HTML, CSS, JavaScript y Python, aunque no con PHP; hace tiempo toqué algo de Markdown; suelo huir de las consolas y a ser posible prefiero interfaces en castellano.

En la web FlatPhile (en inglés) enumeran unos cuantos CMS sin base de datos. Finalmente, después de revisar algunas comparativas y experiencias de otros usuarios, valorando la funcionalidad dinámica para trabajar con blogs, el rendimiento, el ritmo de desarrollo, la documentación, el contenido auxiliar (extensiones: temas, plugins…), la participación de una comunidad activa y el tipo de licencia, me he decantado por Grav, uno de los mejores valorados por los usuarios en Github (Adiós bases de datos, construyendo sitios rápidos con Grav).

GRAV, hay blogs más allá de WordPress

Como digo, Grav ha sido una elección personal basada únicamente en referencias y no en la experiencia directa y comparada de varios CMS de este tipo, pero eso lo dejo para más adelante.

Grav es Open Source y todo el código está disponible en GitHub. Está basado en PHP, funcionando a través de archivos YAML para su configuración y utiliza el sistema de plantillas TWIG (si no te suenan estos términos, no te preocupes, luego el código que verás en los archivos es fácilmente reconocible). Posee un sistema automático de almacenamiento en caché, URLs legibles y SEO friendly. En cuanto al contenido, cuenta con un procesamiento automático de imágenes y maneja el contenido en Markdown (y HTML), y tiene soporte multi-idioma, entre otras cosas (más características en Grav features, en inglés). Un par de ejemplos de webs realizadas con Grav: timovolz y wearewondrous.

Antes de descargarlo comprueba que tu servidor cuenta con PHP versión 5.5.9 o superior (y que se puede habilitar), es quizá el único y más importante requisito que realmente tendremos que cumplir para su instalación. Ocasionalmente es posible que tengas que habilitar algún módulo de PHP que no esté activado por defecto (ver requirements, en inglés), lo que se hace desde el Panel de Control del servidor. Para hacer pruebas, entre los servidores gratuitos y sin publicidad que conozco (Hostings gratis sin publicidad) que cumplen con esta versión de PHP están: x10hosting, Skylium y Hostinger (en éstos dos últimos lo he instalado sin problemas).

La instalación la podemos hacer básicamente de dos maneras (ver más métodos de instalación en Installation, en inglés):

  1. Bajarlo desde GetGrav (recomiendo la opción Grav Core + Admin Plugin), extraer el archivo ZIP y copiarlo en nuestro servidor (no olvides los archivos ocultos como .htaccess).
  2. Desde el Panel de Control de nuestro servidor con el script de autoinstalación Softaculous (mira esta demo: utiliza el buscador en la esquina superior derecha para encontrar Grav).

Refresca la página de tu navegador y ¡ya está! Si no ves la página inicial de Grav es posible que tengas que borrar la caché de tu navegador. Si la instalación ha sido existosa verás la página por defecto de Grav, similar a ésta:

GRAV install

También es posible que aparezca una página que advierte de algún problema durante el proceso de instalación o por falta de algún requisito, que hay que subsanar y volver a cargar la página para comprobar que se ha resuelto.

En cualquier caso, como decía antes, para usuarios que como yo que huimos de la línea de comandos, es conveniente (aunque no imprescindible) instalar simultáneamente el plugin Admin. Éste proporciona una interfaz sencilla e intuitiva para realizar la configuración y facilita la creación de contenidos directamente desde el panel (aunque una vez habituado, es facilísimo crear nuevos contenidos desde cualquier editor de texto y copiarlos en sus carpetas correspondientes).

Otra cosa que recomiendo antes de seguir, es revisar el tutorial básico con tranquilidad y dedicándole algo de tiempo, cosa que yo no he hecho (a veces me gusta aprender a base de tortazos), por lo que he tenido que recurrir a él en repetidas ocasiones. Aunque está en inglés creo que la información es bastante clara.

La primera vez que entramos en el Panel de Administración (habitualmente desde http://miweb.com/admin), recomiendo ir a la cuenta del administrador (arriba a la derecha, donde está vuestro icono de admin, avatar que se sincroniza con vuestra cuenta de gravatar, si es que la tenéis), para cambiar el nombre de usuario (que no sea admin, por mayor seguridad) y establecer el lenguaje en vuestro idioma. Recuerda guardar los cambios (arriba a la derecha) y salir para volver a entrar con tu nuevo usuario: http://miweb.com/nuevousuario.

El panel del admin nos ofrece varias pestañas básicas (que se pueden ampliar con algunos plugins):

  • Panel. Desde aquí podemos limpiar la caché y buscar actualizaciones (arriba a la derecha). Las secciones de mantenimiento y estadísticas nos dan acceso rápido a información importante acerca del sitio. El cuadro de mantenimiento nos recuerda si el sistema está actualizado y el último respaldo realizado. Otro cuadro nos muestra de un vistazo los datos de tráfico, separando los visitantes del último día, la última semana (en un gráfico de barras por días de la semana) y el último mes. También nos muestra las últimas páginas creadas o actualizadas y un botón de acceso al administrador de páginas.
  • Configuración. Nos permite cambiar muchos ajustes importantes del sistema (ver Configuration Site, en inglés) y valores del sitio. También ofrece una amplísima información sobre nuestro PHP y su configuración.
  • Páginas. Desde aquí creamos el contenido de nuestro sitio. Podemos crear páginas o módulos (secciones para páginas modulares). Aunque lo podemos cambiar después, al crear una página podemos indicar qué relación tiene con otras páginas (si tiene una página padre) y qué tipo de página es (página por defecto, página modular, blog, ítem de un blog, formulario, página de error…).
  • Plugins. Inicialmente nos muestra los plugins instalados y si están activados. También nos permite buscar actualizaciones y agregar nuevos plugins.
  • Temas. Muestra el tema activo y, si hubiera, los temas disponibles. También permite agregar nuevos temas.

Haciendo clic en cualquier plugin y en el tema activo, podemos ajustar las opciones de configuración (si las tiene), podemos activarlo y desactivarlo y desinstalarlo.

GRAV PLUGIN ADMIN

Los plugins y temas también están disponibles desde la página de descargas de Grav, y los podemos instalar manualmente copiando su contenido en la carpeta correspondiente de plugins (vía FTP, por ejemplo). A un usuario de WordPress le puede dar cierta risa ver que hay 57 temas y 105 plugins (frente a los 3.824 temas y 43.655 plugins que hay en el directorio de WordPress), pero aunque las extensiones de Grav no pueden competir con un sistema tan veterano y popular como WordPress, creo que lo importante es si esas extensiones cumplen con nuestras necesidades y son eficientes en su cometido.

Además de los plugins y los temas, en la página de descargas verás disponibles lo que llaman skeleton, que son paquetes que además del código de Grav contienen una configuración específica, temas y plugins preinstalados para facilitar el camino a los que se inician con Grav. Por ejemplo, si has instalado la opción Grav Core + Admin Plugin que te recomendé, habrás comprobado que vienen algunos plugins instalados (login, problems, error..) y un tema (Antimatter), que es una buena manera de familiarizarse con Grav.

Cuando he estado creando contenido de prueba y después he intentado instalar algunos temas, he tenido problemas y se han desconfigurado algunas cosas (por ejemplo, no todos los temas reconocen los mismos tipos de páginas), por lo que que quizá es recomendable instalar Grav con un skeleton que contenga el tema elegido y no estar cambiando de tema una vez que tengamos ajustada nuestra configuración y contenido creado. Personalmente, creo que el tema que viene por defecto es el mejor que he probado y el más flexible para distintos tipos de contenidos. Por cierto, cuando tocamos algo que provoca un desajuste grave y el sitio no responde, aparece una ventana a la que es importante prestar atención porque explica el proceso donde se ha detenido (qué produce el error) para que lo subsanemos, bien retrocediendo con el navegador y volviendo a cambiar lo que hemos tocado en el panel, o bien vía FTP.

Objetivo: clonar Pósits

Después de este primer contacto con Grav, he pensado que la mejor manera de ponerlo a prueba es clonando este mismo blog. Por tanto, mi objetivo es hacer un blog a partir de Grav que contenga el mismo contenido (las mismas entradas) y las mismas funciones que éste y analizar y comparar el proceso de creación y el rendimiento de ambos. El clon experimental de Pósits lo puedes ver en Pósits con Grav.

En esta comparación hay que tener en cuanta, al menos, dos consideraciones:

  • Soy usuario habitual de WordPress pero recién llegado a Grav, por lo que muchas deficiencias no son achacables a Grav sino a mi propia inexperiencia con este sistema.
  • En cuanto a la comparación de rendimiento (cuando las realice), hay que tener en cuenta que cada sitio está alojado en su propio servidor, por lo que las posibles diferencias entre ellos no son explicadas únicamente por distintos CMS, sino que juegan un papel importante las propias capacidades de cada hosting.

Otros aspectos a valorar en la comparativa serán la respuesta de adaptabilidad a distintos tamaños de pantalla y la experiencia subjetiva del lector en cada uno de los blogs (te animo a que compartas tu experiencia personal en los comentarios).

Para crear una estructura similar a la de este blog, desde el panel de Grav ha sido sencillo crear una primera página con estructura de blog (configurada como página de inicio) y páginas hijas con estructura o plantilla de ítems de blog. Estas entradas se clasifican con facilidad en categorías y etiquetas, y se les añade información SEO y otros ajustes (fecha de publicación programada, plantilla, sumario, imagen de encabezado…).

En cuanto al contenido, he intentado siempre que he podido limitarme a lenguaje Markdown. Por ejemplo, podemos comparar varios extractos de las mismas entradas en un blog y en otro, y ver lo legible que resulta Markdown:

TABLA CON MARKDOWN

[text]

| Grupo Timofónica / Vomistar | Grupo HOrrange | Grupo Robafone |
| ————————— | ————– | ————– |
| Movistar                    | Orange         | Vodafone       |
| Tuenti                      | Jazztel        | Ono            |
|                             | Jazzcard Móvil | Lowi           |
|                             | Simyo          |                |
|                             | Amena          |                |

[/text]

TABLA CON HTML

[html]<table>
<tbody>
<tr>
<th>Grupo Timofónica / Vomistar</th>
<th>Grupo HOrrange</th>
<th>Grupo Robafone</th>
</tr>
<tr>
<td>Movistar</td>
<td>Orange</td>
<td>Vodafone</td>
</tr>
<tr>
<td>Tuenti</td>
<td>Jazztel</td>
<td>Ono</td>
</tr>
<tr>
<td></td>
<td>Jazzcard Móvil</td>
<td>Lowi</td>
</tr>
<tr>
<td></td>
<td>Simyo</td>
<td></td>
</tr>
<tr>
<td></td>
<td>Amena</td>
<td></td>
</tr>
</tbody>
</table> [/html]

​ENLACES CON MARKDOWN

[text]
[Pepephone]. Red móvil bajo cobertura de Movistar y ADSL sin línea telefónica con la red de Vodafone.
[Eticom]. Servicios de telefonía móvil (cobertura Orange) y acceso a Internet (red Vodafone) con forma de proyecto colectivo.
[Suop]. Dentro de la corriente del consumo colaborativo, operador móvil que usa le red de Orange.
[Másmovil]. Telefonia móvil bajo cobertura de Orange e internet (ADSL y fibra) prestado por Jazztel (Orange).​
[República Móvil]. Otra bajo la red de Orange.​
[Yoigo]. Operador de telefonía móvil con red propia y también usa la cobertura de Movistar, aunque por ello técnicamente no es una operadora móvil virtual. Recientemente ha dejado de comercializar Yoigo Fusión (fijo+internet+móvil).

[Pepephone]: https://www.pepephone.com/
[Eticom]: https://eticom.coop/es/
[Suop]: https://www.suop.es
[Másmovil]: https://masmovil.es
[República Móvil]: https://www.republicamovil.es/es/
[Yoigo]: http://www.yoigo.com/
[/text]

ENLACES CON HTML

[html]
<p><a href="https://www.pepephone.com/">Pepephone</a>. Red móvil bajo cobertura de Movistar y ADSL sin línea telefónica con la red de Vodafone.</p>
<p><a href="https://eticom.coop/es/">Eticom</a>. Servicios de telefonía móvil (cobertura Orange) y acceso a Internet (red Vodafone) con forma de proyecto colectivo.</p>
<p><a href="https://www.suop.es">Suop</a>. Dentro de la corriente del consumo colaborativo, operador móvil que usa le red de Orange.</p>
<p><a href="https://masmovil.es">Másmovil</a>. Telefonia móvil bajo cobertura de Orange e internet (ADSL y fibra) prestado por Jazztel (Orange).​</p>
<p><a href="https://www.republicamovil.es/es/">República Móvil</a>. Otra bajo la red de Orange.</p>
<p><a href="http://www.yoigo.com/">Yoigo</a>. Operador de telefonía móvil con red propia y también usa la cobertura de Movistar, aunque por ello técnicamente no es una operadora móvil virtual. Recientemente ha dejado de comercializar Yoigo Fusión (fijo+internet+móvil).</p>
[/html]

Hay disponibles muchos editores de Markdown. En ubuntu tenemos ReText, aunque la mayoría de las veces he utilizado un editor de texto simple, como Pluma. En internet encontrarás muchos tutoriales de Markdown e incluso algunos editores online con conversores en vivo para practicar.

Por cierto, como no me apetecía reescribir las mismas entradas, he recurrido a una curiosa aplicación, Pandoc, también disponible en los repositorios de Ubuntu, que sirve para convertir archivos a distintos formatos.

Pero no se trata sólo de copiar contenido (texto y contenido multimedia), también de reproducir las mismas funciones del blog original: caja de búsqueda, buscar por categorías, entradas recientes, populares y relacionadas, formulario de contacto, comentarios, RSS, newsletter, google adsense, google analytics… Manos a la obra.

De momento, las funciones que en WordPress realizan los plugins All In One SEO Pack, All In One WP Security, UpdraftPlus – Backup/Restore, WP Fastest Cache y WP-Sweep (o WP-Optimize), ya están cubiertas en Grav sin necesidad de plugins.

Los plugins que he necesitado para el resto de tareas en Grav han sido: SimpleSearch, Taxonomy List, Sitemap, Related Pages, reCAPTCHA Contact, Pagination, Google Analytics, Feed, Email, Assets. Aunque hay un pluging específico (Adsense) para activar la publicidad de Google, he optado por insertar directamente el código en la plantilla.

Hasta ahora el principal problema que no termino de resolver como me gustaría ha sido el de habilitar los comentarios en las entradas. Hay un plugin específico para ello (Comments), aunque no ha terminado de funcionarme (no sé si el problema es lo que yo hago mal o el plugin, que todavía está en fase beta). Una alternativa es utilizar otro plugin, JSComments, que sirve para habilitar recursos externos de comentarios, incluyendo Disqus, IntenseDebate, Facebook, y Muut, pero tampoco me ha funcionado con Disqus. Finalmente he copiado directamente el código de Disqus en la plantilla de las entradas y eso ha funcionado, aunque considero que es una solución provisional hasta que consiga hacer funcionar el sistema interno de comentarios.

Otros plugins que no he conseguido hacer funcionar correctamente han sido Archives y Archive Plus, que crean enlaces a las entradas agrupándolas por meses y años.

Otro problema donde me he atascado ha sido en la traducción al español del formato de fecha, concretamente de los meses, pero sigo en ello… por experiencia sé que a veces la solución cuesta encontrarla porque es demasiado obvia.

Considero que para un recién llegado a Grav, han sido más los avances que los reveses. Puedes seguir los progresos del clon Pósits con Grav, pero no te sorprenda que alguna vez se vean cosas raras porque todavía es completamente experimental y lo sigo usando como terreno para prácticas. Como lector, ¿cuál te gusta más, el original con WordPress (éste) o el clon con Grav?

3 Replies to “Grav: escribe un blog sin base de datos”

  1. Pingback: Bitacoras.com
  2. Buenas,

    Grav me resulta muy interesante. La copia que he visto (de un rápido vistazo) está bastante lograda. Lo que me gustaria saber es si ese markdown puede desactivarse de algun modo para trabajar con el HTML al que ya tan acostumbrado estoy. ¿Sabes si cuenta con esa opción?

    1. Si no estás acostumbrado a markdown o no te convence, puedes utilizar perfectamente código html (no se trata de desactivarlo, se trata de usarlo o no). Quizá te recomendaría escribir desde el panel de Admin (plugin básico de Grav), que te facilitará mucho la tarea (con su propio editor de texto, escribirás igual que en WordPress). Saludos.

Responder a Pósits Cancelar la respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *