196 lines
5.4 KiB
YAML
196 lines
5.4 KiB
YAML
---
|
|
# Ansible Playbook: Backup-Server Konfiguration (Borg + Rclone)
|
|
# Läuft auf dem zentralen Backup-Server unter Proxmox
|
|
|
|
- name: Configure Borg Backup Server with Rclone S3 Sync
|
|
hosts: backup_server
|
|
become: yes
|
|
|
|
vars:
|
|
backup_user: "backup"
|
|
backup_group: "backup"
|
|
backup_home: "/home/backup"
|
|
backup_repos_dir: "/backup/repos"
|
|
rclone_config_dir: "/home/backup/.config/rclone"
|
|
hetzner_s3_bucket: "mbo-backups"
|
|
hetzner_s3_region: "fsn1"
|
|
# Secrets sollten via Ansible Vault oder Umgebungsvariablen gesetzt werden
|
|
# hetzner_s3_access_key: "{{ vault_hetzner_s3_access_key }}"
|
|
# hetzner_s3_secret_key: "{{ vault_hetzner_s3_secret_key }}"
|
|
|
|
tasks:
|
|
# ======================
|
|
# 1. User Setup
|
|
# ======================
|
|
- name: Create backup user
|
|
user:
|
|
name: "{{ backup_user }}"
|
|
home: "{{ backup_home }}"
|
|
shell: /bin/bash
|
|
state: present
|
|
|
|
- name: Create backup directories
|
|
file:
|
|
path: "{{ item }}"
|
|
state: directory
|
|
owner: "{{ backup_user }}"
|
|
group: "{{ backup_group }}"
|
|
mode: "0700"
|
|
loop:
|
|
- "{{ backup_repos_dir }}"
|
|
- "{{ backup_home }}/.ssh"
|
|
- "{{ rclone_config_dir }}"
|
|
|
|
# ======================
|
|
# 2. SSH Setup
|
|
# ======================
|
|
- name: Create SSH authorized_keys for backup user
|
|
file:
|
|
path: "{{ backup_home }}/.ssh/authorized_keys"
|
|
state: touch
|
|
owner: "{{ backup_user }}"
|
|
group: "{{ backup_group }}"
|
|
mode: "0600"
|
|
|
|
- name: Add SSH key restrictions for backup user
|
|
copy:
|
|
content: |
|
|
# Borg Backup Clients - restrict commands
|
|
restrict,command="/usr/bin/borg serve --restrict-to-paths {{ backup_repos_dir }}" ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDemKoq...
|
|
dest: "{{ backup_home }}/.ssh/authorized_keys"
|
|
owner: "{{ backup_user }}"
|
|
group: "{{ backup_group }}"
|
|
mode: "0600"
|
|
register: ssh_auth_updated
|
|
# TODO: Tatsächliche SSH-Keys hier einfügen
|
|
|
|
# ======================
|
|
# 3. Borg Server Setup
|
|
# ======================
|
|
- name: Install Borg Server
|
|
apt:
|
|
name:
|
|
- borgbackup
|
|
- openssh-server
|
|
- rclone
|
|
- curl
|
|
state: present
|
|
|
|
- name: Create borg serve wrapper script
|
|
copy:
|
|
content: |
|
|
#!/bin/bash
|
|
# Wrapper für restricted SSH/borg serve
|
|
exec /usr/bin/borg serve --restrict-to-paths {{ backup_repos_dir }} "$@"
|
|
dest: "/usr/local/bin/borg-serve-wrapper"
|
|
mode: "0755"
|
|
owner: root
|
|
group: root
|
|
|
|
# ======================
|
|
# 4. Rclone Configuration
|
|
# ======================
|
|
- name: Install rclone
|
|
apt:
|
|
name: rclone
|
|
state: present
|
|
|
|
- name: Create rclone config for Hetzner S3
|
|
template:
|
|
src: "rclone.conf.j2"
|
|
dest: "{{ rclone_config_dir }}/rclone.conf"
|
|
owner: "{{ backup_user }}"
|
|
group: "{{ backup_group }}"
|
|
mode: "0600"
|
|
|
|
- name: Test rclone S3 connection
|
|
become_user: "{{ backup_user }}"
|
|
command: "/usr/bin/rclone ls hetzner:/{{ hetzner_s3_bucket }}"
|
|
register: rclone_test
|
|
changed_when: false
|
|
ignore_errors: yes
|
|
|
|
- name: Display rclone test result
|
|
debug:
|
|
msg: "Rclone S3 connection: {{ 'SUCCESS' if rclone_test.rc == 0 else 'FAILED' }}"
|
|
|
|
# ======================
|
|
# 5. Systemd Service für Rclone Sync
|
|
# ======================
|
|
- name: Create rclone sync service
|
|
template:
|
|
src: "rclone-sync.service.j2"
|
|
dest: "/etc/systemd/system/mbo-rclone-sync.service"
|
|
mode: "0644"
|
|
|
|
- name: Create rclone sync timer
|
|
template:
|
|
src: "rclone-sync.timer.j2"
|
|
dest: "/etc/systemd/system/mbo-rclone-sync.timer"
|
|
mode: "0644"
|
|
|
|
- name: Reload systemd
|
|
systemd:
|
|
daemon_reload: yes
|
|
|
|
- name: Enable rclone sync timer
|
|
systemd:
|
|
name: mbo-rclone-sync.timer
|
|
enabled: yes
|
|
state: started
|
|
|
|
# ======================
|
|
# 6. Monitoring & Logging
|
|
# ======================
|
|
- name: Create log directory
|
|
file:
|
|
path: "/var/log/mbo-backup"
|
|
state: directory
|
|
owner: "{{ backup_user }}"
|
|
group: "{{ backup_group }}"
|
|
mode: "0755"
|
|
|
|
- name: Create logrotate config
|
|
copy:
|
|
content: |
|
|
/var/log/mbo-backup/*.log {
|
|
daily
|
|
rotate 14
|
|
compress
|
|
delaycompress
|
|
notifempty
|
|
create 0640 {{ backup_user }} {{ backup_group }}
|
|
sharedscripts
|
|
}
|
|
dest: "/etc/logrotate.d/mbo-backup"
|
|
mode: "0644"
|
|
|
|
# ======================
|
|
# 7. Verify Installation
|
|
# ======================
|
|
- name: Check Borg version
|
|
command: /usr/bin/borg --version
|
|
register: borg_version
|
|
changed_when: false
|
|
|
|
- name: Check Rclone version
|
|
command: /usr/bin/rclone --version
|
|
register: rclone_version
|
|
changed_when: false
|
|
|
|
- name: Display installation summary
|
|
debug:
|
|
msg: |
|
|
✓ Backup Server Configured
|
|
✓ {{ borg_version.stdout }}
|
|
✓ {{ rclone_version.stdout }}
|
|
✓ Backup repos dir: {{ backup_repos_dir }}
|
|
✓ Rclone S3 sync: enabled
|
|
✓ Next sync: systemctl list-timers mbo-rclone-sync.timer
|
|
|
|
handlers:
|
|
- name: Reload SSH
|
|
systemd:
|
|
name: ssh
|
|
state: reloaded
|