====== 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