SERVER / QUICK START
Tutorial de Servidor Linux
Guía paso a paso con Docker que cubre preparación, compose, arranque, mantenimiento y problemas frecuentes.
Este tutorial te guiará en el despliegue rápido de un servidor de juego en Linux utilizando Docker. Incluso si no tienes mucha experiencia técnica, podrás seguir los pasos hasta completarlos.
1. Preparación
- Debes usar un servidor en la nube, como Alibaba Cloud, Tencent Cloud, AWS o un proveedor similar, o bien una VPS.
- Obligatorio: solicita un TOKEN de autorización del juego válido (
GAME_TOKEN) al equipo oficial. Sin TOKEN no es posible abrir un servidor público. - Prepara un servidor con una IP pública fija que responda a ping y sea accesible por red; de lo contrario, la revisión será rechazada.
- Instala Docker y Docker Compose (recomendado), o asegúrate de que el entorno de ejecución del servidor cumpla con los requisitos del juego.
- Al solicitar el TOKEN, envía el correo a
team@nextindie.cn.
Plantilla de solicitud del servidor · Acuerdo de Licencia y Servicios del Juego
I. Información básica del solicitante
UID de usuario: [Indica el ID de usuario de tu cuenta del juego]
IP pública vinculada al servidor: [Indica la IP pública fija y única; debe responder a ping]
Región física del servidor: [Por ejemplo: Asia, Norteamérica]
Resumen del propósito de la solicitud y del tamaño de la comunidad: [Por ejemplo: servidor personal, servidor para una comunidad específica de jugadores]
II. Importante: compromiso de operación no lucrativa y aviso de cumplimiento
Como operador responsable de este servidor, he leído detenidamente el capítulo 10 del Acuerdo de Licencia y Servicios del Juego y asumo solemnemente los siguientes compromisos legales:
Naturaleza puramente no lucrativa: Este servidor mantendrá una naturaleza estrictamente no lucrativa.
Solo se permiten donaciones gratuitas: Este servidor solo aceptará donaciones voluntarias, gratuitas y sin contraprestación alguna por parte de jugadores que apoyan a la comunidad. Todos los fondos recibidos podrán utilizarse únicamente para cubrir los costes directos del alojamiento físico, como el alquiler del hardware del servidor, el ancho de banda de red y la protección contra DDoS.
Se prohíbe vender activos y valores del juego: Este servidor nunca venderá, de forma directa, indirecta o encubierta, criaturas o dinosaurios virtuales del juego, datos de personaje, niveles, bonificaciones de atributos, armas, equipo, materiales de construcción, monedas del juego ni ningún objeto virtual que afecte al equilibrio del juego.
Se prohíbe el intercambio encubierto por privilegios: Este servidor nunca utilizará fórmulas como sorteos para donantes, regalos por patrocinio, personajes o criaturas personalizados de pago, ni barreras o cuotas de pago para entrar al servidor o a la comunidad como condición de intercambio por objetos virtuales o privilegios dentro del juego.
Se prohíben los mecanismos de apuesta: Ni este servidor ni sus comunidades asociadas, como grupos de QQ o servidores de Discord, establecerán cajas ciegas, sorteos, ruletas ni mecanismos de devolución con naturaleza de apuesta relacionados con recursos virtuales del juego.
III. Aislamiento de privacidad y conocimiento de seguridad
Reconozco y acepto que la recopilación oficial de la IP de este servidor y la generación de un TOKEN son necesarias para la seguridad antitrampas y la ejecución del contrato, y que este tratamiento de datos cumple con la normativa de privacidad.
Me comprometo a custodiar adecuadamente el TOKEN de autorización emitido y a no transferirlo, alquilarlo ni divulgarlo a terceros de ninguna forma. Asumo toda la responsabilidad por las infracciones derivadas de una mala gestión del TOKEN o de la configuración de la IP.
Entiendo que enviar este correo de solicitud de apertura de servidor al equipo oficial constituye mi firma digital y mi aceptación incondicional de todos los términos legales del Acuerdo de Licencia y Servicios del Juego. Si incumplo cualquiera de las líneas rojas anteriores, el equipo oficial podrá revocar el TOKEN de autorización, incluir la IP en una lista negra y aplicar un bloqueo de cuenta en toda la plataforma y un bloqueo del dispositivo sin previo aviso. 2. Instalando Docker y Docker Compose
2.1 Instalando Docker
Si estás utilizando un servidor en la nube con un servicio de contenedor Docker preinstalado, o si Docker ya está instalado y funcionando en tu sistema, puedes omitir esta sección y continuar con el siguiente paso.
Ejecuta el siguiente comando para descargar e instalar Docker (funciona en la mayoría de las distribuciones de Linux):
curl -fsSL https://get.docker.com | bash Después de la instalación, inicia Docker y configúralo para que se inicie automáticamente con el sistema:
systemctl start docker
systemctl enable docker Verifica la instalación:
docker --version 2.2 Instalando Docker Compose
Las instalaciones modernas de Docker suelen incluir el plugin docker compose. Si no es así, instala el binario independiente docker-compose. Este tutorial utiliza docker-compose en todo momento. Si tu sistema solo admite el plugin, sustitúyelo por docker compose.
Método 1: Verificar el plugin integrado
docker compose version Método 2: Instalar el binario independiente
curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose --version 3. Creando el directorio del servidor y los archivos de configuración
3.1 Usando el directorio predeterminado tras iniciar sesión
Este tutorial asume que usas el directorio predeterminado después de iniciar sesión para almacenar docker-compose.yml y .env. No es necesario crear una carpeta de proyecto adicional. Si inicias sesión como root, este directorio suele ser /root.
Después de iniciar sesión, los dos archivos de configuración deben quedar uno al lado del otro en tu directorio personal (por ejemplo, si iniciaste sesión como root, sería /root):
/root/
├── docker-compose.yml ← Configuración de Docker Compose
└── .env ← Variables de entorno (configuración del servidor) 3.2 Creando el archivo de variables de entorno .env
El archivo .env almacena los parámetros del servidor. Usa el editor predeterminado del sistema vi para crearlo:
vi .env En el archivo abierto, a continuación tienes dos configuraciones completas y listas para usar. Elige la que corresponda al modo que quieras, pégala y completa GAME_TOKEN (para un servidor público, indica también tu IP pública real en GAME_IP):
Servidor en modo sandbox
# TOKEN de autorización del juego (solicítalo al equipo oficial; obligatorio para servidores públicos)
GAME_TOKEN=
# Nombre del servidor
GAME_NAME=The Sandbox
# IP pública (127.0.0.1 solo sirve para pruebas locales; usa tu IP pública real para que otros se conecten)
GAME_IP=203.0.113.10
# Puerto del servidor (UDP)
GAME_PORT=26666
# Tiempo de desaparición del cadáver (segundos)
GAME_DEAD_TIME=600
# Cantidad de crías: 0 = desactivado, 1 = una, 2 = dos, y así sucesivamente
GAME_CHILD=1
# Activar el modo sandbox
GAME_MODE_SANDBOX=true
# Registrar en la lista global de servidores
GAME_GLOBAL=true
# Número máximo de jugadores
GAME_MAX_PLAYERS=50
# Nodo del servidor (solo indica la región a los jugadores; sin efecto funcional)
GAME_NODE=AS
# Servidor público
GAME_PUBLIC=true
# Permitir el dominio de genes
GAME_GENE_SKILLFUL=true
# Permitir ganar dominio al matar
GAME_KILL_SKILLFUL=true
# Permitir el aprendizaje de genes
GAME_LEARN=true
# Dificultad del juego (cuanto mayor, más difícil)
GAME_HARD=1
# Sin huevos de evolución (los huevos siempre permanecen en la especie actual)
GAME_EVOL=false
# Nombre del mapa
GAME_MAP=Oasis
# Permitir pareja de IA
GAME_AI_MATE=true Servidor en modo evolución
# TOKEN de autorización del juego (solicítalo al equipo oficial; obligatorio para servidores públicos)
GAME_TOKEN=
# Nombre del servidor
GAME_NAME=The Evolution
# IP pública (127.0.0.1 solo sirve para pruebas locales; usa tu IP pública real para que otros se conecten)
GAME_IP=203.0.113.10
# Puerto del servidor (UDP)
GAME_PORT=26666
# Tiempo de desaparición del cadáver (segundos)
GAME_DEAD_TIME=1200
# Cantidad de crías: 0 = desactivado, 1 = una, 2 = dos, y así sucesivamente
GAME_CHILD=1
# Activar el modo evolución
GAME_MODE_EVOL=true
# Permitir que los huevos contengan huevos de evolución (NO es el interruptor del modo evolución)
GAME_EVOL=true
# Activar el modo primeval
GAME_MODE_PRIMEVAL=true
# Registrar en la lista global de servidores
GAME_GLOBAL=true
# Número máximo de jugadores
GAME_MAX_PLAYERS=50
# Nodo del servidor (solo indica la región a los jugadores; sin efecto funcional)
GAME_NODE=AS
# Servidor público
GAME_PUBLIC=true
# Dificultad del juego (cuanto mayor, más difícil)
GAME_HARD=0
# Permitir pareja de IA
GAME_AI_MATE=true Para guardar y salir: presiona i para entrar en el modo de edición. Después de editar, presiona Esc, escribe :wq y presiona Enter. Para ver la lista completa de parámetros, consulta el Manual de Configuración del Servidor de Juego. Para parámetros de activación, simplemente escribe el nombre de la variable y asigna cualquier valor (como 1) para activarlo.
💡 Consejo: Usa el botón Descargar en los bloques de código de arriba para guardarlos como archivo. Los archivos .env descargados se llaman sandbox.env o evolution.env — renómbralos a .env antes de desplegar.
3.3 Creando el archivo docker-compose.yml
vi docker-compose.yml services:
# Aplicación del juego
gameserv:
image: hkccr.ccs.tencentyun.com/mesozoicdawn/gameserver:latest
container_name: gameserv
# Archivo de entorno (si lo renombraste, p. ej. sandbox.env, cambia el nombre de abajo)
env_file:
- .env
volumes:
- /data/Database:/app/GameServ_Data/Database
- /data/Mods:/app/GameServ_Data/StreamingAssets/Mods
- /data/Logs:/app/GameServ_Data/Logs
# Montar la zona horaria del host
- /etc/localtime:/etc/localtime:ro
# Señales de notificación de actualización de Watchtower
- /data/Signals:/app/GameServ_Data/Signals
- /data/Signals:/signals
environment:
- GAME_AUTO_RESTART=1
- TZ=Asia/Shanghai
labels:
- "com.centurylinklabs.watchtower.scope=gameserv"
- "com.centurylinklabs.watchtower.enable=true"
# Notificar al servidor del juego para que guarde antes de la actualización
- "com.centurylinklabs.watchtower.lifecycle.pre-update=/usr/local/bin/watchtower-pre-update gameserv"
- "com.centurylinklabs.watchtower.lifecycle.pre-update-timeout=2"
restart: unless-stopped
stop_grace_period: 60s
healthcheck:
test: ["CMD-SHELL", "pgrep -f GameServ.x86_64 || exit 1"]
interval: 50s
timeout: 5s
retries: 3
start_period: 60s
# Modo host (reduce la latencia)
network_mode: host
deploy:
resources:
limits:
cpus: '1.8'
memory: 3800M
# Watchtower — actualización automática
watchtower:
image: containrrr/watchtower
container_name: watchtower
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
# Docker 26+ requiere una versión de API explícita
- DOCKER_API_VERSION=1.40
- WATCHTOWER_POLL_INTERVAL=300
- WATCHTOWER_CLEANUP=true
- WATCHTOWER_LABEL_ENABLE=true
- WATCHTOWER_TIMEOUT=120s
command:
- "--label-enable"
- "--scope"
- "gameserv"
- "--cleanup"
# Activar hooks de ciclo de vida
- "--enable-lifecycle-hooks"
restart: unless-stopped
deploy:
resources:
limits:
cpus: '0.2'
memory: 128M network_mode: hostsignifica que el contenedor usa la red del host directamente, por lo queGAME_PORTen.envdebe coincidir con el puerto abierto en el firewall.- Los directorios de datos (
/data/Database,/data/Mods,/data/Logsy/data/Signals) se conservan en el host. Docker los creará automáticamente — no es necesario crearlos manualmente. deploy.resources.limits.memory: 3800Mlimita el servidor de juego a unos 3,8 GB de memoria, ycpus: '1.8'limita la CPU a 1,8 núcleos. Ajusta estos valores endeploy.resources.limitssegún el hardware de tu servidor.
3.4 Creando los directorios de datos (opcional)
Aunque Docker creará automáticamente los directorios vinculados, crearlos manualmente puede ayudarte a verificar los permisos con anticipación:
mkdir -p /data/Database /data/Mods /data/Logs 4. Iniciando el servidor
Asegúrate de estar en el directorio que contiene docker-compose.yml y .env, luego ejecuta el comando. Siguiendo el flujo predeterminado de este tutorial, ejecuta directamente en el directorio de inicio de sesión. Si iniciaste sesión como root, normalmente es /root.
docker-compose up -d - El parámetro
-dejecuta el contenedor en segundo plano. - El primer inicio descargará la imagen del servidor de juego desde el registro — ten paciencia.
- Usa
docker-compose logs -fpara ver los registros en tiempo real. PresionaCtrl+Cpara salir de la vista de registros sin detener el contenedor.
Si todo está configurado correctamente, el servidor terminará de iniciarse y se registrará en el lobby oficial (siempre que GAME_PUBLIC y GAME_TOKEN válidos estén configurados).
5. Abriendo puertos del firewall
Para permitir que otros jugadores se conecten, asegúrate de abrir el puerto UDP correspondiente al GAME_PORT establecido en .env (predeterminado 26666).
- Si usas un servidor en la nube, agrega una regla de permiso de puerto UDP en el grupo de seguridad.
- Si el servidor tiene un firewall del sistema habilitado (ej.,
ufw), ejecuta el siguiente comando:
ufw allow 26666/udp 6. Comandos de gestión diaria
| Operación | Comando |
|---|---|
| Iniciar servidor | docker-compose up -d |
| Detener servidor | docker-compose down |
| Reiniciar servidor | docker-compose restart |
| Ver registros | docker-compose logs -f --tail=100 |
| Actualizar imagen y reiniciar | docker-compose pull luego docker-compose up -d |
| Entrar en la shell del contenedor | docker exec -it gameserv bash |
- Al detener el servidor, Docker reserva 60 segundos para guardar datos. No fuerces
kill. - El contenedor
watchtowermonitorea automáticamente las actualizaciones de imagen y descarga nuevas versiones con reinicio en intervalos de 5 minutos.
7. Cómo modificar la configuración
- Ejecuta
cd ~, luego usavi .envpara abrir el archivo de configuración. - Después de guardar, ejecuta
docker-compose downy luegodocker-compose up -dpara recargar las variables de entorno.
Debes ejecutar down primero y luego up. Un restart directo puede no recargar las nuevas variables de entorno.
8. Problemas comunes
8.1 ¿El servidor inició pero no aparece en el lobby?
- Verifica que
GAME_TOKENen.envesté completado correctamente y que lo hayas solicitado al equipo oficial. - Verifica que
GAME_PUBLIC=1esté configurado. - Verifica que la IP pública del servidor coincida con
GAME_IP. Usacurl ifconfig.mepara verificarlo. - Verifica que el firewall y el grupo de seguridad hayan permitido el puerto UDP.
- Revisa los registros:
docker-compose logs -f gameserv.
8.2 ¿El puerto ya está en uso?
Cambia GAME_PORT en .env a otro puerto y actualiza las reglas del firewall en consecuencia.
8.3 ¿El contenedor se cierra por falta de memoria?
- Ajusta
mem_limitendocker-compose.yml. - Reduce los parámetros de alto consumo como
GAME_MAX_PLAYERS.
8.4 ¿Cómo instalar MODs?
Coloca los archivos MOD en el directorio /data/Mods del host, agrega GAME_MODS=NombreMod1,NombreMod2 en .env y reinicia el servidor.
8.5 ¿Cómo hacer una copia de seguridad de los datos?
Haz una copia de seguridad del directorio /data/Database del host. Contiene personajes de jugadores, nidos, huevos y otros datos. Recomendamos empaquetarlo periódicamente y subirlo al almacenamiento en la nube.
9. Obtener ayuda
- Consulta la referencia completa de parámetros: Manual de Configuración del Servidor de Juego.
- Únete a la comunidad oficial de Discord o al grupo QQ para obtener la dirección más reciente del registro de imágenes y las instrucciones de solicitud de TOKEN.