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
cp -r /opt/n8n/n8n_data «$BACKUP_DIR/.n8n_backup_$TIMESTAMP»
#!/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 /opt/n8n/n8n_data "$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 * * * /opt/n8n/backups/n8n_backup.sh » /opt/n8n/backups/n8n_backup.log 2>&1