--- - name: Backup Gitea hosts: gitea gather_facts: yes become: yes vars: gitea_container_name: "{{ gitea.dockercompose.services.gitea.container_name }}" gitea_user: "git" backup_dir: "{{ backup_root_dir }}/{{ backup_dirname }}" scripts_dir: "/home/pi/arcodange/docker_composes/gitea/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 -u {{ gitea_user }} {{ gitea_container_name }} gitea dump --skip-log --skip-db --skip-package-data --type tar.gz -c /data/gitea/conf/app.ini -C /data/gitea/ -f - - 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 }} > {{ backup_dir }}/backup_$(date +\%Y\%m\%d).gitea.gz find {{ backup_dir }} -type f -name 'backup_*.gitea.gz' -mtime +{{ keep_days }} -delete - name: Ajouter une tâche cron pour backup Gitea tous les jours à 4h cron: name: "Backup Gitea archive" 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="{{ gitea_container_name }}" BACKUP_DIR="{{ backup_dir }}" if [ -z "$1" ]; then FILE=$(ls -1t "$BACKUP_DIR"/backup_*.gitea.gz | head -n 1) echo "Aucune date fournie, restauration du dernier dump : $FILE" else FILE="$BACKUP_DIR/backup_$1.gitea.gz" if [ ! -f "$FILE" ]; then echo "Fichier $FILE introuvable" exit 1 fi fi echo "Copie du dump dans le container..." docker cp "$FILE" "$CONTAINER_NAME":/tmp/ BASENAME=$(basename "$FILE" .gitea.gz) docker exec --user git "$CONTAINER_NAME" mkdir -p /tmp/$BASENAME/ echo "Décompression du dump..." docker exec --user git "$CONTAINER_NAME" tar -xzf "/tmp/"$BASENAME".gitea.gz" --directory /tmp/$BASENAME/ echo "Restauration des données..." docker exec --user git "$CONTAINER_NAME" bash -c " cd /tmp/$BASENAME/data && find . -type d -exec mkdir -p /data/gitea/{} \; && find . -type f -exec mv {} /data/gitea/{} \; " docker exec --user root "$CONTAINER_NAME" bash -c " cd /tmp/$BASENAME/repos && find . -type d -exec mkdir -p /data/git/repositories/{} \; && find . -type f -exec mv {} /data/git/repositories/{} \; " echo "Réglage des permissions..." docker exec "$CONTAINER_NAME" chown -R git:git /data echo "Régénération des hooks..." docker exec --user git "$CONTAINER_NAME" /usr/local/bin/gitea -c '/data/gitea/conf/app.ini' admin regenerate hooks echo "Netoyage" docker exec "$CONTAINER_NAME" find /tmp/ -maxdepth 1 -name "$BASENAME*" -exec rm -rf {} + -depth echo "Restauration Gitea terminée."