106 lines
3.5 KiB
YAML
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
|