Servidor dedicado Project Zomboid en Linux

Hola, hoy os traigo un pequeño tutorial gracias al que podremos crear nuestro propio servidor dedicado de Project Zomboid en Linux. También os explicaré cómo configurar algunas de las opciones del servidor para ajustarlo a tu gusto. En esta guía os mostraré cómo instalarlo de forma manual, pero también os mostraré el uso de docker para levantarlo de forma rápida.

Te adelanto que levantar un servidor dedicado de Project Zomboid es muy fácil, pero habrá que trabajar con línea de comandos de Linux. Por ello, es muy importante que estés al menos un poco familiarizado con ella y sepas cómo ejecutar los comandos.

Crea el servidor dedicado manualmente

Lo primero que os mostraré es cómo instalarlo de forma manual para lo cual necesitaremos utilizar la herramienta SteamCMD. Esta herramienta te permitirá descargar el servidor de forma fácil con tan sólo un comando. También aprenderemos a crear un usuario aparte para ejecutar este servidor siguiendo el principio de Least Privilege.

Instalar paquetes necesarios

Lo primero que tenemos que hacer es instalar el paquete lib32gcc requerido por SteamCMD, el cual lo instalaremos con el siguiente comando (en Debian):

# sudo apt-get install lib32gcc-s1

Crear usuario para el servidor

Este paso es opcional, pero es muy recomendado hacerlo. Lo que haremos, es crear un usuario para ejecutar el servidor con los mínimos permisos posibles. Esto además nos ayudará a mantener todos los datos en la carpeta de dicho usuario y no ensuciará el nuestro. Para crear el usuario simplemente ejecutaremos el siguiente comando:

# sudo adduser --disabled-password --shell /bin/false --disabled-login zomboid_server
Adding user `zomboid_server' ...
Adding new group `zomboid_server' (1000) ...
Adding new user `zomboid_server' (1000) with group `zomboid_server' ...
Creating home directory `/home/zomboid_server' ...
Copying files from `/etc/skel' ...
Changing the user information for zomboid_server
Enter the new value, or press ENTER for the default
	Full Name []: Project Zomboid Server
	Room Number []: 
	Work Phone []: 
	Home Phone []: 
	Other []: 
Is the information correct? [Y/n] Y

Como podéis ver, el comando te solicitará una serie de datos los cuales no son importantes, por lo que pondremos lo que queramos y simplemente confirmaremos con Y en la última pregunta. Este comando nos creará un usuario sin password, bloqueado y sin posibilidad de loguearse. Si nos queremos asegurar podemos ejecutar el siguiente comando, el cual bloqueará el usuario:

# sudo usermod -L zomboid_server

Ahora que ya tenemos usuario, cambiaremos a este usuario para empezar a instalar el servidor y que no sea necesario arreglar los permisos luego. Para esto, simplemente usaremos este comando:

# sudo su - -s /bin/bash zomboid_server

Este comando nos cambiará al usuario que acabamos de crear y nos permitirá trabajar sin afectar a nuestro usuario o al sistema. Con esto, tendremos todo más limpio y seguro, manteniendo todos los ficheros en la home de este nuevo usuario.

Instalación del servidor dedicado

Ahora que ya tenemos el usuario listo, pasaremos a crear las carpetas de trabajo donde mantendremos los ficheros del servidor. Para ello ejecutaremos estos comandos:

$ mkdir -p ~/pz_server/bin
$ mkdir -p ~/pz_server/server

Una vez creadas, pasaremos a descargar el programa SteamCMD, el cual lo podremos descargar directamente de la página de Steam:

https://developer.valvesoftware.com/wiki/SteamCMD

Pero si no quieres complicarte mucho, puedes usar estos dos comandos para descargarlo:

$ cd ~/pz_server/bin/
$ curl -sqL "https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz" | tar zxvf -

Y con esto por fin tendremos SteamCMD y podremos proceder a instalar nuestro deseado servidor de Project Zomboid. Para ello, ejecutaremos el siguiente comando, el cual se encargará de descargar e instalar el servidor en la carpeta que creamos antes:

~/pz_server/bin/steamcmd.sh +force_install_dir "~/pz_server/server" \
                            +login anonymous \
                            +app_update "380870" validate \
                            +quit

Este comando nos mostrará un proceso en el que se nos indicará que está descargando los datos:

[  0%] Checking for available update...
[----] Downloading update (0 of 53.847 KB)...
[  0%] Downloading update (288 of 53.847 KB)...
[  0%] Downloading update (1.453 of 53.847 KB)...
[  2%] Downloading update (2.614 of 53.847 KB)...
[  4%] Downloading update (3.825 of 53.847 KB)...
[  7%] Downloading update (4.496 of 53.847 KB)...
[  8%] Downloading update (5.580 of 53.847 KB)...
[ 10%] Downloading update (6.480 of 53.847 KB)...
[ 12%] Downloading update (7.365 of 53.847 KB)...
[ 13%] Downloading update (8.250 of 53.847 KB)...
[ 15%] Downloading update (9.013 of 53.847 KB)...
[ 16%] Downloading update (9.801 of 53.847 KB)...
[ 18%] Downloading update (10.549 of 53.847 KB)...
[ 19%] Downloading update (11.322 of 53.847 KB)...
[ 21%] Downloading update (12.189 of 53.847 KB)...
[ 22%] Downloading update (12.979 of 53.847 KB)...
.....
.....
Steam Console Client (c) Valve Corporation - version 1642451655
-- type 'quit' to exit --
Loading Steam API...OK

Connecting anonymously to Steam Public...OK
Waiting for client config...OK
Waiting for user info...OK
 Update state (0x3) reconfiguring, progress: 0.00 (0 / 0)
 Update state (0x3) reconfiguring, progress: 0.00 (0 / 0)
 Update state (0x3) reconfiguring, progress: 0.00 (0 / 0)
 Update state (0x5) verifying install, progress: 93.89 (2707688056 / 2883987965)
 Update state (0x11) preallocating, progress: 26.44 (762543182 / 2883987965)
Warning: failed to init SDL thread priority manager: SDL not found
 Update state (0x61) downloading, progress: 0.11 (3145728 / 2883987965)
 Update state (0x61) downloading, progress: 1.16 (33554432 / 2883987965)
 Update state (0x61) downloading, progress: 2.25 (64878086 / 2883987965)
 Update state (0x61) downloading, progress: 2.49 (71856914 / 2883987965)
 Update state (0x61) downloading, progress: 2.89 (83433522 / 2883987965)
 Update state (0x61) downloading, progress: 3.02 (87012185 / 2883987965)
.....
.....

Este texto está recortado para que no ocupe demasiado, por lo que será mucho más largo. El número que se ve en progress es el % de descarga, por lo que cuando llegue a 100 se habrá descargado completamente.

Con esto ya tendremos instalado el servidor y podremos proceder a usarlo.

Arrancar el servidor dedicado

Una vez que hemos instalado el servidor, ya podemos proceder a arrancarlo. Para ello simplemente ejecutaremos el siguiente comando:

bash "~/pz_server/server/start-server.sh"

La primera vez que lo ejecutemos, nos pedirá que indiquemos una contraseña para el usuario de administrador. Es importante que pongamos una contraseña segura y que la recordemos, ya que nos servirá para gestionar el servidor desde el propio juego.

Este comando es el básico para hacer funcionar el servidor, pero podemos usar parámetros para por ejemplo, cambiar los puertos, la carpeta de datos… Para saber más sobre estos parámetros, te recomiendo que vayas a la WiKi oficial:

https://pzwiki.net/wiki/Startup_parameters

Crear el servidor dedicado usando una imagen

Personalmente prefiero el uso de imágenes para la creación de servicios, ya que simplifica la puesta en marcha y ayuda a mantener el sistema más limpio. Además, esta imagen funcionará igual sin importar si usamos Linux, MacOS, Linux, Kubernetes… lo cual le da mucha más versatilidad. En esta guía me centraré en su uso con docker-compose, el cual nos permitirá arr

Los ficheros utilizados en esta parte de la guía los puedes descargar desde mi repositorio de Github, pero no hace falta que te descargues todo. Con descargar el fichero docker-compose.yml es suficiente:

https://github.com/Danixu/project-zomboid-server-docker

Instalar paquetes necesarios

