1
0

Outline: configure backups

This commit is contained in:
Anton Vakhrushev 2025-05-05 16:53:09 +03:00
parent daeef1bc4b
commit cd4a7177d7
Signed by: av
GPG Key ID: F5BF52FC352E255A
4 changed files with 54 additions and 7 deletions

View File

@ -8,6 +8,11 @@ echo "Backup: perform gitea backup"
su --login gitea --command '/home/gitea/backup.sh' su --login gitea --command '/home/gitea/backup.sh'
echo "Backup: perform outline backup"
su --login outline --command '/home/outline/backup.sh'
echo "Backup: perform gramps backup" echo "Backup: perform gramps backup"
su --login {{ primary_user }} --command '/home/{{ primary_user }}/applications/gramps/backup.sh' su --login {{ primary_user }} --command '/home/{{ primary_user }}/applications/gramps/backup.sh'
@ -15,7 +20,7 @@ su --login {{ primary_user }} --command '/home/{{ primary_user }}/applications/g
echo "Backup: send backups to remote storage with retic" echo "Backup: send backups to remote storage with retic"
restic-shell.sh backup --verbose /home/gitea/backups /home/major/applications/gramps/backups \ restic-shell.sh backup --verbose /home/gitea/backups /home/outline/backups /home/major/applications/gramps/backups \
&& restic-shell.sh check \ && restic-shell.sh check \
&& restic-shell.sh forget --compact --prune --keep-daily 90 --keep-monthly 36 \ && restic-shell.sh forget --compact --prune --keep-daily 90 --keep-monthly 36 \
&& restic-shell.sh check && restic-shell.sh check
@ -28,4 +33,5 @@ curl -s -X POST 'https://api.telegram.org/bot{{ notifications_tg_bot_token }}/se
-d 'parse_mode=HTML' \ -d 'parse_mode=HTML' \
-d 'text=<b>{{ notifications_name }}</b>: бекап успешно завершен!' -d 'text=<b>{{ notifications_name }}</b>: бекап успешно завершен!'
echo -e "\nBackup: done" echo -e "\nBackup: done"

View File

@ -0,0 +1,25 @@
#!/usr/bin/env bash
set -eu
set -o pipefail
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
BACKUP_FILE="outline_postgres_${TIMESTAMP}.sql.gz"
echo "Outline: backing up PostgreSQL database"
docker compose --file "{{ base_dir }}/docker-compose.yml" exec \
outline_postgres \
pg_dump \
-U "{{ outline_postgres_user }}" \
"{{ outline_postgres_database }}" \
| gzip > "{{ postgres_backups_dir }}/${BACKUP_FILE}"
echo "Outline: PostgreSQL backup saved to {{ postgres_backups_dir }}/${BACKUP_FILE}"
echo "Outline: removing old backups"
# Keep only the 3 most recent backups
keep-files.py "{{ postgres_backups_dir }}" --keep 3
echo "Outline: backup completed successfully."

View File

@ -58,11 +58,8 @@ services:
container_name: outline_postgres container_name: outline_postgres
restart: unless-stopped restart: unless-stopped
volumes: volumes:
- ./data/postgres:/var/lib/postgresql/data - {{ postgres_data_dir }}:/var/lib/postgresql/data
environment: environment:
POSTGRES_USER: '{{ outline_postgres_user }}' POSTGRES_USER: '{{ outline_postgres_user }}'
POSTGRES_PASSWORD: '{{ outline_postgres_password }}' POSTGRES_PASSWORD: '{{ outline_postgres_password }}'
POSTGRES_DB: '{{ outline_postgres_database }}' POSTGRES_DB: '{{ outline_postgres_database }}'
volumes:
database-data:

View File

@ -11,7 +11,8 @@
app_user: "{{ app_name }}" app_user: "{{ app_name }}"
base_dir: "/home/{{ app_name }}" base_dir: "/home/{{ app_name }}"
data_dir: "{{ (base_dir, 'data') | path_join }}" data_dir: "{{ (base_dir, 'data') | path_join }}"
backups_dir: "{{ (base_dir, 'backups') | path_join }}" postgres_data_dir: "{{ (base_dir, 'data', 'postgres') | path_join }}"
postgres_backups_dir: "{{ (base_dir, 'backups', 'postgres') | path_join }}"
tasks: tasks:
- name: "Create user and environment" - name: "Create user and environment"
@ -31,13 +32,31 @@
USER_UID: "{{ user_create_result.uid }}" USER_UID: "{{ user_create_result.uid }}"
USER_GID: "{{ user_create_result.group }}" USER_GID: "{{ user_create_result.group }}"
- name: "Create internal directories"
ansible.builtin.file:
path: "{{ item }}"
state: "directory"
owner: "{{ app_user }}"
group: "{{ app_user }}"
mode: "0770"
loop:
- "{{ postgres_backups_dir }}"
- name: "Copy docker compose file" - name: "Copy docker compose file"
ansible.builtin.template: ansible.builtin.template:
src: "./files/{{ app_name }}/docker-compose.yml.j2" src: "./files/{{ app_name }}/docker-compose.yml.j2"
dest: "{{ base_dir }}/docker-compose.yml" dest: "{{ base_dir }}/docker-compose.yml"
owner: "{{ app_user }}" owner: "{{ app_user }}"
group: "{{ app_user }}" group: "{{ app_user }}"
mode: "0644" mode: "0640"
- name: "Copy backup script"
ansible.builtin.template:
src: "./files/{{ app_name }}/backup.sh.j2"
dest: "{{ base_dir }}/backup.sh"
owner: "{{ app_user }}"
group: "{{ app_user }}"
mode: "0750"
- name: "Run application with docker compose" - name: "Run application with docker compose"
community.docker.docker_compose_v2: community.docker.docker_compose_v2: