From 4f97b66c3d4402395df5ba745d48acef1bf620a6 Mon Sep 17 00:00:00 2001 From: Tobias Reisinger Date: Wed, 30 Oct 2024 16:35:46 +0100 Subject: [PATCH] Add (manual) recovery scripts --- .../backup/files/recovery/immich_database | 32 +++++++++++++++++++ playbooks/roles/backup/tasks/main.yml | 2 ++ playbooks/roles/backup/tasks/recovery.yml | 13 ++++++++ services.auto.tfvars | 2 +- 4 files changed, 48 insertions(+), 1 deletion(-) create mode 100755 playbooks/roles/backup/files/recovery/immich_database create mode 100644 playbooks/roles/backup/tasks/recovery.yml diff --git a/playbooks/roles/backup/files/recovery/immich_database b/playbooks/roles/backup/files/recovery/immich_database new file mode 100755 index 0000000..f3fd004 --- /dev/null +++ b/playbooks/roles/backup/files/recovery/immich_database @@ -0,0 +1,32 @@ +#!/usr/bin/env bash + +set -e + +tmp_dir=$(mktemp -d) + +cd /opt/services/backup/ + +echo "Restoring backup..." +autorestic -c .autorestic.all.yml restore -l immich_database --from borgbase --to "$tmp_dir" +echo "Backup restored." + +cd /opt/services/immich + +echo "Starting database..." +docker compose up -d database + +echo "Waiting for database to start..." +sleep 10 + +echo "Restoring database..." +cat "$tmp_dir/opt/services/_backup/immich_database/immich.sql.gz" \ + | gunzip \ + | sed "s/SELECT pg_catalog.set_config('search_path', '', false);/SELECT pg_catalog.set_config('search_path', 'public, pg_catalog', true);/g" \ + | docker exec -i immich-database-1 psql --username=immich +echo "Database restored." + +echo "Removing temporary files..." +rm -rf "$tmp_dir" + +echo "Starting services..." +docker compose up -d diff --git a/playbooks/roles/backup/tasks/main.yml b/playbooks/roles/backup/tasks/main.yml index f07ed74..5f67f92 100644 --- a/playbooks/roles/backup/tasks/main.yml +++ b/playbooks/roles/backup/tasks/main.yml @@ -31,6 +31,8 @@ - name: Import tasks specific to the hooks scripts ansible.builtin.import_tasks: hooks.yml + - name: Import tasks specific to the recovery scripts + ansible.builtin.import_tasks: recovery.yml - name: Import tasks specific to systemd ansible.builtin.import_tasks: systemd.yml diff --git a/playbooks/roles/backup/tasks/recovery.yml b/playbooks/roles/backup/tasks/recovery.yml new file mode 100644 index 0000000..2398660 --- /dev/null +++ b/playbooks/roles/backup/tasks/recovery.yml @@ -0,0 +1,13 @@ +- name: Set recovery path + ansible.builtin.set_fact: + recovery_path: "{{ (service_path, 'recovery') | path_join }}" +- name: Create recovery directory + ansible.builtin.file: + path: "{{ recovery_path }}" + state: directory + mode: "0755" +- name: Copy the recovery + ansible.builtin.copy: + src: recovery/ + dest: "{{ recovery_path }}" + mode: "0755" diff --git a/services.auto.tfvars b/services.auto.tfvars index 6f57077..35bcfc6 100644 --- a/services.auto.tfvars +++ b/services.auto.tfvars @@ -177,7 +177,7 @@ services = { }, "immich" = { - host = "node002" + host = "node001" dns = [{ domain = "gallery.serguzim.me" }]