Compare commits
3 Commits
c4b0200dc6
...
daeef1bc4b
Author | SHA1 | Date | |
---|---|---|---|
daeef1bc4b
|
|||
ddae18f8b3
|
|||
8c8657fdd8
|
@ -5,21 +5,22 @@ set -o pipefail
|
|||||||
|
|
||||||
echo "Backup: perform gitea backup"
|
echo "Backup: perform gitea backup"
|
||||||
|
|
||||||
su --login gitea -c '/home/gitea/gitea-dump.sh'
|
su --login gitea --command '/home/gitea/backup.sh'
|
||||||
mkdir -p {{ backup_directory }}/gitea
|
|
||||||
mv /home/gitea/backups/* {{ backup_directory }}/gitea
|
|
||||||
|
|
||||||
echo "Backup: perform backup with gobackup"
|
|
||||||
|
|
||||||
gobackup perform --config={{ backup_gobackup_config }}
|
echo "Backup: perform gramps backup"
|
||||||
|
|
||||||
|
su --login {{ primary_user }} --command '/home/{{ primary_user }}/applications/gramps/backup.sh'
|
||||||
|
|
||||||
|
|
||||||
echo "Backup: send backups to remote storage with retic"
|
echo "Backup: send backups to remote storage with retic"
|
||||||
|
|
||||||
restic-shell.sh backup --verbose {{ backup_directory }} \
|
restic-shell.sh backup --verbose /home/gitea/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
|
||||||
|
|
||||||
|
|
||||||
echo "Backup: send notification"
|
echo "Backup: send notification"
|
||||||
|
|
||||||
curl -s -X POST 'https://api.telegram.org/bot{{ notifications_tg_bot_token }}/sendMessage' \
|
curl -s -X POST 'https://api.telegram.org/bot{{ notifications_tg_bot_token }}/sendMessage' \
|
||||||
@ -27,8 +28,4 @@ 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 "\nRemove old files"
|
|
||||||
|
|
||||||
keep-files.py {{ backup_directory }}/gitea --keep 2
|
|
||||||
|
|
||||||
echo -e "\nBackup: done"
|
echo -e "\nBackup: done"
|
@ -1,32 +0,0 @@
|
|||||||
# https://gobackup.github.io/configuration
|
|
||||||
|
|
||||||
models:
|
|
||||||
|
|
||||||
gramps:
|
|
||||||
compress_with:
|
|
||||||
type: 'tgz'
|
|
||||||
storages:
|
|
||||||
local:
|
|
||||||
type: 'local'
|
|
||||||
path: '{{ (backup_directory, "gramps") | path_join }}'
|
|
||||||
keep: 2
|
|
||||||
databases:
|
|
||||||
users:
|
|
||||||
type: sqlite
|
|
||||||
path: /home/major/applications/gramps/data/gramps_users/users.sqlite
|
|
||||||
search_index:
|
|
||||||
type: sqlite
|
|
||||||
path: /home/major/applications/gramps/data/gramps_index/search_index.db
|
|
||||||
sqlite:
|
|
||||||
type: sqlite
|
|
||||||
path: /home/major/applications/gramps/data/gramps_db/59a0f3d6-1c3d-4410-8c1d-1c9c6689659f/sqlite.db
|
|
||||||
undo:
|
|
||||||
type: sqlite
|
|
||||||
path: /home/major/applications/gramps/data/gramps_db/59a0f3d6-1c3d-4410-8c1d-1c9c6689659f/undo.db
|
|
||||||
archive:
|
|
||||||
includes:
|
|
||||||
- /home/major/applications/gramps
|
|
||||||
excludes:
|
|
||||||
- /home/major/applications/gramps/data/gramps_cache
|
|
||||||
- /home/major/applications/gramps/data/gramps_thumb_cache
|
|
||||||
- /home/major/applications/gramps/data/gramps_tmp
|
|
21
files/gitea/backup.sh.j2
Normal file
21
files/gitea/backup.sh.j2
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -eu
|
||||||
|
set -o pipefail
|
||||||
|
|
||||||
|
echo "Gitea: backup data with gitea dump"
|
||||||
|
|
||||||
|
(cd "{{ base_dir }}" && \
|
||||||
|
docker compose exec \
|
||||||
|
-u "{{ user_create_result.uid }}:{{ user_create_result.group }}" \
|
||||||
|
-w /backups gitea_app \
|
||||||
|
gitea dump -c /data/gitea/conf/app.ini \
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
echo "Gitea: remove old backups"
|
||||||
|
|
||||||
|
keep-files.py "{{ backups_dir }}" --keep 3
|
||||||
|
|
||||||
|
|
||||||
|
echo "Gitea: done."
|
@ -8,8 +8,8 @@ services:
|
|||||||
- "127.0.0.1:{{ gitea_port }}:3000"
|
- "127.0.0.1:{{ gitea_port }}:3000"
|
||||||
- "2222:22"
|
- "2222:22"
|
||||||
volumes:
|
volumes:
|
||||||
- ./data:/data
|
- {{ data_dir }}:/data
|
||||||
- ./backups:/backups
|
- {{ backups_dir }}:/backups
|
||||||
- /etc/timezone:/etc/timezone:ro
|
- /etc/timezone:/etc/timezone:ro
|
||||||
- /etc/localtime:/etc/localtime:ro
|
- /etc/localtime:/etc/localtime:ro
|
||||||
environment:
|
environment:
|
||||||
|
@ -1,13 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
set -eu
|
|
||||||
set -o pipefail
|
|
||||||
|
|
||||||
echo "Gitea: backup data with gitea dump"
|
|
||||||
|
|
||||||
(cd {{ base_dir }} && docker compose exec -u "{{ user_create_result.uid }}:{{ user_create_result.group }}" -w /backups gitea_app gitea dump -c /data/gitea/conf/app.ini)
|
|
||||||
|
|
||||||
|
|
||||||
echo "Gitea: remove old backups"
|
|
||||||
|
|
||||||
keep-files.py {{ backups_dir }} --keep 2
|
|
10
files/gramps/backup.sh.j2
Normal file
10
files/gramps/backup.sh.j2
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -eu
|
||||||
|
set -o pipefail
|
||||||
|
|
||||||
|
echo "Gramps: backup data with gobackups"
|
||||||
|
|
||||||
|
(cd "{{ base_dir }}" && gobackup perform --config "{{ gobackup_config }}")
|
||||||
|
|
||||||
|
echo "Gramps: done."
|
32
files/gramps/gobackup.yml.j2
Normal file
32
files/gramps/gobackup.yml.j2
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
# https://gobackup.github.io/configuration
|
||||||
|
|
||||||
|
models:
|
||||||
|
|
||||||
|
gramps:
|
||||||
|
compress_with:
|
||||||
|
type: 'tgz'
|
||||||
|
storages:
|
||||||
|
local:
|
||||||
|
type: 'local'
|
||||||
|
path: '{{ backups_dir }}'
|
||||||
|
keep: 3
|
||||||
|
databases:
|
||||||
|
users:
|
||||||
|
type: sqlite
|
||||||
|
path: "{{ (data_dir, 'gramps_users/users.sqlite') | path_join }}"
|
||||||
|
search_index:
|
||||||
|
type: sqlite
|
||||||
|
path: "{{ (data_dir, 'gramps_index/search_index.db') | path_join }}"
|
||||||
|
sqlite:
|
||||||
|
type: sqlite
|
||||||
|
path: "{{ (data_dir, 'gramps_db/59a0f3d6-1c3d-4410-8c1d-1c9c6689659f/sqlite.db') | path_join }}"
|
||||||
|
undo:
|
||||||
|
type: sqlite
|
||||||
|
path: "{{ (data_dir, 'gramps_db/59a0f3d6-1c3d-4410-8c1d-1c9c6689659f/undo.db') | path_join }}"
|
||||||
|
archive:
|
||||||
|
includes:
|
||||||
|
- "{{ data_dir }}"
|
||||||
|
excludes:
|
||||||
|
- "{{ (data_dir, 'gramps_cache') | path_join }}"
|
||||||
|
- "{{ (data_dir, 'gramps_thumb_cache') | path_join }}"
|
||||||
|
- "{{ (data_dir, 'gramps_tmp') | path_join }}"
|
@ -6,33 +6,23 @@
|
|||||||
- vars/vars.yml
|
- vars/vars.yml
|
||||||
- vars/secrets.yml
|
- vars/secrets.yml
|
||||||
|
|
||||||
|
vars:
|
||||||
|
restic_shell_script: "{{ (bin_prefix, 'restic-shell.sh') | path_join }}"
|
||||||
|
backup_all_script: "{{ (bin_prefix, 'backup-all.sh') | path_join }}"
|
||||||
|
|
||||||
tasks:
|
tasks:
|
||||||
- name: "Copy restic shell script"
|
- name: "Copy restic shell script"
|
||||||
ansible.builtin.template:
|
ansible.builtin.template:
|
||||||
src: "files/backups/restic-shell.sh.j2"
|
src: "files/backups/restic-shell.sh.j2"
|
||||||
dest: "{{ bin_prefix }}/restic-shell.sh"
|
dest: "{{ restic_shell_script }}"
|
||||||
owner: root
|
owner: root
|
||||||
group: root
|
group: root
|
||||||
mode: "0700"
|
mode: "0700"
|
||||||
|
|
||||||
- name: "Copy restic backup script"
|
- name: "Copy backup all script"
|
||||||
ansible.builtin.template:
|
ansible.builtin.template:
|
||||||
src: "files/backups/restic-backup.sh.j2"
|
src: "files/backups/backup-all.sh.j2"
|
||||||
dest: "{{ bin_prefix }}/restic-backup.sh"
|
dest: "{{ backup_all_script }}"
|
||||||
owner: root
|
|
||||||
group: root
|
|
||||||
mode: "0700"
|
|
||||||
|
|
||||||
- name: "Create gobackup config directory"
|
|
||||||
ansible.builtin.file:
|
|
||||||
path: "{{ backup_gobackup_config | dirname }}"
|
|
||||||
state: directory
|
|
||||||
mode: "0755"
|
|
||||||
|
|
||||||
- name: "Copy gobackup config files"
|
|
||||||
ansible.builtin.template:
|
|
||||||
src: "files/backups/gobackup.yml.j2"
|
|
||||||
dest: "{{ backup_gobackup_config }}"
|
|
||||||
owner: root
|
owner: root
|
||||||
group: root
|
group: root
|
||||||
mode: "0700"
|
mode: "0700"
|
||||||
@ -58,6 +48,6 @@
|
|||||||
name: "restic backup"
|
name: "restic backup"
|
||||||
minute: "0"
|
minute: "0"
|
||||||
hour: "1"
|
hour: "1"
|
||||||
job: "/usr/local/bin/restic-backup.sh 2>&1 | logger -t backup"
|
job: "{{ backup_all_script }} 2>&1 | logger -t backup"
|
||||||
cron_file: "ansible_restic_backup"
|
cron_file: "ansible_restic_backup"
|
||||||
user: "root"
|
user: "root"
|
||||||
|
@ -10,6 +10,7 @@
|
|||||||
app_name: "gitea"
|
app_name: "gitea"
|
||||||
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 }}"
|
||||||
backups_dir: "{{ (base_dir, 'backups') | path_join }}"
|
backups_dir: "{{ (base_dir, 'backups') | path_join }}"
|
||||||
|
|
||||||
tasks:
|
tasks:
|
||||||
@ -36,15 +37,15 @@
|
|||||||
state: "directory"
|
state: "directory"
|
||||||
owner: "{{ app_user }}"
|
owner: "{{ app_user }}"
|
||||||
group: "{{ app_user }}"
|
group: "{{ app_user }}"
|
||||||
mode: "0775"
|
mode: "0770"
|
||||||
loop:
|
loop:
|
||||||
- "{{ (base_dir, 'data') | path_join }}"
|
- "{{ data_dir }}"
|
||||||
- "{{ backups_dir }}"
|
- "{{ backups_dir }}"
|
||||||
|
|
||||||
- name: "Copy gitea-dump script"
|
- name: "Copy backup script"
|
||||||
ansible.builtin.template:
|
ansible.builtin.template:
|
||||||
src: "files/{{ app_name }}/gitea-dump.sh.j2"
|
src: "files/{{ app_name }}/backup.sh.j2"
|
||||||
dest: "{{ base_dir }}/gitea-dump.sh"
|
dest: "{{ base_dir }}/backup.sh"
|
||||||
owner: "{{ app_user }}"
|
owner: "{{ app_user }}"
|
||||||
group: "{{ app_user }}"
|
group: "{{ app_user }}"
|
||||||
mode: "0750"
|
mode: "0750"
|
||||||
@ -55,7 +56,7 @@
|
|||||||
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: "Run application with docker compose"
|
- name: "Run application with docker compose"
|
||||||
community.docker.docker_compose_v2:
|
community.docker.docker_compose_v2:
|
||||||
|
@ -8,27 +8,48 @@
|
|||||||
|
|
||||||
vars:
|
vars:
|
||||||
app_name: "gramps"
|
app_name: "gramps"
|
||||||
base_dir: "/home/{{ primary_user }}/applications/{{ app_name }}/"
|
app_user: "{{ primary_user }}"
|
||||||
|
base_dir: "/home/{{ primary_user }}/applications/{{ app_name }}"
|
||||||
|
data_dir: "{{ (base_dir, 'data') | path_join }}"
|
||||||
|
backups_dir: "{{ (base_dir, 'backups') | path_join }}"
|
||||||
|
gobackup_config: "{{ (base_dir, 'gobackup.yml') | path_join }}"
|
||||||
|
|
||||||
tasks:
|
tasks:
|
||||||
- name: "Create application directories"
|
- name: "Create application directories"
|
||||||
ansible.builtin.file:
|
ansible.builtin.file:
|
||||||
path: "{{ item }}"
|
path: "{{ item }}"
|
||||||
state: "directory"
|
state: "directory"
|
||||||
owner: "{{ primary_user }}"
|
owner: "{{ app_user }}"
|
||||||
group: "{{ primary_user }}"
|
group: "{{ app_user }}"
|
||||||
mode: "0755"
|
mode: "0750"
|
||||||
loop:
|
loop:
|
||||||
- "{{ base_dir }}"
|
- "{{ base_dir }}"
|
||||||
- '{{ (base_dir, "data") | path_join }}'
|
- "{{ data_dir }}"
|
||||||
|
- "{{ backups_dir }}"
|
||||||
|
|
||||||
|
- name: "Copy gobackup config"
|
||||||
|
ansible.builtin.template:
|
||||||
|
src: "./files/{{ app_name }}/gobackup.yml.j2"
|
||||||
|
dest: "{{ gobackup_config }}"
|
||||||
|
owner: "{{ app_user }}"
|
||||||
|
group: "{{ app_user }}"
|
||||||
|
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: "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: "{{ primary_user }}"
|
owner: "{{ app_user }}"
|
||||||
group: "{{ primary_user }}"
|
group: "{{ app_user }}"
|
||||||
mode: "0644"
|
mode: "0640"
|
||||||
|
|
||||||
- name: "Run application with docker compose"
|
- name: "Run application with docker compose"
|
||||||
community.docker.docker_compose_v2:
|
community.docker.docker_compose_v2:
|
||||||
|
Reference in New Issue
Block a user