Despliegue y Configuración Técnica del Backend de Lichess en Entornos Locales

Introducción al Backend de Lichess

Lichess es una plataforma de ajedrez de código abierto, libre de anuncios y completamente gratuita. Su núcleo está desarrollado en Scala, aprovechando el framework Play. A continuación, se detalla el proceso técnico para levantar un entorno de desarrollo local.

Requisitos del Sistema y Hardware

Dependencias de Software

Componente Versión Mínima Notas
Java JDK 17 Requiere el kit de desarrollo completo, no solo el JRE.
MongoDB 6.0 Base de datos documental principal.
Redis 6.2 Almacén de datos en memoria y colas.
sbt 1.8 Herramienta de construcción para Scala.

Especificaciones de Hadrware

Recurso Mínimo Recomendado
Memoria RAM 8 GB 16 GB+
Almacenamiento 50 GB 100 GB+ (SSD)
CPU 4 núcleos 8 núcleos+

Proceso de Instalación

Obtención del Código Fuente

git clone https://github.com/lichess-org/lila.git chess-server
cd chess-server

Configuración del Entorno Base

Java Development Kit (JDK)

# Para sistemas basados en Debian/Ubuntu
sudo apt-get update && sudo apt-get install -y openjdk-17-jdk

# Para distribuciones RHEL/CentOS/Fedora
sudo dnf install -y java-17-openjdk-devel

# Verificación de la instalación
java --version

Gestor de Documentos MongoDB

# Instalación en Ubuntu/Debian
curl -fsSL https://pgp.mongodb.com/server-6.0.asc | sudo gpg -o /usr/share/keyrings/mongodb-server-6.0.gpg --dearmor
echo "deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-6.0.gpg ] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/6.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list
sudo apt-get update
sudo apt-get install -y mongodb-org

# Inicio y habilitación del servicio
sudo systemctl daemon-reload
sudo systemctl start mongod
sudo systemctl enable mongod

Almacén de Datos en Memoria Redis

sudo apt-get install -y redis-server
sudo systemctl enable --now redis-server
redis-cli ping # Debería responder PONG

Preparación de la Configuración del Proyecto

Es necesario duplicar los archivos de configuración base para adaptarlos al entorno local:

cp conf/application.conf.default conf/application.conf
cp .sbtopts.default .sbtopts

Ajustes Principales de Configuración (HOCON)

En el archivo conf/base.conf, se definen las conexiones a los servicios externos. A continuación, se muestra una configuración optimizada para desarrollo local:

# Conexión a la base de datos documental
mongodb {
  uri = "mongodb://localhost:27017/lichess_dev?appName=lila_local"
}

# Conexión al caché en memoria
redis {
  uri = "redis://127.0.0.1:6379"
}

# Parámetros de red y enrutamiento
net {
  domain = "localhost:9000"
  socket.domains = ["localhost:9001"]
  asset.domain = ${net.domain}
  base_url = "http://"${net.domain}
}

Compilación y Ejecución

El proyecto utiliza sbt como herramienta de construcción. Se puede iniciar mediante el script incluido o directamente con sbt:

# Opción 1: Usando el script wrapper
chmod +x lila.sh
./lila.sh
# Una vez en la consola de sbt, ejecutar:
# run

# Opción 2: Ejecución directa
sbt run

Para verificar que el servidor está operativo, abra su navegador y navegue a http://localhost:9000.

Optimización y Ajustes de Rendimiento

Para entornos de desarrollo con recursos limitados o para mejorar el rendimiento, se pueden ajustar los parámetros de la JVM en el archivo .sbtopts:

-Xmx6G
-Xms3G
-XX:MaxMetaspaceSize=512m

Adicionalmente, en el archivo de configuración HOCON, se puede desactivar el rate limiting y el crawling para acelerar las pruebas:

net {
  crawlable = false
  ratelimit = false
}
mongodb {
  pool.size = 30
  pool.maxWaitQueueSize = 500
}

Resolución de Incidencias Comunes

Variables de Antorno de Java Incorrectas

Si el sistema no detecta Java, asegúrese de exportar las variables correctamente en su perfil de shell:

export JAVA_HOME="/usr/lib/jvm/java-17-openjdk-amd64"
export PATH="$JAVA_HOME/bin:$PATH"

Colisiones de Puertos

Si los puertos 9000 o 9001 están en uso, modifique el bloque net en su configuración:

net {
  domain = "localhost:8080"
  socket.domains = ["localhost:8081"]
}

Errores de Conexión a Bases de Datos

Verifique que los demonios de MongoDB y Redis estén activos:

sudo systemctl status mongod redis-server
sudo systemctl restart mongod redis-server

Configuraciones Avanzadas

Integración de Servicios Externos

Para habilitar el envío de correos y la indexación de búsqueda, configure los siguientes bloques en su archivo de configuración:

mailer {
  primary {
    mock = true # Cambiar a false en producción
    host = "smtp.mailtrap.io"
    port = 2525
    tls = false
    user = "smtp_user"
    password = "smtp_pass"
  }
}

search {
  enabled = true
  writeable = true
  endpoint = "http://localhost:9200" # Ejemplo usando Elasticsearch
}

Monitoreo y Diagnóstico

El backend expone varios endpoints para la telemetría y verificación de salud del sistema:

  • /monitor/health: Verificación básica de vida del servicio.
  • /monitor/metrics: Métricas detalladas de rendimiento y uso de recursos.
  • /monitor/status: Estado general de los componentes internos.

Los niveles de registro (logging) pueden ser modificados editando el archivo conf/logger.dev.xml para filtrar la salida de la consola durante el desarrollo.

Etiquetas: scala Play-Framework MongoDB Redis sbt

Publicado el 7-7 04:18