Настройка резервного копирования файлов сайта
Резервная копия файлов сайта восстанавливает код, загруженные медиа, конфигурации после сбоя или случайного удаления. Для кода достаточно git-репозитория — файлы исходников не нужно включать в backup отдельно.
Что резервировать
Нужно: загруженные пользователями файлы (uploads/), SSL-сертификаты (если не Let's Encrypt), кастомные конфигурации вне репозитория.
Не нужно: код из git, node_modules, vendor, кэш приложения, временные файлы.
rsync + SSH в S3/удалённый сервер
#!/bin/bash
# /usr/local/bin/files-backup.sh
set -euo pipefail
SOURCE="/var/www/myapp/storage/app/uploads"
BACKUP_HOST="backup.example.com"
BACKUP_USER="backup"
BACKUP_PATH="/backups/myapp/files"
TIMESTAMP=$(date +%Y-%m-%d)
# Инкрементальный backup через rsync (жёсткие ссылки для неизменённых файлов)
rsync -avz \
--link-dest="${BACKUP_PATH}/latest" \
--exclude="*.tmp" \
--exclude=".DS_Store" \
-e "ssh -i /root/.ssh/backup_key -o StrictHostKeyChecking=no" \
"${SOURCE}/" \
"${BACKUP_USER}@${BACKUP_HOST}:${BACKUP_PATH}/${TIMESTAMP}/"
# Обновить символическую ссылку на последний backup
ssh -i /root/.ssh/backup_key "${BACKUP_USER}@${BACKUP_HOST}" \
"ln -sfn '${BACKUP_PATH}/${TIMESTAMP}' '${BACKUP_PATH}/latest'"
echo "[$(date)] Files backup completed: ${TIMESTAMP}"
AWS S3 синхронизация
# Ежедневная синхронизация uploads в S3
aws s3 sync /var/www/myapp/storage/app/uploads/ \
s3://myapp-backups/files/uploads/ \
--delete \
--exclude "*.tmp" \
--storage-class STANDARD_IA
# S3 Lifecycle: автоматическое удаление через 90 дней
aws s3api put-bucket-lifecycle-configuration \
--bucket myapp-backups \
--lifecycle-configuration file://lifecycle.json
// lifecycle.json
{
"Rules": [{
"ID": "delete-old-backups",
"Filter": { "Prefix": "files/" },
"Status": "Enabled",
"Expiration": { "Days": 90 }
}]
}
Crontab расписание
# Backup файлов ежедневно в 3:30 (после backup БД в 2:00)
30 3 * * * /usr/local/bin/files-backup.sh >> /var/log/files-backup.log 2>&1
Объём хранения и стоимость
При 10 GB uploads с ежедневным инкрементальным backup (rsync --link-dest): добавляется только объём изменений в день. В S3 STANDARD_IA: ~$0.013/GB/мес. 90 дней хранения 10 GB ≈ $1.2/мес.
Срок реализации
Настройка rsync или S3-синхронизации файлов с ротацией и cron: 0.5–1 день.







