vm:n8n:local_backup

Это старая версия документа!


Install

Действия на стороне ubuntu

Создаем папки и файл скрипта

sudo mkdir -p /opt/n8n/backups
sudo chown -R $USER:$USER /opt/n8n/backups
sudo nano /opt/n8n/backups/n8n_backup.sh

Вставляем скрипт
Обрати внимание на
BACKUP_DIR=«/opt/n8n/backups/temp»
ARCHIVE_DIR=«/opt/n8n/backups»
MAX_BACKUPS=10
cd /opt/n8n || exit

#!/bin/bash

BACKUP_DIR="/opt/n8n/backups/temp"
ARCHIVE_DIR="/opt/n8n/backups"
TIMESTAMP=$(date +%F)
MAX_BACKUPS=10

mkdir -p "$BACKUP_DIR"
mkdir -p "$ARCHIVE_DIR"

cd /opt/n8n || exit
docker-compose down

# Копируем всю папку .n8n и конфиги в BACKUP_DIR
cp -r /root/.n8n "$BACKUP_DIR/.n8n_backup_$TIMESTAMP"
cp docker-compose.yml "$BACKUP_DIR/docker-compose_$TIMESTAMP.yml"
cp .env "$BACKUP_DIR/.env_$TIMESTAMP" 2>/dev/null

# Создаём архив из содержимого BACKUP_DIR, архив в ARCHIVE_DIR
tar -czvf "$ARCHIVE_DIR/n8n_backup_$TIMESTAMP.tar.gz" -C "$BACKUP_DIR" .

# Удаляем временные неархивированные файлы из BACKUP_DIR
rm -rf "$BACKUP_DIR/.n8n_backup_$TIMESTAMP"
rm -f "$BACKUP_DIR/docker-compose_$TIMESTAMP.yml"
rm -f "$BACKUP_DIR/.env_$TIMESTAMP"

docker-compose up -d

# Ротация: удаляем старые архивы в ARCHIVE_DIR, чтобы осталось не более MAX_BACKUPS
cd "$ARCHIVE_DIR" || exit

BACKUPS_COUNT=$(ls -1 n8n_backup_*.tar.gz 2>/dev/null | wc -l)

if [ "$BACKUPS_COUNT" -gt "$MAX_BACKUPS" ]; then
  TO_DELETE=$((BACKUPS_COUNT - MAX_BACKUPS))
  ls -1t n8n_backup_*.tar.gz | tail -n "$TO_DELETE" | xargs rm -f
fi

Делаем файл исполняемым

chmod +x /opt/n8n/backups/n8n_backup.sh

Добавьте запуск скрипта в cron для автоматического выполнения по расписанию:
sudo crontab -e

Добавьте строчку
0 4 * * * /root/scripts/n8n_backup.sh » /root/scripts/n8n_backup.log 2>&1

  • vm/n8n/local_backup.1754854955.txt.gz
  • Последнее изменение: 2025/08/10 19:42
  • admin