Cómo instalar Flarum en Rocky Linux y poner en marcha tu foro

Actualizada:

Si quieres hacerte con una buena pieza de software para crear tu nuevo foro online, ahora mismo tienes una opción muy interesante con Flarum (que me perdone Discourse y su funcionamiento con Docker). Flarum es un programa Open Source que puedes instalar en tu servidor y crear tu nuevo foro online en apneas unas horas.

¿Por qué deberías usar Flarum? Bueno, después de muchos años, ya está en una versión estable y está a punto de llegar a la versión 2. Es gratis, es sencillo de usar y dispone de muchas extensiones para personalizarlo. Y todo ello se puede instalar de forma sencilla en un servidor con Apache, MariaDB/MySQL y PHP. Y lo mejor de todo es que tiene una interfaz moderna, perfecta para usar de un móvil o tablet, no como las que te puede encontrar con foros creados con phpBB, MyBB o SMF.

¿Qué necesitas en tu servidor para instalar Flarum?

Necesitas Composer

Lo primero, tienes que instalar PHP Composer, algo que ya te he contado cómo hacer. Es muy sencillo. Yo lo he hecho en Rocky Linux. Te puedo asegurar que es más sencillo de gestionar PHP Composer que Docker (por eso no he instalado Discourse). Con composer vas a poder instalar Flarum, actualizarlo y gestionar sus extensiones. Todo ello gracias a un archivo llamado composer.json, donde tienes todos los datos de tu proyecto.

¿Qué más necesitas?

  • Apache (con mod_rewrite habilitado) o Nginx. Yo tengo Apache.
  • PHP 7.3+ con las siguientes extensiones: curl, dom, fileinfo, gd, json, mbstring, openssl, pdo_mysql, tokenizer, zip. Mejor que tengas instalado ya una versión de PHP superior, como por ejemplo PHP 8.2 o 8.3.
  • MySQL 5.6+/8.0.23+ o MariaDB 10.0.5+ como bases de datos.
  • Poder enviar y recibir correos electrónicos para gestionar a los usuarios del foro. Puedes usar Postfix instalándolo en tu servidor, por ejemplo, pero también proveedores de correos externos como Mailgun o Amazon SES que tienen planes gratuitos.
  • Acceso SSH (línea de comandos) para ejecutar comandos de mantenimiento de software.

Cómo puedes instalar Flarum en Rocky Linux

Te lo cuento específicamente con Rocky Linux, pero sirve igual para Alma Linux o cualquier otra distribución RHEL. Evidentemente, también lo puedes instalar en Ubuntu.

Y aquí llega mi pequeño truco. Te recomiendo que instales Flarum descomprimido el paquete que te proporcionan en la web de Flarum, y no con el comando Composer. Ahora te cuento por qué.

  • ¿Qué pasa si usas el comando de composer? Qué vas a instalar la versión con carpeta Public, y si quieres usar Flarum con el método tradicional (protegiendo carpetas y archivos con .htaccess), vas a tener que mover archivos y cambiar rutas en varios puntos de la instalación para que todo funcione correctamente.
  • Si usas el comando: composer create-project flarum/flarum . tendrás que asegurarte de que tu webroot esté configurado en /ruta/a/foro/public, y configurar la reescritura de URL.

En mi caso, como estoy usando PHP 8.2, he elegido el paquete: flarum-v1.x-no-public-dir-php8.2.tar.gz. Solo tienes que tener cuidado con elegir el paquete correspondiente a tu versión de PHP y decidir si quieres la versión de Flarum con carpeta public o no… ¿Y eso qué es? Bueno. Tienes dos opciones para instalar Flarum:

Con carpeta Public. Todas las cosas que se deben mostrar en tu carpeta donde publicas los archivos que se ven en tu dominio, están en esa carpeta. Es decir. Es lo único que tiene que aparecer en tu carpeta public_html. El resto de Flarum está en una localización fuera de esa carpeta. Es un enfoque más moderno, pero requiere que cambies más cosas en tu servidor, como por ejemplo:

