diff --git a/ansible-playbook.yml b/ansible-playbook.yml index 5c14604..c2cd91b 100755 --- a/ansible-playbook.yml +++ b/ansible-playbook.yml @@ -19,4 +19,5 @@ - gitea - jellyfin - wazuh + - minecraft diff --git a/roles/minecraft/tasks/main.yml b/roles/minecraft/tasks/main.yml new file mode 100644 index 0000000..fbbb0c6 --- /dev/null +++ b/roles/minecraft/tasks/main.yml @@ -0,0 +1,35 @@ +--- +# Paper Minecraft server with Geyser (Bedrock<->Java bridge) + Floodgate (Bedrock auth without Java account). +# Java players: mc.boxswapper.io:25565 (TCP); Bedrock players: mc.boxswapper.io:19132 (UDP) - Geyser translates, Floodgate authenticates. +# External prerequisites (NOT managed by this repo): +# - Cloudflare A record mc.boxswapper.io -> public IP (grey-cloud, like vpn.boxswapper.io) +# - Router port forwards: TCP 25565 + UDP 19132 -> 10.10.0.45 +- name: Deploy Minecraft Server + containers.podman.podman_container: + image: docker.io/itzg/minecraft-server:latest + name: minecraft + env: + EULA: "TRUE" + TYPE: PAPER + VERSION: "{{ minecraft_version }}" + MEMORY: "{{ minecraft_memory }}" + MOTD: "{{ minecraft_motd }}" + DIFFICULTY: "{{ minecraft_difficulty }}" + GAMEMODE: "{{ minecraft_gamemode }}" + MAX_PLAYERS: "{{ minecraft_max_players }}" + VIEW_DISTANCE: "{{ minecraft_view_distance }}" + ONLINE_MODE: "{{ minecraft_online_mode }}" + PLUGINS: "{{ minecraft_plugins | join(',') }}" + restart_policy: always + recreate: true + state: started + volumes: + - /opt/apps/minecraft/data:/data:z + - /usr/share/zoneinfo/America/Denver:/etc/timezone:ro + - /etc/localtime:/etc/localtime:ro + ports: + - "25565:25565" + - "19132:19132/udp" + network: + - npm_internal + ip: '{{ minecraft_ip }}' \ No newline at end of file diff --git a/vars.yml b/vars.yml index 0efdced..10c9c0c 100755 --- a/vars.yml +++ b/vars.yml @@ -15,6 +15,7 @@ directories: - /opt/apps/wazuh/config/wazuh_cluster - /opt/apps/wazuh/config/wazuh_dashboard - /opt/apps/wazuh/config/wazuh_indexer + - /opt/apps/minecraft ## Jellyfin directories for media @@ -31,6 +32,7 @@ images: - docker.io/wazuh/wazuh-dashboard:{{ wazuh_version }} - docker.io/wazuh/wazuh-indexer:{{ wazuh_version }} - docker.io/wazuh/wazuh-manager:{{ wazuh_version }} + - docker.io/itzg/minecraft-server:latest wazuh_version: 4.14.1 @@ -65,3 +67,20 @@ wazuh_indexer_ip: 10.10.0.42 wazuh_agent_rpm: wazuh-agent-4.14.1-1.x86_64.rpm wazuh_server_address: wazuh.boxswapper.io +## Minecraft server (Java + Bedrock crossplay via Geyser/Floodgate) +## External DNS (not managed here): Cloudflare A record mc.boxswapper.io -> public IP (grey-cloud, +## same as vpn.boxswapper.io / wazuh.boxswapper.io). Router MUST forward TCP 25565 + UDP 19132 -> 10.10.0.45. +minecraft_host: mc.boxswapper.io +minecraft_ip: 10.10.0.45 +minecraft_version: latest +minecraft_memory: 2G +minecraft_motd: "Internal Apps Minecraft - mc.boxswapper.io" +minecraft_difficulty: normal +minecraft_gamemode: survival +minecraft_max_players: 20 +minecraft_view_distance: 10 +minecraft_online_mode: "TRUE" +minecraft_plugins: + - https://download.geysermc.org/v2/projects/geyser/versions/latest/builds/latest/downloads/spigot + - https://download.geysermc.org/v2/projects/floodgate/versions/latest/builds/latest/downloads/spigot +