update
This commit is contained in:
@@ -1,5 +0,0 @@
|
||||
---
|
||||
- name: Vérifier si Java est déjà installé
|
||||
ansible.builtin.shell: "java -version"
|
||||
register: java_check
|
||||
ignore_errors: yes
|
@@ -1,6 +0,0 @@
|
||||
---
|
||||
- name: Installer Java {{ java_version }}
|
||||
ansible.builtin.package:
|
||||
name: "{{ java_package }}"
|
||||
state: present
|
||||
when: java_check.rc != 0
|
@@ -1,5 +0,0 @@
|
||||
---
|
||||
- name: Vérifier la version de Java installée
|
||||
ansible.builtin.shell: "java -version"
|
||||
register: java_version_output
|
||||
changed_when: false
|
@@ -1,4 +0,0 @@
|
||||
---
|
||||
- name: Afficher la version de Java
|
||||
ansible.builtin.debug:
|
||||
msg: "{{ java_version_output.stderr }}"
|
@@ -1,12 +0,0 @@
|
||||
---
|
||||
- name: Inclure la tâche de vérification
|
||||
ansible.builtin.import_tasks: 01-check-java.yml
|
||||
|
||||
- name: Inclure la tâche d'installation
|
||||
ansible.builtin.import_tasks: 02-install-java.yml
|
||||
|
||||
- name: Inclure la tâche de vérification d'installation
|
||||
ansible.builtin.import_tasks: 03-check-java-install.yml
|
||||
|
||||
- name: Inclure la tâche d'affichage de la version installé
|
||||
ansible.builtin.import_tasks: 04-display-version.yml
|
25
roles/01-server_hardening/defaults/main.yml
Normal file
25
roles/01-server_hardening/defaults/main.yml
Normal file
@@ -0,0 +1,25 @@
|
||||
---
|
||||
# Configuration par défaut pour le hardening
|
||||
ssh_port: 22
|
||||
ssh_protocol: 2
|
||||
ssh_permit_root_login: "no"
|
||||
ssh_password_authentication: "no"
|
||||
ssh_pub_key_authentication: "yes"
|
||||
ssh_allow_users: ["ansible"]
|
||||
ssh_max_auth_tries: 3
|
||||
ssh_client_alive_interval: 300
|
||||
ssh_client_alive_count_max: 2
|
||||
|
||||
# Firewall
|
||||
ufw_default_incoming: deny
|
||||
ufw_default_outgoing: allow
|
||||
ufw_allowed_ports:
|
||||
- 22/tcp
|
||||
- 25565/tcp
|
||||
- 25575/tcp
|
||||
|
||||
# Fail2ban
|
||||
fail2ban_enabled: true
|
||||
fail2ban_bantime: 3600
|
||||
fail2ban_findtime: 600
|
||||
fail2ban_maxretry: 3
|
0
roles/01-server_hardening/handlers/main.yml
Normal file
0
roles/01-server_hardening/handlers/main.yml
Normal file
7
roles/01-server_hardening/tasks/01-update-system.yml
Normal file
7
roles/01-server_hardening/tasks/01-update-system.yml
Normal file
@@ -0,0 +1,7 @@
|
||||
---
|
||||
- name: Update apt cache for Debian/Ubuntu
|
||||
apt:
|
||||
update_cache: yes
|
||||
cache_valid_time: 3600
|
||||
when: ansible_os_family == "Debian"
|
||||
tags: ['system-update']
|
11
roles/01-server_hardening/tasks/02-configure-ssh.yml
Normal file
11
roles/01-server_hardening/tasks/02-configure-ssh.yml
Normal file
@@ -0,0 +1,11 @@
|
||||
---
|
||||
- name: Configure SSH daemon
|
||||
template:
|
||||
src: sshd_config.j2
|
||||
dest: /etc/ssh/sshd_config
|
||||
backup: yes
|
||||
mode: '0600'
|
||||
owner: root
|
||||
group: root
|
||||
notify: restart sshd
|
||||
tags: ['ssh-config']
|
@@ -0,0 +1,6 @@
|
||||
---
|
||||
- name: Install UFW firewall
|
||||
package:
|
||||
name: ufw
|
||||
state: present
|
||||
tags: ['firewall-install']
|
7
roles/01-server_hardening/tasks/04-install-fail2ban.yml
Normal file
7
roles/01-server_hardening/tasks/04-install-fail2ban.yml
Normal file
@@ -0,0 +1,7 @@
|
||||
--
|
||||
- name: Install fail2ban
|
||||
package:
|
||||
name: fail2ban
|
||||
state: present
|
||||
when: fail2ban_enabled
|
||||
tags: ['fail2ban-install']
|
11
roles/01-server_hardening/tasks/05-additional-hardening.yml
Normal file
11
roles/01-server_hardening/tasks/05-additional-hardening.yml
Normal file
@@ -0,0 +1,11 @@
|
||||
---
|
||||
- name: Disable unused services
|
||||
systemd:
|
||||
name: "{{ item }}"
|
||||
state: stopped
|
||||
enabled: no
|
||||
loop:
|
||||
- bluetooth
|
||||
- cups
|
||||
ignore_errors: yes
|
||||
tags: ['disable-services']
|
20
roles/01-server_hardening/tasks/main.yml
Normal file
20
roles/01-server_hardening/tasks/main.yml
Normal file
@@ -0,0 +1,20 @@
|
||||
---
|
||||
- name: Include system update tasks
|
||||
include_tasks: 01-update-system.yml
|
||||
tags: ['hardening', 'system-update']
|
||||
|
||||
- name: Include SSH configuration tasks
|
||||
include_tasks: 02-configure-ssh.yml
|
||||
tags: ['hardening', 'ssh']
|
||||
|
||||
- name: Include firewall configuration tasks
|
||||
include_tasks: 03-configure-firewall.yml
|
||||
tags: ['hardening', 'firewall']
|
||||
|
||||
- name: Include fail2ban installation tasks
|
||||
include_tasks: 04-install-fail2ban.yml
|
||||
tags: ['hardening', 'fail2ban']
|
||||
|
||||
- name: Include additional hardening tasks
|
||||
include_tasks: 05-additional-hardening.yml
|
||||
tags: ['hardening', 'additional']
|
26
roles/01-server_hardening/templates/fail2ban.local.j2
Normal file
26
roles/01-server_hardening/templates/fail2ban.local.j2
Normal file
@@ -0,0 +1,26 @@
|
||||
[DEFAULT]
|
||||
# Fail2ban configuration for Minecraft server
|
||||
bantime = {{ fail2ban_bantime }}
|
||||
findtime = {{ fail2ban_findtime }}
|
||||
maxretry = {{ fail2ban_maxretry }}
|
||||
|
||||
# Email notifications (optional)
|
||||
# destemail = admin@example.com
|
||||
# sendername = Fail2Ban
|
||||
# sender = fail2ban@example.com
|
||||
# action = %(action_mwl)s
|
||||
|
||||
[sshd]
|
||||
enabled = true
|
||||
port = {{ ssh_port }}
|
||||
filter = sshd
|
||||
logpath = /var/log/auth.log
|
||||
maxretry = {{ fail2ban_maxretry }}
|
||||
|
||||
[minecraft]
|
||||
enabled = true
|
||||
port = {{ minecraft_port }}
|
||||
filter = minecraft
|
||||
logpath = {{ minecraft_server_dir }}/logs/latest.log
|
||||
maxretry = 5
|
||||
bantime = 7200
|
47
roles/01-server_hardening/templates/sshd_config.j2
Normal file
47
roles/01-server_hardening/templates/sshd_config.j2
Normal file
@@ -0,0 +1,47 @@
|
||||
# SSH configuration for Minecraft server
|
||||
Port {{ ssh_port }}
|
||||
Protocol {{ ssh_protocol }}
|
||||
HostKey /etc/ssh/ssh_host_rsa_key
|
||||
HostKey /etc/ssh/ssh_host_ecdsa_key
|
||||
HostKey /etc/ssh/ssh_host_ed25519_key
|
||||
|
||||
# Logging
|
||||
SyslogFacility AUTH
|
||||
LogLevel INFO
|
||||
|
||||
# Authentication
|
||||
LoginGraceTime 60
|
||||
PermitRootLogin {{ ssh_permit_root_login }}
|
||||
StrictModes yes
|
||||
MaxAuthTries {{ ssh_max_auth_tries }}
|
||||
MaxSessions 10
|
||||
|
||||
PubkeyAuthentication {{ ssh_pub_key_authentication }}
|
||||
AuthorizedKeysFile .ssh/authorized_keys
|
||||
|
||||
PasswordAuthentication {{ ssh_password_authentication }}
|
||||
PermitEmptyPasswords no
|
||||
ChallengeResponseAuthentication no
|
||||
KerberosAuthentication no
|
||||
GSSAPIAuthentication no
|
||||
|
||||
UsePAM yes
|
||||
|
||||
AllowUsers {{ ssh_allow_users | join(' ') }}
|
||||
|
||||
X11Forwarding no
|
||||
PrintMotd no
|
||||
AcceptEnv LANG LC_*
|
||||
|
||||
# Connection settings
|
||||
ClientAliveInterval {{ ssh_client_alive_interval }}
|
||||
ClientAliveCountMax {{ ssh_client_alive_count_max }}
|
||||
TCPKeepAlive yes
|
||||
|
||||
# Restrict to specific users
|
||||
Match User {{ ssh_allow_users | join(',') }}
|
||||
AllowTcpForwarding no
|
||||
X11Forwarding no
|
||||
PermitTunnel no
|
||||
GatewayPorts no
|
||||
AllowAgentForwarding no
|
14
roles/01-server_hardening/templates/ufw_rules.j2
Normal file
14
roles/01-server_hardening/templates/ufw_rules.j2
Normal file
@@ -0,0 +1,14 @@
|
||||
# UFW rules for Minecraft server
|
||||
|
||||
# Default policies
|
||||
ufw --force reset
|
||||
ufw default {{ ufw_default_incoming }}
|
||||
ufw default {{ ufw_default_outgoing }}
|
||||
|
||||
# Allow specific ports
|
||||
{% for port in ufw_allowed_ports %}
|
||||
ufw allow {{ port }}
|
||||
{% endfor %}
|
||||
|
||||
# Enable UFW
|
||||
ufw --force enable
|
0
roles/01-server_hardening/vars/main.yml
Normal file
0
roles/01-server_hardening/vars/main.yml
Normal file
4
roles/02-installation-java/defaults/main.yml
Normal file
4
roles/02-installation-java/defaults/main.yml
Normal file
@@ -0,0 +1,4 @@
|
||||
---
|
||||
java_version: 21
|
||||
java_package: "openjdk-{{ java_version }}-jdk"
|
||||
java_home: "/usr/lib/jvm/java-{{ java_version }}-openjdk-amd64"
|
0
roles/02-installation-java/handlers/main.yml
Normal file
0
roles/02-installation-java/handlers/main.yml
Normal file
7
roles/02-installation-java/tasks/01-check-java.yml
Normal file
7
roles/02-installation-java/tasks/01-check-java.yml
Normal file
@@ -0,0 +1,7 @@
|
||||
---
|
||||
- name: Check if Java is already installed
|
||||
command: java -version
|
||||
register: java_check
|
||||
failed_when: false
|
||||
changed_when: false
|
||||
tags: ['java-check']
|
6
roles/02-installation-java/tasks/02-install-java.yml
Normal file
6
roles/02-installation-java/tasks/02-install-java.yml
Normal file
@@ -0,0 +1,6 @@
|
||||
---
|
||||
- name: Install OpenJDK
|
||||
package:
|
||||
name: "{{ java_package }}"
|
||||
state: present
|
||||
tags: ['java-install']
|
6
roles/02-installation-java/tasks/03-verify-java.yml
Normal file
6
roles/02-installation-java/tasks/03-verify-java.yml
Normal file
@@ -0,0 +1,6 @@
|
||||
--
|
||||
- name: Verify Java installation
|
||||
command: java -version
|
||||
register: java_verify
|
||||
changed_when: false
|
||||
tags: ['java-verify']
|
@@ -0,0 +1,7 @@
|
||||
---
|
||||
- name: Set Java home environment variable
|
||||
lineinfile:
|
||||
path: /etc/environment
|
||||
line: "JAVA_HOME={{ java_home }}"
|
||||
state: present
|
||||
tags: ['java-validate']
|
17
roles/02-installation-java/tasks/main.yml
Normal file
17
roles/02-installation-java/tasks/main.yml
Normal file
@@ -0,0 +1,17 @@
|
||||
---
|
||||
- name: Include Java check tasks
|
||||
include_tasks: 01-check-java.yml
|
||||
tags: ['java', 'check']
|
||||
|
||||
- name: Include Java installation tasks
|
||||
include_tasks: 02-install-java.yml
|
||||
when: java_installed is not defined or not java_installed
|
||||
tags: ['java', 'install']
|
||||
|
||||
- name: Include Java verification tasks
|
||||
include_tasks: 03-verify-java.yml
|
||||
tags: ['java', 'verify']
|
||||
|
||||
- name: Include Java validation tasks
|
||||
include_tasks: 04-validate-installation.yml
|
||||
tags: ['java', 'validate']
|
0
roles/02-installation-java/vars/main.yml
Normal file
0
roles/02-installation-java/vars/main.yml
Normal file
@@ -1,10 +0,0 @@
|
||||
---
|
||||
- name: Recharger systemd
|
||||
ansible.builtin.systemd:
|
||||
daemon_reload: yes
|
||||
|
||||
- name: Démarrer le service Minecraft
|
||||
ansible.builtin.systemd:
|
||||
name: minecraft
|
||||
state: started
|
||||
enabled: yes
|
@@ -1,5 +0,0 @@
|
||||
---
|
||||
- name: Créer le groupe et l'utilisateur Minecraft
|
||||
ansible.builtin.group:
|
||||
name: "{{ minecraft_group }}"
|
||||
state: present
|
@@ -1,8 +0,0 @@
|
||||
---
|
||||
- name: Créer l'utilisateur Minecraft
|
||||
ansible.builtin.user:
|
||||
name: "{{ minecraft_user }}"
|
||||
group: "{{ minecraft_group }}"
|
||||
shell: "/bin/false"
|
||||
home: "{{ minecraft_dir }}"
|
||||
state: present
|
@@ -1,8 +0,0 @@
|
||||
---
|
||||
- name: Créer le répertoire du serveur Minecraft
|
||||
ansible.builtin.file:
|
||||
path: "{{ minecraft_dir }}"
|
||||
state: directory
|
||||
owner: "{{ minecraft_user }}"
|
||||
group: "{{ minecraft_group }}"
|
||||
mode: '0755'
|
@@ -1,9 +0,0 @@
|
||||
---
|
||||
- name: Télécharger BuildTools.jar
|
||||
ansible.builtin.get_url:
|
||||
url: "{{ spigot_download_url }}"
|
||||
dest: "{{ minecraft_dir }}/BuildTools.jar"
|
||||
mode: '0755'
|
||||
owner: "{{ minecraft_user }}"
|
||||
group: "{{ minecraft_group }}"
|
||||
register: buildtools_download
|
@@ -1,8 +0,0 @@
|
||||
---
|
||||
- name: Construire le fichier Spigot.jar
|
||||
ansible.builtin.shell: "java -jar BuildTools.jar --rev {{ minecraft_version }}"
|
||||
args:
|
||||
chdir: "{{ minecraft_dir }}"
|
||||
become_user: "{{ minecraft_user }}"
|
||||
when: buildtools_download is changed
|
||||
register: build_result
|
@@ -1,5 +0,0 @@
|
||||
---
|
||||
- name: Vérifier que le fichier Spigot a été créé
|
||||
ansible.builtin.stat:
|
||||
path: "{{ minecraft_dir }}/{{ spigot_jar_name }}"
|
||||
register: spigot_stat
|
@@ -1,10 +0,0 @@
|
||||
---
|
||||
- name: Copier le fichier spigot.jar au nom standardisé
|
||||
ansible.builtin.copy:
|
||||
src: "{{ minecraft_dir }}/spigot-{{ minecraft_version }}.jar"
|
||||
dest: "{{ minecraft_dir }}/server.jar"
|
||||
remote_src: true
|
||||
owner: "{{ minecraft_user }}"
|
||||
group: "{{ minecraft_group }}"
|
||||
mode: '0644'
|
||||
when: spigot_stat.stat.exists
|
@@ -1,8 +0,0 @@
|
||||
---
|
||||
- name: Créer le fichier eula.txt
|
||||
ansible.builtin.template:
|
||||
src: eula.txt.j2
|
||||
dest: "{{ minecraft_dir }}/eula.txt"
|
||||
owner: "{{ minecraft_user }}"
|
||||
group: "{{ minecraft_group }}"
|
||||
mode: '0644'
|
@@ -1,7 +0,0 @@
|
||||
---
|
||||
ansible.builtin.template:
|
||||
src: server.properties.j2
|
||||
dest: "{{ minecraft_dir }}/server.properties"
|
||||
owner: "{{ minecraft_user }}"
|
||||
group: "{{ minecraft_group }}"
|
||||
mode: '0644'
|
@@ -1,11 +0,0 @@
|
||||
---
|
||||
- name: Copier le service systemd
|
||||
ansible.builtin.template:
|
||||
src: minecraft.service.j2
|
||||
dest: /etc/systemd/system/minecraft.service
|
||||
owner: root
|
||||
group: root
|
||||
mode: '0644'
|
||||
notify:
|
||||
- Recharger systemd
|
||||
- Démarrer le service Minecraft
|
@@ -1,7 +0,0 @@
|
||||
---
|
||||
- name: Vérifier l'état du service Minecraft
|
||||
ansible.builtin.systemd:
|
||||
name: minecraft
|
||||
state: started
|
||||
enabled: true
|
||||
|
@@ -1,33 +0,0 @@
|
||||
---
|
||||
- name: Inclure la tâche pour création de group local
|
||||
ansible.builtin.import_tasks: 01-create-minecraft-group.yml
|
||||
|
||||
- name: Inclure la tâche pour création d'un compte utilisateur
|
||||
ansible.builtin.import_tasks: 02-create-minecraft-user.yml
|
||||
|
||||
- name: Inclure la tâche pour création du dossier par defaut
|
||||
ansible.builtin.import_tasks: 03-create-minecraft-home.yml
|
||||
|
||||
- name: Inclure la tâche pour télécharger la source
|
||||
ansible.builtin.import_tasks: 04-download.yml
|
||||
|
||||
- name: Inclure la tâche de compilation
|
||||
ansible.builtin.import_tasks: 05-build.yml
|
||||
|
||||
- name: Inclure la tâche de vérification
|
||||
ansible.builtin.import_tasks: 06-check.yml
|
||||
|
||||
- name: Inclure la tâche pour copie des fichiers
|
||||
ansible.builtin.import_tasks: 07-copy-file.yml
|
||||
|
||||
- name: Inclure la tâche pour accepter la licence
|
||||
ansible.builtin.import_tasks: 08-minecraft-eula.yml
|
||||
|
||||
- name: Inclure la tâche pour création du fichier server.properties
|
||||
ansible.builtin.import_tasks: 09-minecraft-properties.yml
|
||||
|
||||
- name: Inclure la tâche création du service
|
||||
ansible.builtin.import_tasks: 10-service.yml
|
||||
|
||||
- name: Inclure la tâche de vérification
|
||||
ansible.builtin.import_tasks: 11-check.yml
|
@@ -1 +0,0 @@
|
||||
eula={{ server_properties_content.eula }}
|
@@ -1,40 +0,0 @@
|
||||
# [Service]
|
||||
Environment=SHELL=/bin/bash
|
||||
# Environment=TMUX_SESSION=minecraft
|
||||
# Environment=TMUX_WINDOW=spigot
|
||||
# Environment=JVM_OPTS="-server -XX:+UseConcMarkSweepGC -XX:MaxGCPauseMillis=50 -Xmx3G"
|
||||
# WorkingDirectory={{ minecraft_home }}
|
||||
# ExecStart=/bin/bash {{ minecraft_home }}/minecraft-server-start.sh
|
||||
# ExecStop=/bin/bash {{ minecraft_home }}/minecraft-server-stop.sh
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
|
||||
[Unit]
|
||||
Description=Minecraft Server
|
||||
Wants=network.target
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
User=minecraft
|
||||
Group=minecraft
|
||||
UMask=0027
|
||||
|
||||
Restart=on-failure
|
||||
Type=forking
|
||||
Nice=1
|
||||
KillMode=none
|
||||
SuccessExitStatus=0 1 255
|
||||
StartLimitBurst=5
|
||||
|
||||
NoNewPrivileges=true
|
||||
PrivateDevices=true
|
||||
ProtectHome=true
|
||||
ProtectSystem=full
|
||||
|
||||
WorkingDirectory=/opt/minecraft/server
|
||||
ExecStart=/usr/bin/java -Xmx2048M -Xms2048M -jar spigot-1.21.8.jar nogui
|
||||
ExecStop=/opt/minecraft/tools/mcrcon/mcrcon -H 127.0.0.1 -P 25575 -p ${]Password} stop
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
@@ -1,4 +0,0 @@
|
||||
# Fichier généré par Ansible
|
||||
{% for key, value in server_properties_content.items() %}
|
||||
{{ key }}={{ value }}
|
||||
{% endfor %}
|
14
roles/03-installation-minecraft/defaults/main.yml
Normal file
14
roles/03-installation-minecraft/defaults/main.yml
Normal file
@@ -0,0 +1,14 @@
|
||||
---
|
||||
minecraft_version: "1.21.6"
|
||||
minecraft_user: minecraft
|
||||
minecraft_group: minecraft
|
||||
minecraft_home: /opt/minecraft
|
||||
minecraft_memory_min: "1G"
|
||||
minecraft_memory_max: "4G"
|
||||
minecraft_port: 25565
|
||||
minecraft_rcon_port: 25575
|
||||
minecraft_rcon_password: "changeme"
|
||||
|
||||
spigot_build_tools_url: "https://hub.spigotmc.org/jenkins/job/BuildTools/lastSuccessfulBuild/artifact/target/BuildTools.jar"
|
||||
mcrcon_version: "0.7.2"
|
||||
mcrcon_url: "https://github.com/Tiiffi/mcrcon/releases/download/v{{ mcrcon_version }}/mcrcon-{{ mcrcon_version }}-linux-x86-64.tar.gz"
|
21
roles/03-installation-minecraft/handlers/main.yml
Normal file
21
roles/03-installation-minecraft/handlers/main.yml
Normal file
@@ -0,0 +1,21 @@
|
||||
---
|
||||
- name: reload systemd
|
||||
systemd:
|
||||
daemon_reload: yes
|
||||
|
||||
- name: enable minecraft service
|
||||
systemd:
|
||||
name: minecraft
|
||||
enabled: yes
|
||||
|
||||
- name: restart minecraft
|
||||
systemd:
|
||||
name: minecraft
|
||||
state: restarted
|
||||
enabled: yes
|
||||
|
||||
- name: start minecraft
|
||||
systemd:
|
||||
name: minecraft
|
||||
state: started
|
||||
enabled: yes
|
@@ -0,0 +1,5 @@
|
||||
name: Create minecraft group
|
||||
group:
|
||||
name: "{{ minecraft_group }}"
|
||||
state: present
|
||||
tags: ['minecraft-user']
|
@@ -0,0 +1,15 @@
|
||||
---
|
||||
- name: Create minecraft directories
|
||||
file:
|
||||
path: "{{ item }}"
|
||||
state: directory
|
||||
owner: "{{ minecraft_user }}"
|
||||
group: "{{ minecraft_group }}"
|
||||
mode: '0755'
|
||||
loop:
|
||||
- "{{ minecraft_home }}"
|
||||
- "{{ minecraft_sources_dir }}"
|
||||
- "{{ minecraft_server_dir }}"
|
||||
- "{{ minecraft_tools_dir }}"
|
||||
- "{{ minecraft_backups_dir }}"
|
||||
tags: ['minecraft-directories']
|
@@ -0,0 +1,9 @@
|
||||
---
|
||||
- name: Download BuildTools.jar
|
||||
get_url:
|
||||
url: "{{ spigot_build_tools_url }}"
|
||||
dest: "{{ minecraft_sources_dir }}/BuildTools.jar"
|
||||
owner: "{{ minecraft_user }}"
|
||||
group: "{{ minecraft_group }}"
|
||||
mode: '0644'
|
||||
tags: ['spigot-download']
|
17
roles/03-installation-minecraft/tasks/04-install-mcrcon.yml
Normal file
17
roles/03-installation-minecraft/tasks/04-install-mcrcon.yml
Normal file
@@ -0,0 +1,17 @@
|
||||
---
|
||||
- name: Download mcrcon
|
||||
get_url:
|
||||
url: "{{ mcrcon_url }}"
|
||||
dest: "{{ minecraft_tools_dir }}/mcrcon.tar.gz"
|
||||
owner: "{{ minecraft_user }}"
|
||||
group: "{{ minecraft_group }}"
|
||||
tags: ['mcrcon-install']
|
||||
|
||||
- name: Extract mcrcon
|
||||
unarchive:
|
||||
src: "{{ minecraft_tools_dir }}/mcrcon.tar.gz"
|
||||
dest: "{{ minecraft_tools_dir }}"
|
||||
remote_src: yes
|
||||
owner: "{{ minecraft_user }}"
|
||||
group: "{{ minecraft_group }}"
|
||||
tags: ['mcrcon-install']
|
19
roles/03-installation-minecraft/tasks/05-compile-spigotyml
Normal file
19
roles/03-installation-minecraft/tasks/05-compile-spigotyml
Normal file
@@ -0,0 +1,19 @@
|
||||
---
|
||||
- name: Compile Spigot server
|
||||
shell: |
|
||||
cd {{ minecraft_sources_dir }}
|
||||
java -jar BuildTools.jar --rev {{ minecraft_version }}
|
||||
become_user: "{{ minecraft_user }}"
|
||||
args:
|
||||
creates: "{{ minecraft_sources_dir }}/spigot-{{ minecraft_version }}.jar"
|
||||
tags: ['spigot-compile']
|
||||
|
||||
- name: Copy compiled Spigot to server directory
|
||||
copy:
|
||||
src: "{{ minecraft_sources_dir }}/spigot-{{ minecraft_version }}.jar"
|
||||
dest: "{{ minecraft_server_dir }}/spigot.jar"
|
||||
owner: "{{ minecraft_user }}"
|
||||
group: "{{ minecraft_group }}"
|
||||
mode: '0644'
|
||||
remote_src: yes
|
||||
tags: ['spigot-compile']
|
@@ -0,0 +1,37 @@
|
||||
---
|
||||
- name: Generate server.properties
|
||||
template:
|
||||
src: server.properties.j2
|
||||
dest: "{{ minecraft_server_dir }}/server.properties"
|
||||
owner: "{{ minecraft_user }}"
|
||||
group: "{{ minecraft_group }}"
|
||||
mode: '0644'
|
||||
tags: ['minecraft-config']
|
||||
|
||||
- name: Generate spigot.yml
|
||||
template:
|
||||
src: spigot.yml.j2
|
||||
dest: "{{ minecraft_server_dir }}/spigot.yml"
|
||||
owner: "{{ minecraft_user }}"
|
||||
group: "{{ minecraft_group }}"
|
||||
mode: '0644'
|
||||
tags: ['minecraft-config']
|
||||
|
||||
- name: Generate bukkit.yml
|
||||
template:
|
||||
src: bukkit.yml.j2
|
||||
dest: "{{ minecraft_server_dir }}/bukkit.yml"
|
||||
owner: "{{ minecraft_user }}"
|
||||
group: "{{ minecraft_group }}"
|
||||
mode: '0644'
|
||||
tags: ['minecraft-config']
|
||||
|
||||
- name: Accept EULA
|
||||
lineinfile:
|
||||
path: "{{ minecraft_server_dir }}/eula.txt"
|
||||
line: "eula=true"
|
||||
create: yes
|
||||
owner: "{{ minecraft_user }}"
|
||||
group: "{{ minecraft_group }}"
|
||||
mode: '0644'
|
||||
tags: ['minecraft-config']
|
10
roles/03-installation-minecraft/tasks/07-create-service.yml
Normal file
10
roles/03-installation-minecraft/tasks/07-create-service.yml
Normal file
@@ -0,0 +1,10 @@
|
||||
---
|
||||
- name: Create systemd service file
|
||||
template:
|
||||
src: minecraft.service.j2
|
||||
dest: /etc/systemd/system/minecraft.service
|
||||
mode: '0644'
|
||||
notify:
|
||||
- reload systemd
|
||||
- enable minecraft service
|
||||
tags: ['minecraft-service']
|
@@ -0,0 +1,7 @@
|
||||
---
|
||||
- name: Setup log rotation for Minecraft
|
||||
template:
|
||||
src: logrotate-minecraft.j2
|
||||
dest: /etc/logrotate.d/minecraft
|
||||
mode: '0644'
|
||||
tags: ['minecraft-logs']
|
@@ -0,0 +1,9 @@
|
||||
---
|
||||
- name: Configure ops.json
|
||||
template:
|
||||
src: ops.json.j2
|
||||
dest: "{{ minecraft_server_dir }}/ops.json"
|
||||
owner: "{{ minecraft_user }}"
|
||||
group: "{{ minecraft_group }}"
|
||||
mode: '0644'
|
||||
tags: ['minecraft-ops']
|
20
roles/03-installation-minecraft/tasks/10-setup-plugins.yml
Normal file
20
roles/03-installation-minecraft/tasks/10-setup-plugins.yml
Normal file
@@ -0,0 +1,20 @@
|
||||
---
|
||||
- name: Create plugins directory
|
||||
file:
|
||||
path: "{{ minecraft_server_dir }}/plugins"
|
||||
state: directory
|
||||
owner: "{{ minecraft_user }}"
|
||||
group: "{{ minecraft_group }}"
|
||||
mode: '0755'
|
||||
tags: ['minecraft-plugins']
|
||||
|
||||
- name: Download plugins if specified
|
||||
get_url:
|
||||
url: "{{ item.url }}"
|
||||
dest: "{{ minecraft_server_dir }}/plugins/{{ item.name }}"
|
||||
owner: "{{ minecraft_user }}"
|
||||
group: "{{ minecraft_group }}"
|
||||
mode: '0644'
|
||||
loop: "{{ minecraft_plugins | default([]) }}"
|
||||
when: minecraft_plugins is defined
|
||||
tags: ['minecraft-plugins']
|
40
roles/03-installation-minecraft/tasks/main.yml
Normal file
40
roles/03-installation-minecraft/tasks/main.yml
Normal file
@@ -0,0 +1,40 @@
|
||||
---
|
||||
- name: Include user and group creation tasks
|
||||
include_tasks: 01-create-user-group.yml
|
||||
tags: ['minecraft', 'user']
|
||||
|
||||
- name: Include directory creation tasks
|
||||
include_tasks: 02-create-directories.yml
|
||||
tags: ['minecraft', 'directories']
|
||||
|
||||
- name: Include Spigot download tasks
|
||||
include_tasks: 03-download-spigot.yml
|
||||
tags: ['minecraft', 'download']
|
||||
|
||||
- name: Include mcrcon installation tasks
|
||||
include_tasks: 04-install-mcrcon.yml
|
||||
tags: ['minecraft', 'mcrcon']
|
||||
|
||||
- name: Include Spigot compilation tasks
|
||||
include_tasks: 05-compile-spigot.yml
|
||||
tags: ['minecraft', 'compile']
|
||||
|
||||
- name: Include server configuration tasks
|
||||
include_tasks: 06-configure-server.yml
|
||||
tags: ['minecraft', 'configure']
|
||||
|
||||
- name: Include service creation tasks
|
||||
include_tasks: 07-create-service.yml
|
||||
tags: ['minecraft', 'service']
|
||||
|
||||
- name: Include log rotation setup tasks
|
||||
include_tasks: 08-setup-log-rotation.yml
|
||||
tags: ['minecraft', 'logs']
|
||||
|
||||
- name: Include ops configuration tasks
|
||||
include_tasks: 09-configure-ops.yml
|
||||
tags: ['minecraft', 'ops']
|
||||
|
||||
- name: Include plugins setup tasks
|
||||
include_tasks: 10-setup-plugins.yml
|
||||
tags: ['minecraft', 'plugins']
|
@@ -0,0 +1,12 @@
|
||||
{{ minecraft_server_dir }}/logs/*.log {
|
||||
daily
|
||||
missingok
|
||||
rotate 52
|
||||
compress
|
||||
delaycompress
|
||||
notifempty
|
||||
create 644 {{ minecraft_user }} {{ minecraft_group }}
|
||||
postrotate
|
||||
systemctl reload minecraft
|
||||
endscript
|
||||
}
|
@@ -0,0 +1,17 @@
|
||||
[Unit]
|
||||
Description=Minecraft Spigot Server
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Type=forking
|
||||
User={{ minecraft_user }}
|
||||
Group={{ minecraft_group }}
|
||||
WorkingDirectory={{ minecraft_server_dir }}
|
||||
ExecStart=/usr/bin/java -Xms{{ minecraft_memory_min }} -Xmx{{ minecraft_memory_max }} -jar {{ minecraft_server_dir }}/spigot.jar nogui
|
||||
ExecStop={{ minecraft_tools_dir }}/mcrcon -H 127.0.0.1 -P {{ minecraft_rcon_port }} -p {{ minecraft_rcon_password }} stop
|
||||
RemainAfterExit=yes
|
||||
RestartSec=15
|
||||
Restart=always
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
10
roles/03-installation-minecraft/templates/ops.json.j2
Normal file
10
roles/03-installation-minecraft/templates/ops.json.j2
Normal file
@@ -0,0 +1,10 @@
|
||||
[
|
||||
{% for op in minecraft_ops | default([]) %}
|
||||
{
|
||||
"uuid": "{{ op.uuid }}",
|
||||
"name": "{{ op.name }}",
|
||||
"level": {{ op.level | default(4) }},
|
||||
"bypassesPlayerLimit": {{ op.bypass_limit | default(false) | lower }}
|
||||
}{% if not loop.last %},{% endif %}
|
||||
{% endfor %}
|
||||
]
|
@@ -0,0 +1,24 @@
|
||||
#Minecraft server properties
|
||||
server-name=Spigot Server
|
||||
server-port={{ minecraft_port }}
|
||||
max-players=20
|
||||
gamemode=survival
|
||||
difficulty=normal
|
||||
hardcore=false
|
||||
white-list=false
|
||||
enforce-whitelist=false
|
||||
pvp=true
|
||||
spawn-protection=16
|
||||
op-permission-level=4
|
||||
allow-flight=false
|
||||
enable-rcon=true
|
||||
rcon.port={{ minecraft_rcon_port }}
|
||||
rcon.password={{ minecraft_rcon_password }}
|
||||
motd=Minecraft Spigot Server managed by Ansible
|
||||
online-mode=true
|
||||
spawn-monsters=true
|
||||
generate-structures=true
|
||||
view-distance=10
|
||||
level-seed=
|
||||
level-name=world
|
||||
level-type=default
|
0
roles/03-installation-minecraft/vars/main.yml
Normal file
0
roles/03-installation-minecraft/vars/main.yml
Normal file
8
roles/04-backups/defaults/main.yml
Normal file
8
roles/04-backups/defaults/main.yml
Normal file
@@ -0,0 +1,8 @@
|
||||
---
|
||||
backup_retention_daily: 7
|
||||
backup_retention_weekly: 4
|
||||
backup_retention_monthly: 6
|
||||
backup_compression: true
|
||||
backup_remote_host: ""
|
||||
backup_remote_user: ""
|
||||
backup_remote_path: ""
|
0
roles/04-backups/handlers/main.yml
Normal file
0
roles/04-backups/handlers/main.yml
Normal file
14
roles/04-backups/tasks/01-setup-backup-structure.yml
Normal file
14
roles/04-backups/tasks/01-setup-backup-structure.yml
Normal file
@@ -0,0 +1,14 @@
|
||||
---
|
||||
- name: Create backup directories
|
||||
file:
|
||||
path: "{{ item }}"
|
||||
state: directory
|
||||
owner: "{{ minecraft_user }}"
|
||||
group: "{{ minecraft_group }}"
|
||||
mode: '0755'
|
||||
loop:
|
||||
- "{{ minecraft_backups_dir }}/daily"
|
||||
- "{{ minecraft_backups_dir }}/weekly"
|
||||
- "{{ minecraft_backups_dir }}/monthly"
|
||||
- "{{ minecraft_backups_dir }}/scripts"
|
||||
tags: ['backup-structure']
|
27
roles/04-backups/tasks/02-create-backup-scripts.yml
Normal file
27
roles/04-backups/tasks/02-create-backup-scripts.yml
Normal file
@@ -0,0 +1,27 @@
|
||||
---
|
||||
- name: Create daily backup script
|
||||
template:
|
||||
src: backup-daily.sh.j2
|
||||
dest: "{{ minecraft_backups_dir }}/scripts/backup-daily.sh"
|
||||
owner: "{{ minecraft_user }}"
|
||||
group: "{{ minecraft_group }}"
|
||||
mode: '0755'
|
||||
tags: ['backup-scripts']
|
||||
|
||||
- name: Create weekly backup script
|
||||
template:
|
||||
src: backup-weekly.sh.j2
|
||||
dest: "{{ minecraft_backups_dir }}/scripts/backup-weekly.sh"
|
||||
owner: "{{ minecraft_user }}"
|
||||
group: "{{ minecraft_group }}"
|
||||
mode: '0755'
|
||||
tags: ['backup-scripts']
|
||||
|
||||
- name: Create monthly backup script
|
||||
template:
|
||||
src: backup-monthly.sh.j2
|
||||
dest: "{{ minecraft_backups_dir }}/scripts/backup-monthly.sh"
|
||||
owner: "{{ minecraft_user }}"
|
||||
group: "{{ minecraft_group }}"
|
||||
mode: '0755'
|
||||
tags: ['backup-scripts']
|
29
roles/04-backups/tasks/03-setup-cron-jobs.yml
Normal file
29
roles/04-backups/tasks/03-setup-cron-jobs.yml
Normal file
@@ -0,0 +1,29 @@
|
||||
---
|
||||
- name: Setup daily backup cron job
|
||||
cron:
|
||||
name: "Minecraft daily backup"
|
||||
user: "{{ minecraft_user }}"
|
||||
minute: "0"
|
||||
hour: "2"
|
||||
job: "{{ minecraft_backups_dir }}/scripts/backup-daily.sh"
|
||||
tags: ['backup-cron']
|
||||
|
||||
- name: Setup weekly backup cron job
|
||||
cron:
|
||||
name: "Minecraft weekly backup"
|
||||
user: "{{ minecraft_user }}"
|
||||
minute: "0"
|
||||
hour: "3"
|
||||
weekday: "0"
|
||||
job: "{{ minecraft_backups_dir }}/scripts/backup-weekly.sh"
|
||||
tags: ['backup-cron']
|
||||
|
||||
- name: Setup monthly backup cron job
|
||||
cron:
|
||||
name: "Minecraft monthly backup"
|
||||
user: "{{ minecraft_user }}"
|
||||
minute: "0"
|
||||
hour: "4"
|
||||
day: "1"
|
||||
job: "{{ minecraft_backups_dir }}/scripts/backup-monthly.sh"
|
||||
tags: ['backup-cron']
|
9
roles/04-backups/tasks/04-setup-restore-script.yml
Normal file
9
roles/04-backups/tasks/04-setup-restore-script.yml
Normal file
@@ -0,0 +1,9 @@
|
||||
---
|
||||
- name: Create restore script
|
||||
template:
|
||||
src: restore.sh.j2
|
||||
dest: "{{ minecraft_backups_dir }}/scripts/restore.sh"
|
||||
owner: "{{ minecraft_user }}"
|
||||
group: "{{ minecraft_group }}"
|
||||
mode: '0755'
|
||||
tags: ['backup-restore']
|
16
roles/04-backups/tasks/main.yml
Normal file
16
roles/04-backups/tasks/main.yml
Normal file
@@ -0,0 +1,16 @@
|
||||
---
|
||||
- name: Include backup structure setup tasks
|
||||
include_tasks: 01-setup-backup-structure.yml
|
||||
tags: ['backup', 'setup']
|
||||
|
||||
- name: Include backup scripts creation tasks
|
||||
include_tasks: 02-create-backup-scripts.yml
|
||||
tags: ['backup', 'scripts']
|
||||
|
||||
- name: Include cron jobs setup tasks
|
||||
include_tasks: 03-setup-cron-jobs.yml
|
||||
tags: ['backup', 'cron']
|
||||
|
||||
- name: Include restore script setup tasks
|
||||
include_tasks: 04-setup-restore-script.yml
|
||||
tags: ['backup', 'restore']
|
29
roles/04-backups/templates/backup-daily.sh.j2
Normal file
29
roles/04-backups/templates/backup-daily.sh.j2
Normal file
@@ -0,0 +1,29 @@
|
||||
#!/bin/bash
|
||||
|
||||
BACKUP_DIR="{{ minecraft_backups_dir }}/daily"
|
||||
SERVER_DIR="{{ minecraft_server_dir }}"
|
||||
DATE=$(date +%Y%m%d_%H%M%S)
|
||||
BACKUP_NAME="minecraft_daily_${DATE}"
|
||||
RETENTION={{ backup_retention_daily }}
|
||||
|
||||
# Stop server for consistent backup
|
||||
{{ minecraft_tools_dir }}/mcrcon -H 127.0.0.1 -P {{ minecraft_rcon_port }} -p {{ minecraft_rcon_password }} save-all
|
||||
sleep 5
|
||||
{{ minecraft_tools_dir }}/mcrcon -H 127.0.0.1 -P {{ minecraft_rcon_port }} -p {{ minecraft_rcon_password }} save-off
|
||||
|
||||
# Create backup
|
||||
rsync -av --delete "${SERVER_DIR}/" "${BACKUP_DIR}/${BACKUP_NAME}/"
|
||||
|
||||
# Re-enable saving
|
||||
{{ minecraft_tools_dir }}/mcrcon -H 127.0.0.1 -P {{ minecraft_rcon_port }} -p {{ minecraft_rcon_password }} save-on
|
||||
|
||||
# Compress backup if enabled
|
||||
{% if backup_compression %}
|
||||
tar -czf "${BACKUP_DIR}/${BACKUP_NAME}.tar.gz" -C "${BACKUP_DIR}" "${BACKUP_NAME}"
|
||||
rm -rf "${BACKUP_DIR}/${BACKUP_NAME}"
|
||||
{% endif %}
|
||||
|
||||
# Clean old backups
|
||||
find "${BACKUP_DIR}" -name "minecraft_daily_*" -type {% if backup_compression %}f{% else %}d{% endif %} -mtime +${RETENTION} -delete
|
||||
|
||||
echo "Daily backup completed: ${BACKUP_NAME}"
|
29
roles/04-backups/templates/backup-monthly.sh.j2
Normal file
29
roles/04-backups/templates/backup-monthly.sh.j2
Normal file
@@ -0,0 +1,29 @@
|
||||
#!/bin/bash
|
||||
|
||||
BACKUP_DIR="{{ minecraft_backups_dir }}/monthly"
|
||||
SERVER_DIR="{{ minecraft_server_dir }}"
|
||||
DATE=$(date +%Y%m%d_%H%M%S)
|
||||
BACKUP_NAME="minecraft_monthly_${DATE}"
|
||||
RETENTION={{ backup_retention_monthly }}
|
||||
|
||||
# Stop server for consistent backup
|
||||
{{ minecraft_tools_dir }}/mcrcon -H 127.0.0.1 -P {{ minecraft_rcon_port }} -p {{ minecraft_rcon_password }} save-all
|
||||
sleep 5
|
||||
{{ minecraft_tools_dir }}/mcrcon -H 127.0.0.1 -P {{ minecraft_rcon_port }} -p {{ minecraft_rcon_password }} save-off
|
||||
|
||||
# Create backup
|
||||
rsync -av --delete "${SERVER_DIR}/" "${BACKUP_DIR}/${BACKUP_NAME}/"
|
||||
|
||||
# Re-enable saving
|
||||
{{ minecraft_tools_dir }}/mcrcon -H 127.0.0.1 -P {{ minecraft_rcon_port }} -p {{ minecraft_rcon_password }} save-on
|
||||
|
||||
# Compress backup if enabled
|
||||
{% if backup_compression %}
|
||||
tar -czf "${BACKUP_DIR}/${BACKUP_NAME}.tar.gz" -C "${BACKUP_DIR}" "${BACKUP_NAME}"
|
||||
rm -rf "${BACKUP_DIR}/${BACKUP_NAME}"
|
||||
{% endif %}
|
||||
|
||||
# Clean old backups
|
||||
find "${BACKUP_DIR}" -name "minecraft_monthly_*" -type {% if backup_compression %}f{% else %}d{% endif %} -mtime +$((${RETENTION} * 30)) -delete
|
||||
|
||||
echo "Monthly backup completed: ${BACKUP_NAME}"
|
29
roles/04-backups/templates/backup-weekly.sh.j2
Normal file
29
roles/04-backups/templates/backup-weekly.sh.j2
Normal file
@@ -0,0 +1,29 @@
|
||||
#!/bin/bash
|
||||
|
||||
BACKUP_DIR="{{ minecraft_backups_dir }}/weekly"
|
||||
SERVER_DIR="{{ minecraft_server_dir }}"
|
||||
DATE=$(date +%Y%m%d_%H%M%S)
|
||||
BACKUP_NAME="minecraft_weekly_${DATE}"
|
||||
RETENTION={{ backup_retention_weekly }}
|
||||
|
||||
# Stop server for consistent backup
|
||||
{{ minecraft_tools_dir }}/mcrcon -H 127.0.0.1 -P {{ minecraft_rcon_port }} -p {{ minecraft_rcon_password }} save-all
|
||||
sleep 5
|
||||
{{ minecraft_tools_dir }}/mcrcon -H 127.0.0.1 -P {{ minecraft_rcon_port }} -p {{ minecraft_rcon_password }} save-off
|
||||
|
||||
# Create backup
|
||||
rsync -av --delete "${SERVER_DIR}/" "${BACKUP_DIR}/${BACKUP_NAME}/"
|
||||
|
||||
# Re-enable saving
|
||||
{{ minecraft_tools_dir }}/mcrcon -H 127.0.0.1 -P {{ minecraft_rcon_port }} -p {{ minecraft_rcon_password }} save-on
|
||||
|
||||
# Compress backup if enabled
|
||||
{% if backup_compression %}
|
||||
tar -czf "${BACKUP_DIR}/${BACKUP_NAME}.tar.gz" -C "${BACKUP_DIR}" "${BACKUP_NAME}"
|
||||
rm -rf "${BACKUP_DIR}/${BACKUP_NAME}"
|
||||
{% endif %}
|
||||
|
||||
# Clean old backups
|
||||
find "${BACKUP_DIR}" -name "minecraft_weekly_*" -type {% if backup_compression %}f{% else %}d{% endif %} -mtime +$((${RETENTION} * 7)) -delete
|
||||
|
||||
echo "Weekly backup completed: ${BACKUP_NAME}"
|
59
roles/04-backups/templates/restore.sh.j2
Normal file
59
roles/04-backups/templates/restore.sh.j2
Normal file
@@ -0,0 +1,59 @@
|
||||
#!/bin/bash
|
||||
|
||||
BACKUP_TYPE="$1" # daily, weekly, monthly
|
||||
BACKUP_DATE="$2" # YYYYMMDD_HHMMSS format
|
||||
SERVER_DIR="{{ minecraft_server_dir }}"
|
||||
BACKUP_BASE_DIR="{{ minecraft_backups_dir }}"
|
||||
|
||||
if [ $# -ne 2 ]; then
|
||||
echo "Usage: $0 <backup_type> <backup_date>"
|
||||
echo "Example: $0 daily 20241201_020000"
|
||||
echo "Available backups:"
|
||||
echo "Daily:"
|
||||
ls -1 "${BACKUP_BASE_DIR}/daily/" | grep minecraft_daily
|
||||
echo "Weekly:"
|
||||
ls -1 "${BACKUP_BASE_DIR}/weekly/" | grep minecraft_weekly
|
||||
echo "Monthly:"
|
||||
ls -1 "${BACKUP_BASE_DIR}/monthly/" | grep minecraft_monthly
|
||||
exit 1
|
||||
fi
|
||||
|
||||
BACKUP_NAME="minecraft_${BACKUP_TYPE}_${BACKUP_DATE}"
|
||||
BACKUP_DIR="${BACKUP_BASE_DIR}/${BACKUP_TYPE}"
|
||||
|
||||
{% if backup_compression %}
|
||||
BACKUP_FILE="${BACKUP_DIR}/${BACKUP_NAME}.tar.gz"
|
||||
{% else %}
|
||||
BACKUP_FILE="${BACKUP_DIR}/${BACKUP_NAME}"
|
||||
{% endif %}
|
||||
|
||||
if [ ! -e "${BACKUP_FILE}" ]; then
|
||||
echo "Backup not found: ${BACKUP_FILE}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Stop Minecraft server
|
||||
systemctl stop minecraft
|
||||
|
||||
# Backup current server (just in case)
|
||||
RESTORE_BACKUP_DIR="${BACKUP_BASE_DIR}/restore_backup"
|
||||
mkdir -p "${RESTORE_BACKUP_DIR}"
|
||||
mv "${SERVER_DIR}" "${RESTORE_BACKUP_DIR}/server_before_restore_$(date +%Y%m%d_%H%M%S)"
|
||||
|
||||
# Restore from backup
|
||||
{% if backup_compression %}
|
||||
mkdir -p "${SERVER_DIR}"
|
||||
tar -xzf "${BACKUP_FILE}" -C "${BACKUP_DIR}"
|
||||
rsync -av "${BACKUP_DIR}/${BACKUP_NAME}/" "${SERVER_DIR}/"
|
||||
rm -rf "${BACKUP_DIR}/${BACKUP_NAME}"
|
||||
{% else %}
|
||||
rsync -av "${BACKUP_FILE}/" "${SERVER_DIR}/"
|
||||
{% endif %}
|
||||
|
||||
# Fix permissions
|
||||
chown -R {{ minecraft_user }}:{{ minecraft_group }} "${SERVER_DIR}"
|
||||
|
||||
# Start Minecraft server
|
||||
systemctl start minecraft
|
||||
|
||||
echo "Restore completed from: ${BACKUP_FILE}"
|
0
roles/04-backups/vars/main.yml
Normal file
0
roles/04-backups/vars/main.yml
Normal file
5
roles/05-update/defaults/main.yml
Normal file
5
roles/05-update/defaults/main.yml
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
update_check_interval: daily
|
||||
ssh_keys_check_enabled: true
|
||||
system_update_check_enabled: true
|
||||
spigot_update_check_enabled: true
|
7
roles/05-update/handlers/main.yml
Normal file
7
roles/05-update/handlers/main.yml
Normal file
@@ -0,0 +1,7 @@
|
||||
---
|
||||
- name: reboot if needed
|
||||
reboot:
|
||||
reboot_timeout: 300
|
||||
when:
|
||||
- ansible_kernel != ansible_kernel_before_update | default(ansible_kernel)
|
||||
- reboot_required | default(false)
|
14
roles/05-update/tasks/01-check-ssh-keys.yml
Normal file
14
roles/05-update/tasks/01-check-ssh-keys.yml
Normal file
@@ -0,0 +1,14 @@
|
||||
---
|
||||
- name: Check for new SSH keys in authorized_keys
|
||||
stat:
|
||||
path: /home/{{ ansible_user }}/.ssh/authorized_keys
|
||||
register: ssh_keys_stat
|
||||
|
||||
- name: Update SSH keys if changed
|
||||
authorized_key:
|
||||
user: "{{ ansible_user }}"
|
||||
key: "{{ item }}"
|
||||
state: present
|
||||
loop: "{{ ssh_public_keys | default([]) }}"
|
||||
when: ssh_public_keys is defined
|
||||
tags: ['ssh-keys-update']
|
23
roles/05-update/tasks/02-check-system-updates.yml
Normal file
23
roles/05-update/tasks/02-check-system-updates.yml
Normal file
@@ -0,0 +1,23 @@
|
||||
---
|
||||
- name: Check for system updates (Debian/Ubuntu)
|
||||
apt:
|
||||
update_cache: yes
|
||||
cache_valid_time: 3600
|
||||
register: apt_cache_update
|
||||
when: ansible_os_family == "Debian"
|
||||
|
||||
- name: Check available upgrades
|
||||
shell: apt list --upgradable 2>/dev/null | grep -v WARNING | wc -l
|
||||
register: available_upgrades
|
||||
changed_when: false
|
||||
when: ansible_os_family == "Debian"
|
||||
|
||||
- name: Apply system updates if available
|
||||
apt:
|
||||
upgrade: yes
|
||||
autoremove: yes
|
||||
autoclean: yes
|
||||
when:
|
||||
- ansible_os_family == "Debian"
|
||||
- available_upgrades.stdout | int > 1
|
||||
notify: reboot if needed
|
26
roles/05-update/tasks/03-check-spigot-version.yml
Normal file
26
roles/05-update/tasks/03-check-spigot-version.yml
Normal file
@@ -0,0 +1,26 @@
|
||||
---
|
||||
- name: Get current Spigot version
|
||||
stat:
|
||||
path: "{{ minecraft_server_dir }}/spigot.jar"
|
||||
register: current_spigot
|
||||
|
||||
- name: Check latest Spigot version available
|
||||
uri:
|
||||
url: "https://api.papermc.io/v2/projects/paper/versions"
|
||||
method: GET
|
||||
return_content: yes
|
||||
register: spigot_versions_api
|
||||
failed_when: false
|
||||
|
||||
- name: Parse latest version
|
||||
set_fact:
|
||||
latest_spigot_version: "{{ (spigot_versions_api.json.versions | last) if spigot_versions_api.json is defined else minecraft_version }}"
|
||||
|
||||
- name: Compare versions
|
||||
set_fact:
|
||||
new_spigot_available: "{{ latest_spigot_version != minecraft_version }}"
|
||||
when: latest_spigot_version is defined
|
||||
|
||||
- name: Display version information
|
||||
debug:
|
||||
msg: "Current: {{ minecraft_version }}, Latest: {{ latest_spigot_version | default('Unknown') }}, Update available: {{ new_spigot_available | default(false) }}"
|
16
roles/05-update/tasks/04-download-new-spigot.yml
Normal file
16
roles/05-update/tasks/04-download-new-spigot.yml
Normal file
@@ -0,0 +1,16 @@
|
||||
---
|
||||
- name: Create temporary build directory
|
||||
file:
|
||||
path: "{{ minecraft_sources_dir }}/build_{{ latest_spigot_version }}"
|
||||
state: directory
|
||||
owner: "{{ minecraft_user }}"
|
||||
group: "{{ minecraft_group }}"
|
||||
mode: '0755'
|
||||
|
||||
- name: Download BuildTools for new version
|
||||
get_url:
|
||||
url: "{{ spigot_build_tools_url }}"
|
||||
dest: "{{ minecraft_sources_dir }}/build_{{ latest_spigot_version }}/BuildTools.jar"
|
||||
owner: "{{ minecraft_user }}"
|
||||
group: "{{ minecraft_group }}"
|
||||
mode: '0644'
|
38
roles/05-update/tasks/05-compile-new-version.yml
Normal file
38
roles/05-update/tasks/05-compile-new-version.yml
Normal file
@@ -0,0 +1,38 @@
|
||||
---
|
||||
- name: Compile new Spigot version
|
||||
shell: |
|
||||
cd {{ minecraft_sources_dir }}/build_{{ latest_spigot_version }}
|
||||
java -jar BuildTools.jar --rev {{ latest_spigot_version }}
|
||||
become_user: "{{ minecraft_user }}"
|
||||
args:
|
||||
creates: "{{ minecraft_sources_dir }}/build_{{ latest_spigot_version }}/spigot-{{ latest_spigot_version }}.jar"
|
||||
register: spigot_compile_result
|
||||
|
||||
- name: Set compilation success flag
|
||||
set_fact:
|
||||
new_spigot_compiled: "{{ spigot_compile_result.rc == 0 }}"
|
||||
|
||||
- name: Create new server directory
|
||||
file:
|
||||
path: "{{ minecraft_server_dir }}_{{ latest_spigot_version }}"
|
||||
state: directory
|
||||
owner: "{{ minecraft_user }}"
|
||||
group: "{{ minecraft_group }}"
|
||||
mode: '0755'
|
||||
when: new_spigot_compiled
|
||||
|
||||
- name: Copy new Spigot jar to new server directory
|
||||
copy:
|
||||
src: "{{ minecraft_sources_dir }}/build_{{ latest_spigot_version }}/spigot-{{ latest_spigot_version }}.jar"
|
||||
dest: "{{ minecraft_server_dir }}_{{ latest_spigot_version }}/spigot.jar"
|
||||
owner: "{{ minecraft_user }}"
|
||||
group: "{{ minecraft_group }}"
|
||||
mode: '0644'
|
||||
remote_src: yes
|
||||
when: new_spigot_compiled
|
||||
|
||||
- name: Copy configuration files to new server directory
|
||||
shell: |
|
||||
cp -r {{ minecraft_server_dir }}/* {{ minecraft_server_dir }}_{{ latest_spigot_version }}/
|
||||
chown -R {{ minecraft_user }}:{{ minecraft_group }} {{ minecraft_server_dir }}_{{ latest_spigot_version }}
|
||||
when: new_spigot_compiled
|
29
roles/05-update/tasks/06-switch-versions.yml
Normal file
29
roles/05-update/tasks/06-switch-versions.yml
Normal file
@@ -0,0 +1,29 @@
|
||||
---
|
||||
- name: Stop Minecraft service
|
||||
systemd:
|
||||
name: minecraft
|
||||
state: stopped
|
||||
|
||||
- name: Create version switch script
|
||||
template:
|
||||
src: version-switch.sh.j2
|
||||
dest: "{{ minecraft_tools_dir }}/version-switch.sh"
|
||||
owner: "{{ minecraft_user }}"
|
||||
group: "{{ minecraft_group }}"
|
||||
mode: '0755'
|
||||
|
||||
- name: Execute version switch
|
||||
shell: "{{ minecraft_tools_dir }}/version-switch.sh {{ minecraft_version }} {{ latest_spigot_version }}"
|
||||
become_user: "{{ minecraft_user }}"
|
||||
register: version_switch_result
|
||||
|
||||
- name: Update minecraft_version variable
|
||||
set_fact:
|
||||
minecraft_version: "{{ latest_spigot_version }}"
|
||||
when: version_switch_result.rc == 0
|
||||
|
||||
- name: Start Minecraft service
|
||||
systemd:
|
||||
name: minecraft
|
||||
state: started
|
||||
when: version_switch_result.rc == 0
|
13
roles/05-update/tasks/07-cleanup.yml
Normal file
13
roles/05-update/tasks/07-cleanup.yml
Normal file
@@ -0,0 +1,13 @@
|
||||
---
|
||||
- name: Clean up old build directories
|
||||
file:
|
||||
path: "{{ minecraft_sources_dir }}/build_{{ item }}"
|
||||
state: absent
|
||||
loop: "{{ old_versions | default([]) }}"
|
||||
|
||||
- name: Clean up old server directories
|
||||
file:
|
||||
path: "{{ minecraft_server_dir }}_{{ item }}"
|
||||
state: absent
|
||||
loop: "{{ old_versions | default([]) }}"
|
||||
when: cleanup_old_versions | default(true)
|
34
roles/05-update/tasks/main.yml
Normal file
34
roles/05-update/tasks/main.yml
Normal file
@@ -0,0 +1,34 @@
|
||||
---
|
||||
- name: Include SSH keys check tasks
|
||||
include_tasks: 01-check-ssh-keys.yml
|
||||
when: ssh_keys_check_enabled
|
||||
tags: ['update', 'ssh-keys']
|
||||
|
||||
- name: Include system updates check tasks
|
||||
include_tasks: 02-check-system-updates.yml
|
||||
when: system_update_check_enabled
|
||||
tags: ['update', 'system']
|
||||
|
||||
- name: Include Spigot version check tasks
|
||||
include_tasks: 03-check-spigot-version.yml
|
||||
when: spigot_update_check_enabled
|
||||
tags: ['update', 'spigot']
|
||||
|
||||
- name: Include new Spigot download tasks
|
||||
include_tasks: 04-download-new-spigot.yml
|
||||
when: new_spigot_available | default(false)
|
||||
tags: ['update', 'download']
|
||||
|
||||
- name: Include new version compilation tasks
|
||||
include_tasks: 05-compile-new-version.yml
|
||||
when: new_spigot_available | default(false)
|
||||
tags: ['update', 'compile']
|
||||
|
||||
- name: Include version switch tasks
|
||||
include_tasks: 06-switch-versions.yml
|
||||
when: new_spigot_compiled | default(false)
|
||||
tags: ['update', 'switch']
|
||||
|
||||
- name: Include cleanup tasks
|
||||
include_tasks: 07-cleanup.yml
|
||||
tags: ['update', 'cleanup']
|
18
roles/05-update/templates/version-switch.sh.j2
Normal file
18
roles/05-update/templates/version-switch.sh.j2
Normal file
@@ -0,0 +1,18 @@
|
||||
#!/bin/bash
|
||||
|
||||
OLD_VERSION="$1"
|
||||
NEW_VERSION="$2"
|
||||
SERVER_DIR="{{ minecraft_server_dir }}"
|
||||
BACKUP_DIR="{{ minecraft_backups_dir }}/version_backup"
|
||||
|
||||
# Create backup directory
|
||||
mkdir -p "${BACKUP_DIR}"
|
||||
|
||||
# Backup current version
|
||||
mv "${SERVER_DIR}" "${BACKUP_DIR}/server_${OLD_VERSION}_$(date +%Y%m%d_%H%M%S)"
|
||||
|
||||
# Switch to new version
|
||||
mv "${SERVER_DIR}_${NEW_VERSION}" "${SERVER_DIR}"
|
||||
|
||||
echo "Version switched from ${OLD_VERSION} to ${NEW_VERSION}"
|
||||
exit 0
|
0
roles/05-update/vars/main.yml
Normal file
0
roles/05-update/vars/main.yml
Normal file
Reference in New Issue
Block a user