<Directory "/ruta/a/flarum/public">
    AllowOverride All
</Directory>

Sin carpeta Public. La forma que he elegido yo. Más tradicional. Todo está en tu carpeta public_html y los archivos y carpetas sensibles están protegidos mediante un archivo .htaccess.

Si ya lo tienes claro, descárgate el archivo sin carpeta public y súbelo a la carpeta raíz de tu dominio, normalmente en /home/tudominio/public_html. Cuando lo hayas subido a tu servidor, descomprímelo.

Ahora, simplemente tienes que visitar tú nombrededominio.com y empezar a configurar Flarum. Si hay algún problema, como que Flarum no tiene acceso a determinadas carpetas por problemas de permisos, te lo dirá nada más meterte en tu navegador y poner la url. Si ese es el caso, solo tienes que cambiar el propietario de tus carpetas y archivos al usuario de tu dominio en tu servidor, el que se usa para Apache (por lo menos así es en mi configuración con Apache y PHP-FPM). Puedes usar estos comandos:

chmod 755 -R /ruta/directorio
chown -R TuUsuario:TuUsuario /ruta/directorio

Tampoco está de más, que compruebes que tus archivos importantes como config.php tiene permisos 644. O que el .htaccess tiene este aspecto (sobre todo la parte en negrita):

<IfModule mod_rewrite.c>
  RewriteEngine on

  # Ensure the Authorization HTTP header is available to PHP
  RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

  # Uncomment the following lines if you are not using a `public` directory
  # to prevent sensitive resources from being exposed.
  RewriteRule /\.git / [F,L]
  RewriteRule ^auth\.json$ / [F,L]
  RewriteRule ^composer\.(lock|json)$ / [F,L]
  RewriteRule ^config.php$ / [F,L]
  RewriteRule ^flarum$ / [F,L]
  RewriteRule ^storage/(.*)?$ / [F,L]
  RewriteRule ^vendor/(.*)?$ / [F,L]

  # Pass requests that don't refer directly to files in the filesystem to index.php
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule ^ index.php [QSA,L]
</IfModule>

# Disable directory listings
Options -Indexes

# MultiViews can mess up our rewriting scheme
Options -MultiViews

# The following directives are based on best practices from H5BP Apache Server Configs
# https://github.com/h5bp/server-configs-apache

# Expire rules for static content
<IfModule mod_expires.c>
  ExpiresActive on
  ExpiresDefault                                      "access plus 1 month"
  ExpiresByType text/css                              "access plus 1 year"
  ExpiresByType application/atom+xml                  "access plus 1 hour"
  ExpiresByType application/rdf+xml                   "access plus 1 hour"
  ExpiresByType application/rss+xml                   "access plus 1 hour"
  ExpiresByType application/json                      "access plus 0 seconds"
  ExpiresByType application/ld+json                   "access plus 0 seconds"
  ExpiresByType application/schema+json               "access plus 0 seconds"
  ExpiresByType application/vnd.geo+json              "access plus 0 seconds"
  ExpiresByType application/vnd.api+json              "access plus 0 seconds"
  ExpiresByType application/xml                       "access plus 0 seconds"
  ExpiresByType text/calendar                         "access plus 0 seconds"
  ExpiresByType text/xml                              "access plus 0 seconds"
  ExpiresByType image/vnd.microsoft.icon              "access plus 1 week"
  ExpiresByType image/x-icon                          "access plus 1 week"
  ExpiresByType text/html                             "access plus 0 seconds"
  ExpiresByType application/javascript                "access plus 1 year"
  ExpiresByType application/x-javascript              "access plus 1 year"
  ExpiresByType text/javascript                       "access plus 1 year"
  ExpiresByType application/manifest+json             "access plus 1 week"
  ExpiresByType application/x-web-app-manifest+json   "access plus 0 seconds"
  ExpiresByType text/cache-manifest                   "access plus 0 seconds"
  ExpiresByType text/markdown                         "access plus 0 seconds"
  ExpiresByType audio/ogg                             "access plus 1 month"
  ExpiresByType image/bmp                             "access plus 1 month"
  ExpiresByType image/gif                             "access plus 1 month"
  ExpiresByType image/jpeg                            "access plus 1 month"
  ExpiresByType image/png                             "access plus 1 month"
  ExpiresByType image/svg+xml                         "access plus 1 month"
  ExpiresByType image/webp                            "access plus 1 month"
  ExpiresByType video/mp4                             "access plus 1 month"
  ExpiresByType video/ogg                             "access plus 1 month"
  ExpiresByType video/webm                            "access plus 1 month"
  ExpiresByType application/wasm                      "access plus 1 year"
  ExpiresByType font/collection                       "access plus 1 month"
  ExpiresByType application/vnd.ms-fontobject         "access plus 1 month"
  ExpiresByType font/eot                              "access plus 1 month"
  ExpiresByType font/opentype                         "access plus 1 month"
  ExpiresByType font/otf                              "access plus 1 month"
  ExpiresByType application/x-font-ttf                "access plus 1 month"
  ExpiresByType font/ttf                              "access plus 1 month"
  ExpiresByType application/font-woff                 "access plus 1 month"
  ExpiresByType application/x-font-woff               "access plus 1 month"
  ExpiresByType font/woff                             "access plus 1 month"
  ExpiresByType application/font-woff2                "access plus 1 month"
  ExpiresByType font/woff2                            "access plus 1 month"
  ExpiresByType text/x-cross-domain-policy            "access plus 1 week"
