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.