This commit is contained in:
Sergei Poljanski 2025-11-01 22:46:38 +02:00
commit 67414814c0
23 changed files with 310 additions and 190 deletions

View file

@ -1,79 +1,67 @@
---
- name: Create local backup directory
- name: Create backup directory on ops server
file:
path: "{{ backup_dest_dir }}"
state: directory
mode: '0755'
delegate_to: localhost
become: false
owner: asxpi
group: asxpi
delegate_to: asxpio-ops
become: true
- name: Check if Forgejo service is running on old server
systemd:
name: forgejo
register: forgejo_service
- name: Stop Forgejo service temporarily for backup
systemd:
name: forgejo
state: stopped
when: forgejo_service.status.ActiveState == "active"
- name: Create Forgejo dump backup
command: >
/usr/bin/forgejo dump
-c /etc/forgejo/app.ini
-w /srv/gitea
--tempdir /tmp
args:
chdir: /srv/gitea
register: dump_output
- name: Get dump filename
- name: Find existing Forgejo dump files on old server
find:
paths: /srv/gitea
patterns: "gitea-dump-*.zip"
register: dump_file
patterns: "*.zip"
file_type: file
register: existing_dumps
- name: Create additional backup archive
- name: Create backup archive from old server
archive:
path:
- /srv/gitea/gitea.db
- /srv/gitea/data
- /var/lib/forgejo/.ssh
- /var/lib/forgejo-runner/.runner
dest: /tmp/forgejo-additional-{{ ansible_date_time.date }}.tar.gz
- /srv/gitea/data/avatars
- /srv/gitea/data/repo-avatars
- /srv/gitea/data/repo-archive
- /srv/gitea/data/attachments
- /srv/gitea/data/gitea-repositories
dest: /tmp/forgejo-full-backup-{{ ansible_date_time.date }}.tar.gz
format: gz
ignore_errors: true
become: true
- name: Fetch dump file to local machine
fetch:
src: "{{ dump_file.files[0].path }}"
dest: "{{ backup_dest_dir }}/"
flat: true
when: dump_file.files | length > 0
- name: Fetch additional backup to local machine
fetch:
src: /tmp/forgejo-additional-{{ ansible_date_time.date }}.tar.gz
dest: "{{ backup_dest_dir }}/"
flat: true
ignore_errors: true
- name: Start Forgejo service
systemd:
name: forgejo
state: started
when: forgejo_service.status.ActiveState == "active"
- name: Display backup information
- name: Display found backup files
debug:
msg: |
Forgejo backup completed successfully!
Found {{ existing_dumps.files | length }} dump files
Created full backup archive: /tmp/forgejo-full-backup-{{ ansible_date_time.date }}.tar.gz
Backup files saved to: {{ backup_dest_dir }}/
- Forgejo dump: {{ dump_file.files[0].path | basename }}
- Additional data: forgejo-additional-{{ ansible_date_time.date }}.tar.gz
- name: Fetch dump file to ops server (if exists)
synchronize:
mode: pull
src: "{{ (existing_dumps.files | sort(attribute='mtime', reverse=true) | first).path }}"
dest: /opt/forgejo-backup/
delegate_to: asxpio-ops
when: existing_dumps.files | length > 0
ignore_errors: true
Next steps:
1. Verify backup integrity
2. Run restore playbook: ansible-playbook playbooks/restore-forgejo.yaml
- name: Fetch full backup archive to ops server
synchronize:
mode: pull
src: /tmp/forgejo-full-backup-{{ ansible_date_time.date }}.tar.gz
dest: /opt/forgejo-backup/
delegate_to: asxpio-ops
become: true
- name: Display backup location
debug:
msg: |
Backup files transferred to asxpio-ops:/opt/forgejo-backup/
Files:
- forgejo-full-backup-{{ ansible_date_time.date }}.tar.gz (complete backup)
{% if existing_dumps.files | length > 0 %}
- {{ (existing_dumps.files | sort(attribute='mtime', reverse=true) | first).path | basename }} (dump file)
{% endif %}
Next step: Run restore playbook
ansible-playbook playbooks/restore-forgejo.yaml