</IfModule>

# Gzip compression
<IfModule mod_deflate.c>
  <IfModule mod_filter.c>
    AddOutputFilterByType DEFLATE "application/atom+xml" \
                                  "application/javascript" \
                                  "application/json" \
                                  "application/ld+json" \
                                  "application/manifest+json" \
                                  "application/rdf+xml" \
                                  "application/rss+xml" \
                                  "application/schema+json" \
                                  "application/vnd.geo+json" \
                                  "application/vnd.ms-fontobject" \
                                  "application/wasm" \
                                  "application/x-font-ttf" \
                                  "application/x-javascript" \
                                  "application/x-web-app-manifest+json" \
                                  "application/xhtml+xml" \
                                  "application/xml" \
                                  "font/collection" \
                                  "font/eot" \
                                  "font/opentype" \
                                  "font/otf" \
                                  "font/ttf" \
                                  "image/bmp" \
                                  "image/svg+xml" \
                                  "image/vnd.microsoft.icon" \
                                  "image/x-icon" \
                                  "text/cache-manifest" \
                                  "text/calendar" \
                                  "text/css" \
                                  "text/html" \
                                  "text/javascript" \
                                  "text/plain" \
                                  "text/markdown" \
                                  "text/vcard" \
                                  "text/vnd.rim.location.xloc" \
                                  "text/vtt" \
                                  "text/x-component" \
                                  "text/x-cross-domain-policy" \
                                  "text/xml"
    </IfModule>
</IfModule>

# Fix for https://httpoxy.org vulnerability
<IfModule mod_headers.c>
  RequestHeader unset Proxy
</IfModule>

Vale. Cuando tienes todo correcto, verás la única pantalla que necesitas para configurar Flarum en tu navegador:

Pantalla de instalación del foro Flarum en Rocky Linux.

Tienes que poner un título a tu foro (luego se puede cambiar), elegir nombre de usuario de administrador junto con su password y el email. Y, tienes que haber creado previamente una base de datos y necesitas conocer su nombre, usuario, password. Lo pones en el formulario. Mejor no pongas nada en Table Prefix. Yo he creado esa base de datos con mi panel Virtualmin, pero puedes hacerlo en la línea de comandos con:

