Add minecraft backup
This commit is contained in:
parent
babccb4991
commit
d9b189158c
@ -6,6 +6,8 @@ minecraft_service_name: minecraft.service
|
|||||||
minecraft_service_state: started
|
minecraft_service_state: started
|
||||||
minecraft_service_enabled: yes
|
minecraft_service_enabled: yes
|
||||||
|
|
||||||
|
minecraft_port: 25565
|
||||||
|
|
||||||
minecraft_user: minecraft
|
minecraft_user: minecraft
|
||||||
minecraft_group: minecraft
|
minecraft_group: minecraft
|
||||||
|
|
||||||
@ -13,3 +15,5 @@ minecraft_jar_url: https://launcher.mojang.com/v1/objects/3dc3d84a581f14691199cf
|
|||||||
|
|
||||||
minecraft_opt_path: /opt/minecraft
|
minecraft_opt_path: /opt/minecraft
|
||||||
minecraft_var_path: "{{ minecraft_opt_path }}/var"
|
minecraft_var_path: "{{ minecraft_opt_path }}/var"
|
||||||
|
|
||||||
|
minecraft_syslog_facility: local5
|
||||||
|
114
roles/minecraft/files/minecraft-backup.sh
Normal file
114
roles/minecraft/files/minecraft-backup.sh
Normal file
@ -0,0 +1,114 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
SERVICE=minecraft.service
|
||||||
|
BACKUP_DIR=/opt/minecraft/backup
|
||||||
|
VAR_DIR=/opt/minecraft/var
|
||||||
|
SCRATCH=$(mktemp -p /var/tmp -d minecraft.XXXXXXXXXX)
|
||||||
|
NICE=15
|
||||||
|
TAR=minecraft-$(date +%Y-%m-%d).tar
|
||||||
|
WAIT=30
|
||||||
|
|
||||||
|
finish() {
|
||||||
|
printf "Cleaning up ...\n"
|
||||||
|
rm -rf "$SCRATCH"
|
||||||
|
if ! systemctl -q is-active "$SERVICE"; then
|
||||||
|
start_server
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
trap finish EXIT
|
||||||
|
|
||||||
|
error_exit() {
|
||||||
|
printf "%s\n" "$1"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
stop_server() {
|
||||||
|
local unit="${1:-$SERVICE}"
|
||||||
|
local attempts="${2:-$WAIT}"
|
||||||
|
|
||||||
|
if ! systemctl -q is-active "$unit"; then
|
||||||
|
printf "%s is already stopped\n" "$unit"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
systemctl -q stop "$unit"
|
||||||
|
|
||||||
|
while systemctl -q is-active "$unit"; do
|
||||||
|
printf "Waiting for %s to stop ... (%s)\n" "$unit" "$attempts"
|
||||||
|
((attempts--))
|
||||||
|
if ((attempts == 0)); then
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
sleep 1
|
||||||
|
done
|
||||||
|
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
start_server() {
|
||||||
|
local unit="${1:-$SERVICE}"
|
||||||
|
local attempts="${2:-$WAIT}"
|
||||||
|
|
||||||
|
if systemctl -q is-active "$unit"; then
|
||||||
|
printf "%s is already started\n" "$unit"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
systemctl -q start "$unit"
|
||||||
|
|
||||||
|
while ! systemctl -q is-active "$unit"; do
|
||||||
|
printf "Waiting for %s to start ... (%d)\n" "$unit" "$attempts"
|
||||||
|
((attempts--))
|
||||||
|
if ((attempts == 0)); then
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
sleep 1
|
||||||
|
done
|
||||||
|
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
open_files() {
|
||||||
|
local dir=${1-$VAR_DIR}
|
||||||
|
local attempts="${2:-$WAIT}"
|
||||||
|
|
||||||
|
while (($(lsof +D "$dir" | wc -l) > 0)); do
|
||||||
|
printf "Waiting for open files ... (%d)\n" "$attempts"
|
||||||
|
((attempts--))
|
||||||
|
if ((attempts == 0)); then
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
sleep 1
|
||||||
|
done
|
||||||
|
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
main() {
|
||||||
|
if ! stop_server; then
|
||||||
|
error_exit "Failed to stop $SERVICE"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! open_files; then
|
||||||
|
error_exit "Open files exist in $VAR_DIR"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! tar -cf "$SCRATCH/$TAR" -C "$VAR_DIR" world; then
|
||||||
|
error_exit "Archive failed"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! start_server; then
|
||||||
|
error_exit "Failed to start $SERVICE"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! nice -n "$NICE" xz -9 "$SCRATCH/$TAR"; then
|
||||||
|
error_exit "Failed to compress $SCRATCH/$TAR"
|
||||||
|
else
|
||||||
|
mv "$SCRATCH/$TAR.xz" "$BACKUP_DIR"
|
||||||
|
ln -nfs "$BACKUP_DIR/$TAR.xz" "$BACKUP_DIR/minecraft-latest.tar.xz"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
main
|
@ -33,6 +33,7 @@
|
|||||||
- "{{ minecraft_opt_path }}"
|
- "{{ minecraft_opt_path }}"
|
||||||
- "{{ minecraft_opt_path }}/bin"
|
- "{{ minecraft_opt_path }}/bin"
|
||||||
- "{{ minecraft_opt_path }}/etc"
|
- "{{ minecraft_opt_path }}/etc"
|
||||||
|
- "{{ minecraft_opt_path }}/backup"
|
||||||
|
|
||||||
- name: create minecraft var directory
|
- name: create minecraft var directory
|
||||||
file:
|
file:
|
||||||
@ -92,6 +93,7 @@
|
|||||||
owner: "{{ minecraft_user }}"
|
owner: "{{ minecraft_user }}"
|
||||||
group: "{{ minecraft_group }}"
|
group: "{{ minecraft_group }}"
|
||||||
mode: "0644"
|
mode: "0644"
|
||||||
|
force: no
|
||||||
notify: restart minecraft
|
notify: restart minecraft
|
||||||
|
|
||||||
- name: configure whitelist
|
- name: configure whitelist
|
||||||
@ -101,4 +103,51 @@
|
|||||||
owner: "{{ minecraft_user }}"
|
owner: "{{ minecraft_user }}"
|
||||||
group: "{{ minecraft_group }}"
|
group: "{{ minecraft_group }}"
|
||||||
mode: "0644"
|
mode: "0644"
|
||||||
|
force: no
|
||||||
notify: restart minecraft
|
notify: restart minecraft
|
||||||
|
|
||||||
|
- name: install backup script
|
||||||
|
copy:
|
||||||
|
src: minecraft-backup.sh
|
||||||
|
dest: "{{ minecraft_opt_path }}/bin/minecraft-backup"
|
||||||
|
owner: root
|
||||||
|
group: root
|
||||||
|
mode: 0700
|
||||||
|
|
||||||
|
- name: backup cron job
|
||||||
|
cron:
|
||||||
|
name: minecraft backup
|
||||||
|
minute: "0"
|
||||||
|
hour: "9"
|
||||||
|
user: root
|
||||||
|
job: "{{ minecraft_opt_path }}/bin/minecraft-backup"
|
||||||
|
|
||||||
|
- name: set world download password
|
||||||
|
htpasswd:
|
||||||
|
path: "{{ minecraft_opt_path }}/etc/htpasswd"
|
||||||
|
name: minecraft
|
||||||
|
password: minecraft
|
||||||
|
owner: root
|
||||||
|
group: root
|
||||||
|
mode: 0644
|
||||||
|
when: "'nginx' in ansible_play_role_names"
|
||||||
|
|
||||||
|
- name: configure nginx
|
||||||
|
template:
|
||||||
|
src: nginx.conf.j2
|
||||||
|
dest: /etc/nginx/sites-available/minecraft
|
||||||
|
owner: root
|
||||||
|
group: root
|
||||||
|
mode: 0644
|
||||||
|
when: "'nginx' in ansible_play_role_names"
|
||||||
|
notify: reload nginx
|
||||||
|
|
||||||
|
- name: activate site
|
||||||
|
file:
|
||||||
|
src: /etc/nginx/sites-available/minecraft
|
||||||
|
dest: /etc/nginx/sites-enabled/minecraft
|
||||||
|
owner: root
|
||||||
|
group: root
|
||||||
|
state: link
|
||||||
|
when: "'nginx' in ansible_play_role_names"
|
||||||
|
notify: reload nginx
|
||||||
|
@ -5,13 +5,15 @@ Description=Minecraft server
|
|||||||
After=network.target
|
After=network.target
|
||||||
|
|
||||||
[Service]
|
[Service]
|
||||||
ExecStart=/usr/bin/java -Xmx{{ minecraft_java_xmx | default('1024M') }} -Xms{{ minecraft_java_xms | default('1024M') }} -jar {{ minecraft_opt_path }}/bin/server.jar --nogui
|
ExecStart=/usr/bin/java -Xmx{{ minecraft_java_xmx | default('1024M') }} -Xms{{ minecraft_java_xms | default('1024M') }} -jar {{ minecraft_opt_path }}/bin/server.jar nogui
|
||||||
|
SuccessExitStatus=143
|
||||||
Type=simple
|
Type=simple
|
||||||
User={{ minecraft_user }}
|
User={{ minecraft_user }}
|
||||||
Group={{ minecraft_group }}
|
Group={{ minecraft_group }}
|
||||||
WorkingDirectory={{ minecraft_var_path }}
|
WorkingDirectory={{ minecraft_var_path }}
|
||||||
Restart=on-failure
|
Restart=on-failure
|
||||||
SyslogIdentifier=minecraft
|
SyslogIdentifier=minecraft
|
||||||
|
SyslogFacility={{ minecraft_syslog_facility }}
|
||||||
|
|
||||||
[Install]
|
[Install]
|
||||||
WantedBy=multi-user.target
|
WantedBy=multi-user.target
|
||||||
|
15
roles/minecraft/templates/nginx.conf.j2
Normal file
15
roles/minecraft/templates/nginx.conf.j2
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
# {{ ansible_managed }}
|
||||||
|
|
||||||
|
server {
|
||||||
|
listen 80;
|
||||||
|
listen [::]:80;
|
||||||
|
server_name {{ ansible_fqdn }};
|
||||||
|
|
||||||
|
root {{ minecraft_opt_path }}/backup;
|
||||||
|
|
||||||
|
location / {
|
||||||
|
autoindex on;
|
||||||
|
auth_basic "Access Restricted";
|
||||||
|
auth_basic_user_file {{ minecraft_opt_path }}/etc/htpasswd;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user