Servidor dedicado de Arma 3 (modo Life) listo para levantar con Docker, sobre una imagen nativa de Debian. La imagen instala SteamCMD, descarga el servidor de Arma 3 automáticamente y deja el contenedor vivo para que arranques y pares el servidor cuando quieras con docker exec. Incluye un servicio MariaDB integrado para extDB3.
- Docker y Docker Compose instalados.
- Una cuenta de Steam con Steam Guard. No necesita tener Arma 3 comprado para descargar el servidor dedicado. Se recomienda usar una cuenta secundaria.
- En Linux, tu usuario del host debe tener UID 1000 (lo compruebas con
id -u). Es lo que hace que puedas editar los ficheros de los volúmenes sin problemas de permisos. En Windows esto no aplica, puedes ignorarlo.
arma3-life-docker/
├── docker-compose.yml
├── .env ← lo creas tú (NO se sube al repo)
├── .env.example ← plantilla de variables
├── mariadb/ ← datos de la base de datos (se crea sola)
└── files/
├── Dockerfile
├── entrypoint.sh
├── start ← se copia a /usr/local/bin en la imagen
├── stop ← se copia a /usr/local/bin en la imagen
├── arma3/ ← aquí se instala el servidor
│ ├── automatic_restart.sh ← lo renombras desde el _example
│ ├── server.cfg
│ ├── @extDB3/ ← mod (en minúsculas)
│ ├── @life_server/ ← mod (en minúsculas)
│ └── extdb3-conf.ini
├── configs/
├── mpmissions/ ← aquí va tu misión (ej. HydraLife.Altis)
├── steam/ ← sesión de Steam cacheada
└── steam-share/
1. Crea las carpetas de los volúmenes antes de levantar nada, para que nazcan con tu UID y no como root:
mkdir -p files/arma3 files/configs files/mpmissions files/steam files/steam-share mariadb2. Crea tu fichero .env a partir de la plantilla y rellena tus datos:
cp .env.example .envVariables que tienes que rellenar en el .env:
STEAM_USER=tu_usuario_steam
STEAM_PASS=tu_contraseña_steam
DB_ROOT_PASSWORD=una_contraseña_root
DB_NAME=altislife
DB_USER=tu_usuario_bd
DB_PASSWORD=tu_contraseña_bd
La primera vez hay que iniciar sesión en Steam de forma interactiva para meter el código de Steam Guard. Si lanzas directamente docker compose up -d sin haber hecho esto, SteamCMD no podrá pedirte el código, fallará, y el contenedor no arrancará.
Ejecuta SteamCMD una vez de forma interactiva para que cachee la sesión:
docker compose run --rm --entrypoint /home/steam/steamcmd/steamcmd.sh arma3 \
+force_install_dir /home/steam/arma3 +login TU_USUARIO +quitTe pedirá la contraseña y el código de Steam Guard que te llega al móvil. Una vez completado, la sesión queda guardada en files/steam, que es un volumen persistente, así que los siguientes arranques ya no te pedirán el móvil.
Si algún día la sesión caduca (cambio de contraseña, inactividad larga), solo tienes que repetir este paso una vez.
Levantar el contenedor (instala/actualiza el servidor si hace falta y lo deja listo, con Arma parado):
docker compose up -dArrancar el servidor de Arma:
docker exec arma3 startParar el servidor de Arma (sin tumbar el contenedor):
docker exec arma3 stopEl contenedor sigue vivo aunque el servidor de Arma esté parado, gracias a un proceso guardián. Por eso puedes arrancar y parar el servidor tantas veces como quieras con docker exec.
Antes de hacer
docker compose down, para el servidor condocker exec arma3 stoppara que cierre de forma ordenada.
Renombra el fichero de ejemplo y ajústalo a tu setup:
mv files/arma3/automatic_restart_example.sh files/arma3/automatic_restart.sh
chmod +x files/arma3/automatic_restart.shDentro está la línea de lanzamiento de arma3server_x64, donde defines la misión, los mods y los parámetros del servidor.
- Coloca los mods dentro de
files/arma3/, con los nombres en minúsculas (@extdb3,@life_server), o el servidor no arrancará en Linux. - Coloca tu misión en
files/mpmissions/(por ejemploHydraLife.Altis).
En el extdb3-conf.ini, la IP no es 127.0.0.1, sino el nombre del servicio de la base de datos:
IP = mariadb
Port = 3306
Username = tu_usuario_bd
Password = tu_contraseña_bd
Database = altislifeComo Arma y MariaDB están en el mismo docker-compose.yml, se ven por nombre. El usuario, contraseña y base de datos deben coincidir con los del .env.
La dificultad personalizada no se configura en el server.cfg, sino en el fichero .Arma3Profile. Para editarla:
- Arranca el servidor una vez para que se genere el fichero de perfil.
- Para el servidor (
docker exec arma3 stop) — si lo editas con el servidor corriendo, al cerrarse te pisará los cambios. - Edita el
.Arma3Profiledentro de tu carpeta de profiles (bajofiles/arma3/profiles/) y añade tu bloqueclass DifficultyPresets. - Arranca de nuevo.
En el server.cfg solo se selecciona el preset (forcedDifficulty = "Custom";), pero su contenido vive en el .Arma3Profile.
El servidor se instala solo en el primer arranque y no se vuelve a descargar mientras el binario exista. Cuando salga una versión nueva y necesites actualizar, hazlo manualmente:
docker exec arma3 stop
docker exec arma3 /home/steam/steamcmd/steamcmd.sh \
+force_install_dir /home/steam/arma3 +login TU_USUARIO +app_update 233780 +quit
docker exec arma3 startPuedes programar reinicios con cron en el host llamando a tus scripts. Por ejemplo, un script reiniciar.sh:
docker exec arma3 stop
sleep 20
docker exec arma3 startY una entrada de crontab (crontab -e) para reiniciar cada día a las 6:00:
0 6 * * * /ruta/a/reiniciar.sh
- Nunca subas el
.enval repositorio. Contiene tus credenciales de Steam y de la base de datos. Asegúrate de que está en el.gitignore. - Lo mismo aplica al
extdb3-conf.ini(lleva la contraseña de la BD) y a las carpetas de datos (files/steam,files/arma3,mariadb). - Antes de abrir el servidor a jugadores, cambia las contraseñas de ejemplo del
server.cfgy ponverifySignatures = 2.
- Los puertos del servidor son UDP (2302–2306).
- El servidor de Arma corre como el usuario
steam(UID 1000) dentro del contenedor. - Los logs de cada arranque se archivan con fecha en
files/arma3/logs/.
Hecho por MDeMariano