Para poder usar la imagen, es necesario que instalemos el programa que ejecutará dicha imagen (Docker), y el docker-compose para poder levantar el servidor con un fichero de configuración. Si ya los tenemos instalados podemos obviar este paso, pero si no podemos hacerlo con el siguiente comando:

# sudo apt-get install docker docker-compose

Este comando instalará los dos programas que necesitamos para ejecutar el servidor, y por lo tanto podremos proceder a lo importante, levantar nuestro servidor.

Arrancar el servidor dedicado

Ahora que ya tenemos los programas necesarios para ejecutar imágenes, ya podemos arrancar el servidor las veces que queramos con facilidad. Para ello, lo primero que haremos es crear una carpeta donde se guardarán los datos que genera, para lo cual usaremos el siguiente comando:

$ mkdir ~/pz_server

Una vez creada nos moveremos a la carpeta con el siguiente comando:

$ cd ~/pz_server

Descargaremos desde mi repositorio el fichero docker-compose.yml el cual contiene la configuración necesaria para descargar y ejecutar la imagen del servidor:

$ wget https://github.com/Danixu/project-zomboid-server-docker/raw/main/docker-compose.yml

Crearemos un fichero de variables de entorno con el password de administrador. Este paso es necesario ya que docker-compose no arranca en modo interactivo y no permite ponerlo al arrancar la primera vez:

$ echo "ADMINPASSWORD=\"ContraseñaSuperSecreta\"" > .env

Y también crearemos las dos carpetas donde se guardaran los datos. Este paso es importante, ya que de no hacerlo docker-compose las creará con el usuario root y tendremos problemas de permisos. Esto es fácil de arreglar, pero si podemos evitarlo…:

$ mkdir data workshop-mods

Por último simplemente ejecutaremos el siguiente comando para ejecutar el servidor:

$ docker-compose up

Con este comando el servidor se ejecutará en primer plano, por lo que veremos todos los mensajes generados por el servidor. Para cerrarlo simplemente daremos a las teclas CTRL+C y esperaremos unos segundos a que se apague.

Si lo que queremos es dejarlo corriendo de fondo, simplemente añadiremos el argumento -d al comando, quedando así:

$ docker-compose up -d

En este caso será necesario ejecutar el siguiente comando si queremos pararlo:

$ docker-compose down

Y así de fácil podemos conseguir tener un servidor dedicado para Project Zomboid para nosotros mismos.

Variables de entorno

Algunos aspectos del servidor pueden ser modificados a través de variables de entorno, como por ejemplo la contraseña de administrador, el ID del servidor… En esta sección explicaré de forma breve las variables de las que disponemos, y en qué afectan. Estas variables se configurarían en el fichero .env que creamos en el paso anterior, y es necesario reiniciar el servidor cada vez que modifiquemos alguna.

VariableOpción por defectoOpciones disponiblesDescripción
ADMINPASSWORDNingunaEsta variable permite indicar la contraseña que tendrá el usuario de administrador. Esta variable es obligatoria en el primer arranque, pero puede ser quitada después salvo que queramos cambiar la contraseña.
CACHEDIR~/ZomboidIndica la carpeta en la que se guardarán los datos de caché del servidor, los cuales incluyen los datos de progreso del servidor. En caso de que se cambie esta carpeta, es importante cambiar también el punto de montaje de la carpeta data en el fichero docker-compose.yml. De lo contrario perderemos los datos al parar el servidor.
DEBUGfalsetrue/falseActiva el modo debug del servidor. Útil en el caso de que algo esté fallando, ya que nos dará más datos acerca de la ejecución del mismo.
IP0.0.0.0IP del adaptador de red en el que escuchará el servidor. Útil si tenemos más de un adaptador de red pero queremos que sólo funcione por uno de ellos
MEMORY8GbCantidad de memoria RAM máxima que usará el servidor. El consumo puede ser superior al indicado debido a cómo funciona Java, por lo que se recomienda poner una cantidad prudencial.
MODFOLDERSworkshop,steam,modsworkshop, steam y modsCarpetas desde las que leera los mods el servidor.
NOSTEAMfalsetrue/falseInicia el servidor en modo No Steam, lo cual permite que clientes de otras plataformas se conecten al servidor (por ejemplo GoG). Al activar esta opción, los clientes de Steam no podrán conectarse salvo que inicien el juego con la misma opción.
PORT16261Puerto UDP en el que escuchará el servidor. Es el mismo puerto al que los clientes se tendrán que conectar (más información en la sección Puertos del servidor)
SERVERNAMEtestserverNombre que le daremos al servidor. Este nombre se usará para guardar los datos de la partida y las diferentes configuraciones, por lo que si lo cambiamos se reiniciará el estado del servidor.
Nota: Los datos no serán borrados sino que creará unos nuevos, por lo que puede servir para tener varios servidores y decidir cuál activar cada vez.
SERVERPRESETApocalypseApocalypse, Beginner, Builder, FirstWeek, SixMonthsLater, Survival and SurvivorIndica el modo de juego que tendrá el servidor al iniciar. Por defecto el modo es Apocalipsis, pero puede ser cambiado a otros niveles de dificultad.
Nota: Salvo que SERVERPRESETREPLACE sea true, esta opción sólo se aplicará en el primer inicio a la hora de crear los datos del servidor.
SERVERPRESETREPLACEfalsetrue/falseRemplazará el modo de juego al arrancar el servidor. Por defecto desactivado para no remplazar las configuraciones que se hayan hecho manualmente.
SOFTRESETfalsetrue/falseRealiza un reseteo suave en el servidor.
STEAMPORT18766Primer puerto utilizado por Steam
STEAMPORT28767Segundo puerto utilizado por Steam
STEAMVACtruetrue/falseActiva o desactiva la protección contra trucos de Steam.