sudo mysql -u root -p
CREATE DATABASE nombre_de_tu_base_de_datos;
CREATE USER 'nombre_de_tu_usuario'@'localhost' IDENTIFIED BY 'tu_contraseña';
GRANT ALL PRIVILEGES ON nombre_de_tu_base_de_datos.* TO 'nombre_de_tu_usuario'@'localhost';
FLUSH PRIVILEGES;
EXIT;

Si has puesto los datos correctos de tu base de datos, te saldrá una pantalla como esta:

Pantalla de inicio de tu nuevo foro en Flarum

Si pinchas en tu nombre de usuario arriba a la derecha, podrás ver el link al panel de administración para empezar la configuración del foro a tu gusto, incluyendo la posibilidad de ver extensiones instaladas, cambiar el tema y crear usuarios.

Más cosas importantes que tienes que hacer

Las mejores extensiones de Flarum

Las extensiones son como los plugins de WordPress. Le dan funcionalidades extra al foro. Estas son las que he instalado yo (muchas de ellas vienen por defecto en la instalación, otras no):

Las mejores extensiones de Flarum
  1. Akismet: Integración con el servicio Akismet para detectar y filtrar automáticamente el spam en los foros. Necesitas un número de API.
  2. Approval: Permite que las publicaciones y discusiones sean aprobadas por un moderador antes de ser visibles públicamente.
  3. BBCode: Añade soporte para BBCode, un lenguaje de marcado simple utilizado en muchos foros de discusión.
  4. Emoji: Permite a los usuarios insertar emojis en sus publicaciones usando una sintaxis de texto corto.
  5. Extension Manager: Proporciona una interfaz para gestionar (instalar, activar, desactivar, actualizar) otras extensiones de Flarum.
  6. Flags: Permite a los usuarios marcar publicaciones para que los moderadores las revisen.
  7. FoF Anti Spam: Conjunto de herramientas para prevenir y combatir el spam en el foro.
  8. FoF Best Answer: Permite a los usuarios marcar una respuesta como la «mejor respuesta» en discusiones de tipo pregunta.
  9. FoF Cookie Consent: Añade un aviso de consentimiento de cookies en cumplimiento con la normativa GDPR.
  10. FoF Gamification: Añade un sistema de gamificación con puntos y rankings para fomentar la participación.
  11. FoF Links: Permite añadir enlaces personalizados en la navegación principal del foro.
  12. FoF Pages: Permite crear páginas estáticas personalizadas dentro del foro.
  13. FoF Sitemap: Genera un sitemap XML para mejorar el SEO del foro.
  14. FoF Terms: Permite mostrar y requerir la aceptación de términos y condiciones personalizados.
  15. FoF Upload: Permite a los usuarios subir archivos y gestionarlos en sus publicaciones.
  16. FoF User Bio: Añade un campo de biografía en el perfil de los usuarios.
  17. Likes: Permite a los usuarios dar «me gusta» a las publicaciones.
  18. Lock: Permite a los moderadores bloquear discusiones para evitar nuevas respuestas.
  19. Markdown: Añade soporte para Markdown, un lenguaje de marcado ligero para formatear texto.
  20. Mentions: Permite mencionar a otros usuarios en publicaciones usando @nombre_usuario.
  21. Nicknames: Permite a los usuarios establecer y mostrar apodos en lugar de sus nombres de usuario.
  22. SEO: Añade varias mejoras SEO para optimizar el foro en motores de búsqueda.
  23. Spam prevention: Herramientas adicionales para la prevención de spam.
  24. Statistics: Muestra estadísticas detalladas del foro, como el número de usuarios, discusiones y publicaciones.
  25. Sticky: Permite fijar discusiones importantes en la parte superior de las listas de discusiones.
  26. Subscriptions: Permite a los usuarios suscribirse a discusiones y recibir notificaciones sobre nuevas respuestas.
  27. Suspend: Permite a los moderadores suspender a usuarios, impidiéndoles publicar y participar en el foro.
  28. Tags: Añade un sistema de etiquetado para organizar discusiones por temas.
  29. Turnstile: Integración con el servicio de CAPTCHA de Cloudflare para proteger el foro contra bots. Necesitas estar dado de alta en Cloudflare y usar su API. Aparece en la ventana de registro.

