Despliega tu propio servidor de Minecraft con backups automatizados usando Ansible

Despliega tu propio servidor de Minecraft con backups automatizados usando Ansible

Publicado el 27 de octubre de 2025

¿Te gustaría tener un servidor privado de Minecraft, con actualizaciones y copias de seguridad automáticas, todo orquestado por Ansible? Hoy te traigo un playbook avanzado que va un paso más allá de los despliegues básicos, combinando diversión, automatización y seguridad.

Con este playbook aprenderás a:

  • Instalar e iniciar un servidor dedicado de Minecraft (Java Edition) en Linux.
  • Configurar el servicio con systemd para gestión fiable y reinicios automáticos.
  • Programar copias de seguridad automáticas de los mundos, incluyendo retención de ficheros antiguos.
  • Preparar dependencias y ajustar configuraciones de red.

¡Ideal para quienes juegan en grupo o para admins DevOps que quieren aplicar automatización a proyectos más ligeros!

Requisitos

  • Servidor Linux (Ubuntu 20.04+/Debian/CentOS)
  • Python 3
  • Ansible 2.9+ instalado en tu máquina de control
  • Acceso SSH al servidor
  • Porteo de los puertos 25565 (TCP) para Minecraft

El Playbook completo de Ansible

Guarda este contenido como servidor-minecraft.yml y ejecuta ansible-playbook -i tu_inventario servidor-minecraft.yml.

---
- name: Servidor Minecraft con backups automatizados
  hosts: minecraft_servers
  become: yes
  vars:
    mc_user: minecraft
    mc_dir: /opt/minecraft
    mc_version: "1.20.1"
    mc_server_jar: "server.jar"
    backup_dir: "/opt/minecraft/backups"
    backup_retention: 7
    java_package: "openjdk-17-jre-headless"
    server_port: 25565

  tasks:
    - name: Instala Java requerido por Minecraft
      apt:
        name: "{{ java_package }}"
        state: present
      when: ansible_os_family == "Debian"

    - name: Instala Java (RedHat/CentOS)
      yum:
        name: "java-17-openjdk-headless"
        state: present
      when: ansible_os_family == "RedHat"

    - name: Crea usuario específico para Minecraft
      user:
        name: "{{ mc_user }}"
        system: yes
        shell: /bin/bash
        create_home: yes

    - name: Crea directorios principales
      file:
        path: "{{ item }}"
        state: directory
        owner: "{{ mc_user }}"
        mode: "0755"
      loop:
        - "{{ mc_dir }}"
        - "{{ backup_dir }}"

    - name: Descarga la última versión del servidor de Minecraft
      get_url:
        url: "https://launcher.mojang.com/v1/objects/4018fffa8c2f1c232f381b7f3debbf4847a19d47/server.jar"
        dest: "{{ mc_dir }}/{{ mc_server_jar }}"
        mode: "0755"
        owner: "{{ mc_user }}"

    - name: Acepta EULA de Minecraft
      copy:
        dest: "{{ mc_dir }}/eula.txt"
        content: "eula=true\n"
        owner: "{{ mc_user }}"
        mode: "0644"

    - name: Crea archivo de servicio systemd para Minecraft
      copy:
        dest: /etc/systemd/system/minecraft.service
        content: |
          [Unit]
          Description=Minecraft Server
          After=network.target

          [Service]
          User={{ mc_user }}
          Nice=5
          WorkingDirectory={{ mc_dir }}
          ExecStart=/usr/bin/java -Xmx2G -Xms1G -jar {{ mc_server_jar }} nogui
          Restart=on-failure

          [Install]
          WantedBy=multi-user.target
        mode: "0644"

    - name: Recarga daemons de systemd
      systemd:
        daemon_reload: yes

    - name: Habilita e inicia el servicio de Minecraft
      systemd:
        name: minecraft
        enabled: yes
        state: started

    - name: Crea script de backup automático
      copy:
        dest: "{{ mc_dir }}/backup.sh"
        content: |
          #!/bin/bash
          BACKUP_DIR="{{ backup_dir }}"
          WORLD_DIR="{{ mc_dir }}/world"
          TAR_FILE="$BACKUP_DIR/minecraft-$(date +%Y%m%d-%H%M%S).tar.gz"
          tar -czf $TAR_FILE $WORLD_DIR
          find $BACKUP_DIR -type f -name "*.tar.gz" -mtime +{{ backup_retention }} -delete
        owner: "{{ mc_user }}"
        mode: "0755"

    - name: Programa backup con cron
      cron:
        name: "Backup Minecraft World"
        user: "{{ mc_user }}"
        minute: "0"
        hour: "4"
        job: "{{ mc_dir }}/backup.sh"
    

Notas: Cambia la URL de server.jar si quieres una versión concreta. El backup mantiene 7 días por defecto. Modifica variables según tus necesidades.

Consejos extra y troubleshooting

  • El primer arranque puede tardar: revisa systemctl status minecraft si ves problemas.
  • Recuerda abrir el puerto 25565 en tu firewall.
  • Personaliza el server.properties para ajustar opciones de juego.
  • Para restaurar un backup, descomprime el archivo .tar.gz en {{ mc_dir }}/world y reinicia el servicio.
  • Este playbook es un punto de partida: puedes añadir mods, mapas y uds propios integrando nuevos tasks y variables.

¿Te ha gustado? ¡Déjanos un comentario con la próxima aplicación que quieras ver automatizada con Ansible!

Avatar

Por Mid