Files
cluster/minecraft/install-playbook.yml
Khwezi Mngoma 0410dc3950 first commit
2026-02-22 16:43:17 +02:00

106 lines
3.5 KiB
YAML

---
- name: Full Minecraft Server Setup (Paper + Geyser + Floodgate)
hosts: gameservers
become: yes
vars:
minecraft_user: minecraft
minecraft_home: /opt/minecraft
paper_version: "1.21.1"
paper_build: "130"
java_opts: "-Xms1G -Xmx3G -XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:G1NewSizePercent=30 -XX:G1MaxNewSizePercent=40 -XX:G1HeapRegionSize=8M -XX:G1ReservePercent=20 -XX:G1HeapWastePercent=5 -XX:G1MixedGCCountTarget=4 -XX:InitiatingHeapOccupancyPercent=15 -XX:G1MixedGCLiveThresholdPercent=90 -XX:G1RSetUpdatingPauseTimePercent=5 -XX:SurvivorRatio=32 -XX:+PerfDisableSharedMem -XX:MaxTenuringThreshold=1"
tasks:
- name: Ensure required packages
apt:
name:
- openjdk-21-jdk
- curl
- unzip
state: present
update_cache: yes
- name: Create minecraft user
user:
name: "{{ minecraft_user }}"
shell: /bin/bash
create_home: yes
home: "{{ minecraft_home }}"
- name: Create server directory
file:
path: "{{ minecraft_home }}"
state: directory
owner: "{{ minecraft_user }}"
group: "{{ minecraft_user }}"
mode: '0755'
- name: Download PaperMC server
get_url:
url: "https://api.papermc.io/v2/projects/paper/versions/{{ paper_version }}/builds/{{ paper_build }}/downloads/paper-{{ paper_version }}-{{ paper_build }}.jar"
dest: "{{ minecraft_home }}/paper.jar"
owner: "{{ minecraft_user }}"
group: "{{ minecraft_user }}"
mode: '0755'
- name: Download Geyser-Spigot plugin
get_url:
url: "https://ci.opencollab.dev/job/GeyserMC/job/Geyser/job/master/lastSuccessfulBuild/artifact/bootstrap/spigot/target/Geyser-Spigot.jar"
dest: "{{ minecraft_home }}/plugins/Geyser-Spigot.jar"
owner: "{{ minecraft_user }}"
group: "{{ minecraft_user }}"
mode: '0644'
- name: Download Floodgate plugin
get_url:
url: "https://ci.opencollab.dev/job/GeyserMC/job/Floodgate/job/master/lastSuccessfulBuild/artifact/spigot/build/libs/floodgate-spigot.jar"
dest: "{{ minecraft_home }}/plugins/floodgate-spigot.jar"
owner: "{{ minecraft_user }}"
group: "{{ minecraft_user }}"
mode: '0644'
- name: Create start.sh script
copy:
dest: "{{ minecraft_home }}/start.sh"
content: |
#!/bin/bash
cd {{ minecraft_home }}
exec java {{ java_opts }} -jar paper.jar nogui
owner: "{{ minecraft_user }}"
group: "{{ minecraft_user }}"
mode: '0755'
- name: Accept EULA
copy:
dest: "{{ minecraft_home }}/eula.txt"
content: "eula=true"
owner: "{{ minecraft_user }}"
group: "{{ minecraft_user }}"
mode: '0644'
- name: Create systemd service
copy:
dest: /etc/systemd/system/minecraft.service
content: |
[Unit]
Description=Minecraft Server
After=network.target
[Service]
User={{ minecraft_user }}
WorkingDirectory={{ minecraft_home }}
ExecStart={{ minecraft_home }}/start.sh
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.target
mode: '0644'
- name: Reload systemd and enable Minecraft service
systemd:
daemon_reload: yes
name: minecraft
enabled: yes
state: started