¿Cómo las puedes instalar y desinstalar? Te vas a https://flarum.org/extensions y tienes un listado con las más populares.

composer require <vendor>/<package> --prefer-dist --no-dev -o --no-suggest
php flarum cache:clear

1. –prefer-dist:

Indica a Composer que prefiera descargar las distribuciones comprimidas (archivos zip o tarball) en lugar de clonar el repositorio completo del paquete. Esto puede ser más rápido y eficiente en términos de espacio.

2. –no-dev:

Omite la instalación de las dependencias de desarrollo (definidas en la sección require-dev del archivo composer.json). Esto es útil en entornos de producción donde no necesitas herramientas y bibliotecas utilizadas solo para desarrollo y pruebas.

3. -o (o –optimize-autoloader):

Optimiza el cargador automático (autoloader) de Composer para mejorar el rendimiento.

4. –no-suggest:

Evita mostrar sugerencias de paquetes adicionales que pueden ser instalados para mejorar o añadir funcionalidades al paquete actual.

Por ejemplo, si quieres instalar FoF Upload desde la línea de comandos, solo tienes que poner en tu carpeta de instalación de Flarum lo siguiente:

composer require fof/upload "*"
php flarum cache:clear
  • Puedes usar composer require «/:*» para tener siempre la versión correcta de una extensión para tu versión de Flarum.

Para actualizarla:

composer require fof/upload "*"
php flarum migrate
php flarum cache:clear

Para eliminarla:

composer remove fof/upload

O puedes hacerlo directamente desde la interfaz de Flarum con Extension manager (solo tienes que conocer el nombre de la extensión,vendor/package-name, algo que aparece en el directorio anterior):

Como instalar extensiones de Flarum desde su interfaz

Desde esta pantalla también puedes buscar actualizaciones de las extensiones o ejecutar una actualización global. Pero puedes hacerlo desde la línea de comandos con:

¡Ojo! Si vas a usar composer update, haz una copia de seguridad de composer.json y composer.lock antes de usar este comando por si las moscas. Si se rompe algo, puedes restaurar esos dos archivos y ejecutar composer install para volver a las versiones instaladas anteriormente.

#Actualizamos todas las extensiones (mejor hacerlo una a una para no encontrarnos sorpresas e incompatibilidades). 
composer update

#Actualizamos una a una cada extensión
composer update <vendor>/<package> --prefer-dist --no-dev -o --no-suggest

#Actualizamos todo, incluidas las dependencias (pero sin de pendencias de desarollo)
composer update --prefer-dist --no-plugins --no-dev -a --with-all-dependencies

1. composer update <vendor>/<package>:

  • update: Este comando le dice a Composer que actualice las dependencias del proyecto.
  • <vendor>/<package>: Reemplaza <vendor>/<package> con el nombre del paquete que deseas actualizar.

Comandos interesantes para gestionar tu foro

# Limpiar la caché de Flarum
php flarum cache:clear

#Actualiza base de datos
php flarum migrate

#Datos de instalación
php flarum info 

#Este comando actualizará todas las dependencias y subdependencias a las versiones más recientes permitidas por las restricciones en composer.json. Es particularmente útil si alguna de tus dependencias tiene subdependencias que también necesitan ser actualizadas para resolver problemas de compatibilidad o para obtener las versiones más recientes.
composer update -W 

# Limpiar la caché de Composer
composer clear-cache

#Mejora la velocidad del foro
composer dump-autoload -a

Como hacer que tus usuarios suban archivos o fotos a tu foro

Antes la hemos instalado con:

composer require fof/upload "*"
php flarum migrate
php flarum cache:clear

