--- title: "Cómo crear un servidor de Project Zomboid en Ubuntu 24.04" description: "Instala un servidor dedicado de Project Zomboid con SteamCMD en Ubuntu 24.04, configúralo, añade mods del Workshop y ejecútalo como servicio systemd con copias." category: "Servidores de Juegos" language: es source: https://cubepath.com/es/docs/servidores-de-juegos/servidor-dedicado-de-project-zomboid updated: 2026-09-25 --- # Cómo crear un servidor de Project Zomboid en Ubuntu 24.04 Project Zomboid es un juego de supervivencia cooperativo cuyo servidor dedicado se distribuye gratis a través de Steam (app ID `380870`). En este tutorial instalarás el servidor con SteamCMD en Ubuntu 24.04, lo configurarás con los archivos `servertest.ini` y `servertest_SandboxVars.lua`, añadirás mods del Steam Workshop y lo dejarás funcionando como servicio systemd que guarda la partida al detenerse, con copias de seguridad diarias. ## Requisitos previos - Un servidor con Ubuntu 24.04 LTS de 64 bits, por ejemplo un VPS de CubePath. - Un usuario no root con privilegios `sudo`. - Al menos 2 núcleos y 4 GB de RAM para unos 8 jugadores; cuenta con 8 GB o más si vas a tener muchos jugadores o mods. - Unos 10 GB libres en disco para el servidor y las partidas. - Los puertos UDP `16261` y `16262` accesibles desde Internet. ## Paso 1: Instalar SteamCMD SteamCMD es el cliente de línea de comandos de Steam que descarga y actualiza servidores dedicados. En Ubuntu está en el repositorio `multiverse` y necesita la arquitectura de 32 bits: ```bash sudo add-apt-repository multiverse sudo dpkg --add-architecture i386 sudo apt update sudo apt install steamcmd ``` Durante la instalación aparece el acuerdo de licencia de Steam: selecciona **Aceptar** para continuar. El ejecutable queda en `/usr/games/steamcmd`. ## Paso 2: Crear un usuario dedicado El servidor no debe ejecutarse como root. Crea un usuario de sistema `steam` con su propio directorio personal, donde vivirán tanto el servidor como las partidas: ```bash sudo useradd --create-home --shell /bin/bash steam ``` Comprueba que el usuario existe: ```bash id steam ``` ```output uid=1001(steam) gid=1001(steam) groups=1001(steam) ``` ## Paso 3: Descargar el servidor de Project Zomboid Descarga el servidor en `/home/steam/pzserver` con una sesión anónima; no hace falta tener el juego en tu cuenta. `+force_install_dir` debe ir antes de `+login`: ```bash sudo -u steam /usr/games/steamcmd +force_install_dir /home/steam/pzserver +login anonymous +app_update 380870 validate +quit ``` La primera ejecución también actualiza SteamCMD, así que tarda unos minutos. Al terminar verás: ```output Success! App '380870' fully installed. ``` > Nota: este comando instala la rama estable. Si quieres la rama de pruebas que publiquen los desarrolladores, añade `-beta nombre_de_la_rama` después de `380870`. Todos los jugadores deben usar la misma versión que el servidor. Comprueba que está el script de arranque: ```bash ls /home/steam/pzserver/start-server.sh ``` ## Paso 4: Primer arranque y contraseña de administrador El primer arranque genera los archivos de configuración y pide la contraseña del usuario `admin` del servidor, así que hazlo de forma interactiva. Abre una sesión como el usuario `steam`: ```bash sudo -u steam -i cd ~/pzserver ./start-server.sh ``` Cuando aparezca `Enter new administrator password:`, escribe una contraseña robusta y confírmala. Espera a que el log muestre una línea parecida a esta: ```output LOG : Network , ... > *** SERVER STARTED **** ``` Escribe `quit` en la consola para detenerlo de forma ordenada y vuelve a tu usuario con `exit`. Los archivos generados quedan en `/home/steam/Zomboid/Server/`: ```bash sudo ls /home/steam/Zomboid/Server/ ``` ```output servertest.ini servertest_SandboxVars.lua servertest_spawnregions.lua ``` `servertest` es el nombre de servidor por defecto. Si quieres varios mundos, arranca con `-servername otro_nombre` y se crearán archivos con ese prefijo. ## Paso 5: Configurar el servidor `servertest.ini` contiene los ajustes de red y de administración. Ábrelo como el usuario `steam`: ```bash sudo -u steam nano /home/steam/Zomboid/Server/servertest.ini ``` Busca y ajusta estas claves (el archivo tiene muchas más; deja el resto como está): ```ini PublicName=Mi servidor de Project Zomboid PublicDescription=Servidor cooperativo en Europa Public=true MaxPlayers=16 Password=your_server_password DefaultPort=16261 UDPPort=16262 PVP=false PauseEmpty=true SaveWorldEveryMinutes=15 ``` - `Public=true` hace que aparezca en la lista pública del juego; con `false` solo se entra por IP. - `Password` es la contraseña para unirse; déjala vacía para un servidor abierto. - `PauseEmpty=true` detiene el tiempo del mundo cuando no hay nadie conectado. - `SaveWorldEveryMinutes` fuerza guardados periódicos además del que se hace al apagar. Las reglas de la partida (cantidad de zombis, velocidad del tiempo, pérdida de objetos, etc.) están en `servertest_SandboxVars.lua`. La forma más segura de generarlo es crear un preset en el editor Sandbox del propio juego y copiar sus valores, porque los nombres de las variables cambian entre versiones. Si lo editas a mano, cambia solo valores de claves existentes, por ejemplo: ```bash sudo -u steam nano /home/steam/Zomboid/Server/servertest_SandboxVars.lua ``` > Importante: los cambios en `SandboxVars.lua` que afectan a la generación del mundo solo se aplican a zonas del mapa que aún no se han visitado. Ajústalo antes de que empiecen a jugar. ### Asignar memoria a la JVM El servidor es una aplicación Java y el límite de memoria se define en `ProjectZomboid64.json`. Abre el archivo: ```bash sudo -u steam nano /home/steam/pzserver/ProjectZomboid64.json ``` Dentro del array `vmArgs` localiza el argumento `-Xmx` y ajústalo a unos 2 GB menos que la RAM total del servidor, por ejemplo en un servidor de 8 GB: ```json "-Xmx6g", ``` Este archivo se sobrescribe en cada `app_update`, así que revísalo después de actualizar. ## Paso 6: Abrir los puertos en el firewall Project Zomboid usa el puerto UDP `16261` para la conexión y la consulta de Steam, y `16262` para el tráfico de los clientes. Permite ambos y SSH antes de activar UFW: ```bash sudo ufw allow OpenSSH sudo ufw allow 16261:16262/udp sudo ufw enable ``` Verifica las reglas: ```bash sudo ufw status ``` ```output Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere 16261:16262/udp ALLOW Anywhere ``` ## Paso 7: Crear el servicio systemd El servidor lee los comandos de administración desde la entrada estándar. Para poder enviárselos cuando corre en segundo plano, y para que guarde la partida al detener el servicio, se usa un FIFO gestionado por un socket de systemd. Crea la unidad del socket: ```bash sudo nano /etc/systemd/system/zomboid.socket ``` ```ini [Unit] BindsTo=zomboid.service [Socket] ListenFIFO=/home/steam/pzserver/zomboid.control FileDescriptorName=control RemoveOnStop=true SocketMode=0660 SocketUser=steam SocketGroup=steam ``` Crea la unidad del servicio: ```bash sudo nano /etc/systemd/system/zomboid.service ``` ```ini [Unit] Description=Project Zomboid dedicated server After=network-online.target zomboid.socket Wants=network-online.target Requires=zomboid.socket [Service] Type=simple User=steam Group=steam WorkingDirectory=/home/steam/pzserver ExecStart=/bin/sh -c 'exec /home/steam/pzserver/start-server.sh < /home/steam/pzserver/zomboid.control' ExecStop=/bin/sh -c 'echo save > /home/steam/pzserver/zomboid.control; sleep 15; echo quit > /home/steam/pzserver/zomboid.control' KillSignal=SIGCONT TimeoutStopSec=120 [Install] WantedBy=multi-user.target ``` `ExecStart` conecta la entrada estándar del servidor al FIFO que crea el socket, y `ExecStop` envía `save` y luego `quit` al servidor; `KillSignal=SIGCONT` evita que systemd lo mate antes de que termine de guardar. Si pasado `TimeoutStopSec` sigue vivo, systemd lo fuerza. Recarga systemd y arranca el servidor: ```bash sudo systemctl daemon-reload sudo systemctl enable --now zomboid.service ``` Comprueba el estado y sigue el log hasta ver `SERVER STARTED`: ```bash systemctl status zomboid.service sudo journalctl -u zomboid.service -f ``` Pulsa `Ctrl+C` para salir del log. Desde el juego, en **Unirse**, añade la IP `your_server_ip` y el puerto `16261` para conectarte. ### Enviar comandos a la consola Escribe en el FIFO como el usuario `steam`. En la consola del servidor los comandos van sin barra inicial: ```bash echo 'servermsg "Reinicio en 5 minutos"' | sudo -u steam tee /home/steam/pzserver/zomboid.control > /dev/null echo 'players' | sudo -u steam tee /home/steam/pzserver/zomboid.control > /dev/null echo 'grantadmin "nombre_jugador"' | sudo -u steam tee /home/steam/pzserver/zomboid.control > /dev/null ``` La respuesta aparece en `journalctl -u zomboid.service`. Otros comandos útiles son `save`, `kickuser "nombre"`, `banuser "nombre"` y `help`, que lista todos los disponibles en tu versión. ## Paso 8: Añadir mods del Steam Workshop El servidor descarga los mods por sí mismo al arrancar. Cada mod necesita dos datos que aparecen en su página del Workshop: el **Workshop ID** (el número de la URL) y el **Mod ID** (indicado en la descripción, a veces varios por ítem). Edita `servertest.ini` con el servicio detenido, porque el servidor reescribe el archivo al apagarse: ```bash sudo systemctl stop zomboid.service sudo -u steam nano /home/steam/Zomboid/Server/servertest.ini ``` Rellena las dos claves separando los valores con punto y coma, en el mismo orden: ```ini WorkshopItems=2169435993;2392709985 Mods=modoptions;tsarslib ``` Los IDs del ejemplo son ilustrativos; usa los de los mods que elijas. Arranca de nuevo y comprueba en el log que se descargan: ```bash sudo systemctl start zomboid.service sudo journalctl -u zomboid.service | grep -i workshop ``` Los clientes descargan automáticamente los mismos mods al conectarse. ## Paso 9: Actualizar el servidor Cuando sale una actualización del juego, los clientes no pueden entrar hasta que actualices el servidor. Detén el servicio, actualiza con SteamCMD y vuelve a arrancar: ```bash sudo systemctl stop zomboid.service sudo -u steam /usr/games/steamcmd +force_install_dir /home/steam/pzserver +login anonymous +app_update 380870 validate +quit sudo systemctl start zomboid.service ``` Recuerda volver a ajustar `-Xmx` en `ProjectZomboid64.json` si lo habías cambiado. ## Paso 10: Programar copias de seguridad El mundo se guarda en `/home/steam/Zomboid/Saves/Multiplayer/servertest` y los usuarios y bloqueos en `/home/steam/Zomboid/db/servertest.db`. Este script fuerza un guardado, espera a que termine y empaqueta el directorio `Zomboid` completo (incluye también la configuración), conservando 7 días: ```bash sudo nano /usr/local/bin/pz-backup ``` ```bash #!/usr/bin/env bash set -euo pipefail src_dir="/home/steam/Zomboid" dest_dir="/home/steam/backups" control="/home/steam/pzserver/zomboid.control" mkdir -p "$dest_dir" if [[ -p "$control" ]]; then echo save > "$control" sleep 30 fi tar -czf "$dest_dir/zomboid-$(date +%F_%H%M).tar.gz" \ -C "$(dirname "$src_dir")" "$(basename "$src_dir")" find "$dest_dir" -name 'zomboid-*.tar.gz' -mtime +7 -delete ``` Hazlo ejecutable y pruébalo como el usuario `steam`: ```bash sudo chmod 755 /usr/local/bin/pz-backup sudo -u steam /usr/local/bin/pz-backup sudo ls -lh /home/steam/backups ``` ```output -rw-r--r-- 1 steam steam 212M sep 25 04:00 zomboid-2026-09-25_0400.tar.gz ``` Programa una copia diaria a las 04:00 en el crontab del usuario `steam`: ```bash sudo crontab -u steam -e ``` ```text 0 4 * * * /usr/local/bin/pz-backup ``` Guarda también las copias fuera del servidor (por ejemplo, con `rsync` o `rclone` a un almacenamiento de objetos) para no perderlas si falla el disco. ## Solución de problemas - **El servidor no aparece en la lista pública**: comprueba `Public=true` y que los puertos UDP `16261-16262` están abiertos. Mientras tanto, prueba a conectar directamente por IP. - **Los jugadores no pueden entrar tras una actualización del juego**: el servidor tiene una versión distinta a la del cliente. Repite el paso 9. - **`java.lang.OutOfMemoryError` en el log**: sube `-Xmx` en `ProjectZomboid64.json` o reduce `MaxPlayers` y mods. - **Un mod no carga**: revisa que el orden de `WorkshopItems` y `Mods` es coherente y que el Mod ID es exactamente el de la página del Workshop. El log indica qué ID no encuentra. - **Los cambios en `servertest.ini` se pierden**: se editó con el servidor en marcha. Detén el servicio antes de editar. ## Conclusión Tienes un servidor dedicado de Project Zomboid instalado con SteamCMD, configurado, ejecutándose como servicio systemd que guarda al detenerse y con copias de seguridad diarias. A partir de aquí puedes activar la lista blanca (`Open=false` en `servertest.ini`) para servidores privados, automatizar las actualizaciones con LinuxGSM o monitorizar el uso de CPU y RAM para dimensionar el servidor según crezca la comunidad.