84 lines
2.8 KiB
YAML
84 lines
2.8 KiB
YAML
---
|
|
- name: Backup Postgres
|
|
hosts: postgres
|
|
gather_facts: yes
|
|
become: yes
|
|
|
|
vars:
|
|
postgres_container_name: "{{ postgres.dockercompose.services.postgres.container_name }}"
|
|
postgres_user: "{{ postgres.dockercompose.services.postgres.environment.POSTGRES_USER }}"
|
|
backup_dir: "{{ backup_root_dir }}/{{ backup_dirname }}"
|
|
scripts_dir: "/home/pi/arcodange/docker_composes/postgres/scripts"
|
|
keep_days: 3
|
|
|
|
tasks:
|
|
- name: S'assurer que le répertoire de backup existe
|
|
file:
|
|
path: "{{ backup_dir }}"
|
|
state: directory
|
|
mode: '0755'
|
|
|
|
- name: define backup command
|
|
set_fact:
|
|
backup_cmd: "docker exec {{ postgres_container_name }} pg_dumpall -U {{ postgres_user }}"
|
|
|
|
- name: test backup_cmd
|
|
ansible.builtin.shell: |
|
|
{{ backup_cmd }} > /dev/null
|
|
|
|
- name: Créer le script de backup
|
|
copy:
|
|
dest: "{{ scripts_dir }}/backup.sh"
|
|
mode: '0755'
|
|
content: |
|
|
#!/bin/bash
|
|
set -e
|
|
mkdir -p {{ backup_dir }}
|
|
{{ backup_cmd }} | gzip > {{ backup_dir }}/backup_$(date +\%Y\%m\%d).sql.gz
|
|
find {{ backup_dir }} -type f -name 'backup_*.sql.gz' -mtime +{{ keep_days }} -delete
|
|
|
|
- name: Ajouter une tâche cron pour dump PostgreSQL tous les jours à 4h avec compression
|
|
cron:
|
|
name: "Backup PostgreSQL compressé"
|
|
minute: "0"
|
|
hour: "4"
|
|
user: root
|
|
job: "{{ scripts_dir }}/backup.sh"
|
|
|
|
- name: Créer le script de restauration
|
|
copy:
|
|
dest: "{{ scripts_dir }}/restore.sh"
|
|
mode: '0755'
|
|
content: |
|
|
#!/bin/bash
|
|
set -e
|
|
|
|
CONTAINER_NAME="{{ postgres_container_name }}"
|
|
POSTGRES_USER="{{ postgres_user }}"
|
|
BACKUP_DIR="{{ backup_dir }}"
|
|
|
|
if [ -z "$1" ]; then
|
|
FILE=$(ls -1t "$BACKUP_DIR"/backup_*.sql.gz | head -n 1)
|
|
echo "Aucune date fournie, restauration du dernier dump : $FILE"
|
|
else
|
|
FILE="$BACKUP_DIR/backup_$1.sql.gz"
|
|
if [ ! -f "$FILE" ]; then
|
|
echo "Fichier $FILE introuvable"
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
echo "Copie du fichier dans le container..."
|
|
docker cp "$FILE" "$CONTAINER_NAME":/tmp/restore.sql.gz
|
|
|
|
echo "Décompression dans le container..."
|
|
docker exec "$CONTAINER_NAME" sh -c "gunzip -f /tmp/restore.sql.gz"
|
|
|
|
echo "Restauration dans PostgreSQL..."
|
|
docker exec -i "$CONTAINER_NAME" psql -U "$POSTGRES_USER" -f /tmp/restore.sql
|
|
|
|
echo "Restauration terminée."
|
|
echo "Si cela ne fonctionne pas, supprimez le contenu du dossier data avant de rejouer le script"
|
|
|
|
# docker exec -u git gitea
|
|
# gitea dump --skip-log --skip-db --type tar.gz -c /data/gitea/conf/app.ini -C /data/gitea/ -f /tmp/backup_20250828.gitea.gz |