Si vas a activar la extensión fof/upload para que tus usuarios suban fotos u otros archivos a tu foro Flarum, te recomiendo hacer unas cuantas cosas:

  • Limitar el tamaño de archivo a 1024 o 2048 kilobytes.
  • Configurar el tipo mime a (image\/(gif|jpeg|png)) si solo vas a aceptar imágenes.
  • Poner en tu configuración php.ini post_max_size=2M y upload_max_filesize=2M
  • Cambiar el tamaño de las imágenes, por ejemplo, a 1920px de ancho como máximo.
  • Añadir una marca de agua a las imágenes (tienes que subir tu propia imagen como marca de agua).

Al subir las fotos, Flarum y la extensión directamente cambian el nombre de archivo, algo muy bueno para la seguridad, pero al hacer todo lo anterior, mejorar la seguridad al permitir subir fotos a tu foro.

También puedes añadir un archivo .htaccess a la ruta /home/tudominio/public_html/assets/files para mejorar la seguridad (opcional):

# Deshabilitar la ejecución de scripts y listados de directorios
Options -Indexes -ExecCGI -Includes -MultiViews

# Permitir solo archivos de imagen
<FilesMatch "\.(jpg|jpeg|png|gif)$">
    Order allow,deny
    Allow from all
</FilesMatch>

# Deshabilitar la ejecución de scripts en archivos .htaccess
<Files .htaccess>
    Order allow,deny
    Deny from all
</Files>

Creamos un trabajo cron para automatizar las acciones de algunas extensiones

Interesante si has instalado FoF Best Answer, FoF Drafts, FoF Sitemap, FoF Open Collective o FoF Github Sponsors. En línea de comandos de tu servidor pones:

crontab -e
* * * * * cd /ruta/a/flarum && php flarum schedule:run >> /dev/null 2>&1

Se ejecutará cada minuto.

Comprobamos que los emails de Flarum funcionan

Es un foro, necesitas gestionar todo con emails. Para ello vas a necesitar tener instalado y correctamente configurado Postfix en Rocky Linux (por ejemplo).

Probando que los emails funcionan en Flarum

En el panel de administración de Flarum tienes la zona Correo Electrónico, para mandar un correo de prueba. Si usas Postfix, selecciona mail. Ten cuidado de haber configurado correctamente DMARC, SPF y DKIM para no tener problemas de envío de los correos.

Luchando contra el SPAM en tu foro

Fundamental usar las extensiones Akismet, Fof AntiSpam, Spam Prevention y Turnstile, pero también te recomiendo filtrar todo tu tráfico mediante el DNS de Cloudflare. Puedes activar su protección de bots con sus reglas del WAF, por ejemplo. También puedes instalar en tu servidor el firewall CSF/LFD y usar su sección csf.blocklists, que está en: /etc/csf/csf.blocklists. Puedes activar varios de los listados que hacen referencia al SPAM en foros, y filtrar por IPs.

Por supuesto, puedes habilitar la aprobación manual de nuevas cuentas de usuario para evitar que los spammers se unan al foro. Es cansado, pero merece la pena.

Instalar la extensión para cambiar el idioma a español

Instalamos la extensión en español de Flarum
composer require flarum-lang/spanish

Luego vas al panel de control de Flarum y la activas. Guarda los cambios y borra la caché. Desactiva el idioma inglés.

¿Puedes añadir tus propias modificaciones a Flarum?

Sí. Puedes usar un archivo llamado extend.php que está en la raíz de tu instalación de Flarum. Puedes leer la documentación al respecto. Es el lugar perfecto para añadir códigos CSS o JavaScript, como por ejemplo el de tu sistema de analíticas web, (Google, Matomo).

Si abres este archivo, solo vas a ver lo siguiente (en la zona en negrita puedes añadir tus cosas):

<?php

/*
 * This file is part of Flarum.
 *
 * For detailed copyright and license information, please view the
 * LICENSE file that was distributed with this source code.
 */

use Flarum\Extend;

return [
    // Register extenders here to customize your forum!
];

¿Quieres añadir tu código de Google Analytics o Matomo a la cabecera de Flarum? Añade esto (pongo como ejemplo un script de Matomo Analytics):

<?php