Puertos necesarios

Depende de si nuestro servidor está configurado en modo Steam o no, el número de puertos variará. Es importante que abras estos puertos en el Firewall o NAT de tu router si pretendes permitir que usuarios externos se conecten.

Modo Steam

El modo Steam que es el por defecto del servidor, requerirá de los siguientes puertos:

PuertoTipoDescripción
8766UDPPuerto utilizado por Steam.
NOTA: Este puerto puede ser cambiado con la variable de entorno STEAMPORT1
8767UDPPuerto utilizado por Steam.
NOTA: Este puerto puede ser cambiado con la variable de entorno STEAMPORT2
16261UDPPuerto de conexión de los clientes con el servidor.
NOTA: Este puerto puede ser cambiado con la variable de entorno PORT.

Modo No Steam

PuertoTipoDescripción
8766UDPPuerto utilizado por Steam.
NOTA: Este puerto puede ser cambiado con la variable de entorno STEAMPORT1
8767UDPPuerto utilizado por Steam.
NOTA: Este puerto puede ser cambiado con la variable de entorno STEAMPORT2
16261UDPPuerto de conexión de los clientes con el servidor.
NOTA: Este puerto puede ser cambiado con la variable de entorno PORT.
16262-???TCPEstos puertos son usados para que el cliente pueda descargarse contenido del servidor como por ejemplo los mods. Estos puertos son TCP, y su rango depende de dos factores:
* El puerto configurado para el servidor (16261 por defecto y ajustado con la variable PORT). El rango empezará en el siguiente puerto al configurado con PORT (16262).
* El número de slots de clientes que queremos en nuestro servidor
Por ejemplo, si nuestro puerto de servidor es el por defecto (16261) y queremos hueco para 10 clientes, el rango de puertos será 16262-16272. Si hemos cambiado el puerto por defecto a 54544 por ejemplo, el rango será 54545-54555.

Tips extra

Cambiar idioma de TV y Radio

Si montaste tu servidor y te pusiste a ver la TV o escuchar la radio seguramente habrás visto que los mensajes salen en inglés. Este es el idioma por defecto del servidor, pero por suerte para nosotros puede ser cambiado.

Para ello vamos a abrir el fichero options.ini que está en la carpeta de datos del servidor. Si usamos la guía de instalación manual esta será /home/zomboid_server/Zomboid, y si por el contrario hemos usado la imagen estará dentro de la carpeta data.

En este fichero buscaremos la siguiente línea:

language=EN

Y la cambiaremos por la siguiente línea:

language=ES

Reiniciaremos el servidor si ya lo tenemos arrancado y ya podremos disfrutar de los mensajes en Español.

Instalar mods

