Guía rápida para instalar y configurar Elasticsearch en Mastodon y mejorar las búsquedas.


Configurar Elasticsearch en Mastodon es una de las mejoras más potentes que puedes aplicar a tu instancia si quieres ofrecer una experiencia de búsqueda realmente útil. Por defecto, Mastodon solo permite búsquedas muy limitadas (usuarios, hashtags…), pero al integrar Elasticsearch, desbloqueas la posibilidad de buscar publicaciones completas, tanto tuyas como de los usuarios que sigues.

En este artículo explicaremos paso a paso para habilitar Elasticsearch en tu instancia de Mastodon, desde la instalación y configuración del servicio hasta su integración con Mastodon y la indexación de contenido. Si estás listo para llevar tu nodo al siguiente nivel, sigue leyendo.

Instalación de ElasticSearch

💡
Mastodon funciona con Elasticsearch en su versión 7. Debería ser compatible con OpenSearch, así como con las versiones 6 y 8 de Elasticsearch, pero estas configuraciones no están oficialmente soportadas.

Añadimos el repositorio de elasticsearch:

wget -O /usr/share/keyrings/elasticsearch.asc https://artifacts.elastic.co/GPG-KEY-elasticsearch
echo "deb [signed-by=/usr/share/keyrings/elasticsearch.asc] https://artifacts.elastic.co/packages/7.x/apt stable main" > /etc/apt/sources.list.d/elastic-7.x.list

Actualizamos el repositorio e instalamos los paquetes necesarios:

apt update
apt install elasticsearch

Configuración de ElasticSearch

Antes de iniciar Elasticsearch, es posible que quieras limitar su consumo de RAM. Puedes establecer un límite de RAM creando un nuevo archivo en /etc/elasticsearch/jvm.options.d/limit-ram.options con el siguiente contenido:

touch /etc/elasticsearch/jvm.options.d/limit-ram.options
nano /etc/elasticsearch/jvm.options.d/limit-ram.options

En el siguiente fichero debes de asignar cuanta RAM se puede asignar a ElasticSearch, para ello si por ejemplo tu servidor tiene 16GB de RAM, no deberías asignar más de 8 GB a Elasticsearch, y lo recomendable es dejar la mitad o menos para que el sistema operativo y otros procesos tengan memoria suficiente para funcionar correctamente.

# Limit RAM size to 8 GB
-Xms8g
-Xmx8g

Explicación:

  • -Xms: tamaño mínimo de heap que usará la JVM (memoria reservada al arrancar).
  • -Xmx: tamaño máximo de heap que puede usar la JVM.
Nunca pongas más de la mitad de la RAM total del sistema para el heap de Elasticsearch, a menos que tengas una configuración muy controlada. También es importante que Xms y Xmx sean iguales para evitar pausas por redimensionado de heap.

Tras este cambio, ejecutamos los siguientes comandos para iniciar elasticsearch:

systemctl daemon-reload
systemctl enable --now elasticsearch

Seguridad de ElasticSearch

Por defecto, Elasticsearch no gestiona ningún tipo de autenticación y todas las solicitudes se realizan con permisos de administrador completos. Por eso es recomendable configurar las funciones de seguridad para nuestros clúster. Lo primero será configurar lo siguiente en /etc/elasticsearch/elasticsearch.yml.

xpack.security.enabled: true

Reiniciamos elasticsearch:

systemctl reload elasticsearch

Luego ejecutaremos este script para modificar las contraseñas de los usuarios que usa ElasticSearch:

/usr/share/elasticsearch/bin/elasticsearch-setup-passwords interactive

Una vez esto, adaptaremos lo siguiente con la contraseña seleccionada para cada usuario:

curl -X POST -u elastic:admin_password "localhost:9200/_security/role/mastodon_full_access?pretty" -H 'Content-Type: application/json' -d'
{
  "cluster": ["monitor"],
  "indices": [{
    "names": ["*"],
    "privileges": ["read", "monitor", "write", "manage"]
  }]
}
'
💡
Recuerda en modificar admin_password por tu contraseña.
curl -X POST -u elastic:admin_password "localhost:9200/_security/user/mastodon?pretty" -H 'Content-Type: application/json' -d'
{
  "password" : "l0ng-r4nd0m-p@ssw0rd",
  "roles" : ["mastodon_full_access"]
}
'
💡
Recuerda en modificar admin_password por tu contraseña. Y luego también en cambiar l0ng-r4nd0m-p@ssw0rd por la contraseña que queremos configurar para el acceso de elasticsearch.

Configuración de Mastodon

Ahora iniciamos sesión con nuestro usuario que gestiona Mastodon y editamos el fichero .env.production y añadimos lo siguiente:

ES_ENABLED=true
ES_HOST=localhost
ES_PORT=9200
ES_PRESET=single_node_cluster
ES_USER=mastodon
ES_PASS=l0ng-r4nd0m-p@ssw0rd
💡
Recuerda en cambiar la contraseña del usuario de elasticsearch.

Tras este cambio, reiniciamos los servicios de Mastodon:

systemctl restart mastodon-web.service
systemctl restart mastodon-sidekiq.service

Ahora es el momento de crear los índices de Elasticsearch y llenarlos con datos:

RAILS_ENV=production bin/tootctl search deploy

Este proceso puede tardar varias horas en completarse, por lo que te recomiendo usar screen para lanzarlo en una ventana separada y dejar que se ejecute en segundo plano en el servidor sin interrupciones.

Si necesitas saber como funciona el comando screen, te dejo este artículo que explica todo lo importante:

screen: crea diferentes instancias de una terminal en una sola sesión
Este comando permite gestionar sesiones de terminal independientes, facilitando la continuidad de tareas incluso tras cerrar la sesión SSH o el terminal.

Más sobre ./voidNull

Haz que cada palabra cuente: tu donación nos inspira a seguir creando contenido. Accede al apartado de Donación para hacer tu aportación