/*
 * This file is part of Flarum.
 *
 * For detailed copyright and license information, please view the
 * LICENSE file that was distributed with this source code.
 */

use Flarum\Extend;
use Flarum\Frontend\Document;

return [
    (new Extend\Frontend('forum'))
        ->content(function (Document $document) {
            $document->head[] = '
<!-- Matomo -->
<script>
  var _paq = window._paq = window._paq || [];
  /* tracker methods like "setCustomDimension" should be called before "trackPageView" */
  _paq.push(['trackPageView']);
  _paq.push(['enableLinkTracking']);
  (function() {
    var u="https://TUWEB.com/matomo/";
    _paq.push(['setTrackerUrl', u+'matomo.php']);
    _paq.push(['setSiteId', '1']);
    var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
    g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
  })();
</script>
<!-- End Matomo Code -->
';
        })
];

Básicamente, has añadido lo siguiente (lo pongo en negrita resaltado):

<?php

use Flarum\Extend;
use Flarum\Frontend\Document;

return [
    (new Extend\Frontend('forum'))
        ->content(function (Document $document) {
            $document->head[] = '<script>TU_SCRIPT</script>';
        })
];

Cuando guardes el archivo, ese script se cargará en tu cabecera el foro. Pero puedes añadir lo que tú quieras a la cabecera, o lo que normalmente añades a otras páginas web en <head> </head>. Con esto te evitas tener que usar otra extensión como https://discuss.flarum.org/d/25907-html-head-items, o poner este script directamente en algún archivo del tema que va a ser sobreescrito en las actualizaciones.

Optimizar la carga de Flarum con Cloudflare y sus Cache Rules

Si estás usando Cloudflare con tu dominio, podemos optimizar la carga de Flarum para que todo vaya más rápido, creando unas cuantas reglas.

  • Cloudflare está implementado varios idiomas en su interfaz, y a mí se me cambia cada dos por tres, por eso ves cosas en español y en inglés.

En Caching > Cache Rules he creado la siguiente regla (cambia tunombredominio.com):

Optimizar la carga de Flarum con Cloudflare y sus Cache Rules
(http.host contains "tunombredominio.com" and not http.request.full_uri contains "admin#" and not http.cookie contains "flarum_session")

Y seleccionas Eligible for cache.