Dado que de momento sólo he probado a instalar los módulos con el servidor en modo Steam, me voy a centrar en este método. Si algún día pruebo a instalar algún mod fuera de Steam, actualizaré la guía con los pasos necesarios.

Modo Steam

Si arrancamos el servidor en modo steam podremos instalar los mods desde el Steam Workshop de una forma muy simple. Lo primero que haremos es ir al listado de mods y elegir el mod que queremos instalar:

https://steamcommunity.com/app/108600/workshop/

Una vez que nos hayamos fijado en un mod, es muy importante que comprobemos que es compatible con el Multijugador para evitarnos quebraderos de cabeza. Por norma hay comentarios indicándolo o el desarrollador lo ha indicado en la descripción. También nos tenemos que fijar de que es compatible con la versión de servidor que tenemos o sino quizá falle.

Una vez que hayamos encontrado un mod perfecto para nosotros, navegaremos hasta la parte de abajo de las descripción y ahí veremos dos datos:

  • Workshop ID
  • Mod ID

Una vez que tengamos estos datos abriremos el fichero de configuración de nuestro servidor y los añadiremos. Este fichero estará en la carpeta /home/zomboid_server/Zomboid/Server si usamos la guía manual, o en data/Server si usamos la imagen para levantar el servidor. Su nombre dependerá de cómo hayamos llamado al servidor, y su extensión es .ini. Si samos la configuración por defecto por ejemplo, este fichero se llamará servertest.ini.

En este fichero buscaremos las siguiente dos entradas:

  • WorkshopItems
  • Mods

Y añadiremos los datos que hemos cogido antes desde la página de Steam Workshop

  • WorkshopItems -> Workshop ID
  • Mods -> Mod ID

En el caso de que queramos añadir más de un mod, deberemos separar los ID con punto y coma (;).

También cabe la posibilidad de que el mod disponga de varios ID. En este caso nos fijaremos bien en la descripción ya que a veces dependiendo de cual activemos el mod funcionará de un modo y otro, y añadiremos los ID de igual modo separándolo por punto y coma (;).

Una vez que hayamos añadido los mods que queremos instalar y guardemos el fichero, simplemente reiniciaremos el servidor y él se encargará de descargar estos mods al arrancar. Los clientes que entren al servidor por primera vez, recibirán un aviso indicándole el uso de los mods y solicitándoles que los instalen para poder jugar.

Bueno, y hasta aquí mi guía acerca de cómo crear un servidor dedicado de Project Zomboid. Espero que os haya gustado y que os sirva para disfrutar de este gran título. ¡Nos vemos en otros posts!

4 comentarios en «Servidor dedicado Project Zomboid en Linux»

  1. Lo primero muchas gracias por la aportación. He instalado todo manualmente sin problemas, he ejecutado [bash «~/pz_server/server/start-server.sh»] y todo operativo en el servidor. He finalizado con un Ctrl+C para ver opciones de configuración y demás, pues ha desaparecido el «start-server.sh» y tampoco me permite reinstalar, ¿alguna idea?

    Responder
    • Hola,

      El comando ctrl+c es una señal de salida, por lo que no debería borrar el fichero start-server.sh. La única solución que se me ocurre es que lo reinstales eliminándolo primero con el comando:

      ~/pz_server/bin/steamcmd.sh +app_uninstall 380870 +quit

      Un saludo.

      Responder
  2. Hola,

    Mi intención era que la versión se actualizara automáticamente en el dockerhub, pero cambiaron la forma de poner las actualizaciones en el foro y dejó de funcionar. El defecto que tiene este juego es que no son muy estables en cuanto a la publicación de las versiones, y me he encontrado veces en las que la versión de la web era inferior a la última.
    He actualizado el script y ya están disponibles de nuevo las últimas versiones. Además he añadido una variable de entorno que permite forzar la actualización en cada inicio, por lo que incluso con una imagen antigua puedes actualizar y tener la última versión.

    Un saludo.

    Responder
  3. Buenas, primero muchas gracias por la guía.

    He usado la guía de docker-compose para montar el servidor, pero no sé cómo hacer que actualice a la última versión del juego, la 41.77.

    No parece que se haga cuando se monta el servidor con «docker-compose Up». Podrías indicarme?

    Muchas gracias

    Responder

Deja un comentario

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