Con esto conseguimos que Cloudflare meta en cache todo el dominio excepto las url de administración de Flarum (con admin# en su URL) y las cookies (con flarum_session).

Podemos elegir lo siguiente:

  • Edge TTL: Use cache-control header if present, use default Cloudflare caching behavior if not (porque usamos nuestras propias reglas en el servidor gracias al htaccess de Flarum).
  • Browser TTL: Respect origin TTL (lo mismo).
  • Cache Key: activamos Cache deception armor y Cache by device type
  • Serve stale content while revalidating: Do not serve stale content while updating

Con estas reglas consigues que cloudflare aplique: Cf-Cache-Status: DYNAMIC, es decir,

En Rules > Configuration Rules, desactivamos Rocket Loader de la zona de Admin (y se queda activo en el resto):

En Rules > Configuration Rules, desactivamos Rocket Loader de la zona de Admin (y se queda activo en el resto)
(http.host contains "tunombredominio.com" and not http.request.full_uri contains "admin#")

Y activamos Rocket Loader casi al final.

En Rules > Configuration Rules creamos otra regla para proteger mejor la zona de administración de Flarum (tengo todo el dominio en Medium y la zona de Admin en high):

En Rules > Configuration Rules creamos otra regla para proteger mejor la zona de administración de Flarum

Pones el nivel de seguridad en Alto (High). Puedes poner Rocket Loader en Off por si las moscas de nuevo. Lo estoy probando a ver que tal funciona.

En Rules > Page Rules ponemos una de las reglas más importantes, con la que vamos a conseguir que los archivos del tema se metan en la caché de Cloudflare:

n Rules > Page Rules ponemos una de las reglas más importantes, con la que vamos a conseguir que los archivos del tema se metan en la caché de Cloudflare
  • URL: tunombredominio.com/assets/*
  • Edge Cache TTL: a month

Vete probando varias opciones para ver cuál se ajusta mejor a tu instalación. Puedes activar o desactivar las reglas a tu gusto.

¿Problemas?

Los principales problemas que me he encontrado con Flarum siempre han sido de caché. Las páginas se quedan en alguna caché y no se guardan los datos en la zona de admin o alguna de las extensiones no funcionan bien. Puedes hacer lo siguiente:

  • Borrar la caché del navegador
  • Borrar la caché de Flarum con php flarum cache:clear
  • Borrar otras caches de tu servidor: por ejemplo, yo tengo instalado Opcache y Memcached.

¿Tienes reglas de caché en tu configuración de Apache? Mucho ojo con esto, que también pueden afectar a tu foro. Algo que vale para WordPress, no vale para Flarum. En mi caso, tenía algo como esto en la configuración general de Apache:

# BEGIN Cache-Control Headers
<IfModule mod_headers.c>
    <FilesMatch "\.(ico|jpe?g|jpg|png|gif|svg|swf|eot|ttf|otf|woff|woff2|webp)$">
        Header set Cache-Control "max-age=31536000, public"
    </FilesMatch>
    <FilesMatch "\.(css|js)$">
        Header set Cache-Control "max-age=31536000, public"
    </FilesMatch>
    <FilesMatch "\.(x?html?|php)$">
        Header set Cache-Control "public, max-age=3600, must-revalidate"
    </FilesMatch>
</IfModule>

¿Problema con estas reglas y Flarum? Pues que si pones Header set Cache-Control «public, max-age=3600, must-revalidate» en los archivos HTML y PHP, va a tardar 1 hora (3600 segundos) en refrescarse estos archivos, algo impensable en un foro. He tenido que añadir lo siguiente en el archivo .htaccess de Flarum para que tenga en cuenta otras reglas (lo importante es poner max-age=0):

# BEGIN Cache-Control Headers
<IfModule mod_headers.c>
    <FilesMatch "\.(x?html?|php)$">
        Header set Cache-Control "public, max-age=0, must-revalidate"
    </FilesMatch>
    <FilesMatch "\.(ico|jpe?g|jpg|png|gif|svg|swf|eot|ttf|otf|woff|woff2|webp)$">
        Header set Cache-Control "max-age=2592000, public"
    </FilesMatch>
</IfModule>

También te puedes asegurar que tu base de datos de Flarum esté actualizada con php flarum migrate. O que tu dominio está bien configurado en config.php.

¿Has añadido cosas a las cabeceras, pie de página en la zona de personalización del panel de administración?

Deberías de mirar en los logs de Apache y PHP, pero también en los logs de Flarum y Composer en:

  • /home/tudominio/public_html/storage/logs/composer
  • /home/tudominio/public_html/storage/logs

Descubre más desde algoentremanos.com

Suscríbete y recibe las últimas entradas en tu correo electrónico.

Foto del autor

Ivan Benito

Apasionado de la lectura y los viajes, experto en tecnología e informática y fan de la privacidad online. Desde el año 2007 me he dedicado al SEO, a escribir y a crear páginas web con WordPress sobre todo tipo de temáticas. Si tienes alguna duda y necesitas ayuda... ¡Pregúntame!

Si tienes preguntas, quieres que hagamos una review de una app, programa o producto, simplemente mándanos un e-mail mediante nuestro formulario de contacto. Te contestaremos en el menor tiempo posible. ¡Muchas gracias y salU2! Algoentremanos realiza reviews de manera profesional y en muchas ocasiones recibimos compensación de las compañías cuyos productos revisamos. Probamos cada producto a fondo y otorgamos altas calificaciones solo a los mejores. La propiedad de Algoentremanos.com es independiente y las opiniones expresadas aquí son solo nuestras. Algunos enlaces del artículo son afiliados: pueden generar un beneficio a algoentremanos.com. Saber más.

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.