גיבוי קבצי אתר: הגדרה למניעת אובדן נתונים
מחיקה accidental של תיקיית uploads, כשל בדיסק השרת או מתקפה — ללא עותק של הקבצים, האתר שלך הופך לקליפה ריקה. קוד מ-git משוחזר תוך דקות, אבל תמונות, PDF וקבצי הגדרות שהועלו על ידי משתמשים — אבודים. אנחנו צוות עם ניסיון של 10+ שנים בהגדרת גיבויים. אנו מציעים הגדרה turnkey: rsync דרך SFTP או סנכרון S3, רוטציה, התראות ושחזור בדיקה. נבחן את הפרויקט שלך תוך יום אחד. גיבוי קבצים אינו על שמירה — אלא על שחזור. ללא בדיקה שוטפת של העותקים, אתה מסתכן באובדן נתונים ברגע קריטי. עמידה בכלל הגיבוי 3-2-1 (ויקיפדיה) מבטיחה יתירות נתונים. אנו מבטיחים שאחרי ההגדרה שלנו, תוכל לשחזר קבצים תוך דקות.
אילו קבצים יש לגבות ואיך?
חובה לגבות: קבצים שהועלו על ידי משתמשים (uploads/), אישורי SSL (אם לא Let's Encrypt), הגדרות מותאמות אישית מחוץ למאגר. אין צורך לגבות: קוד מ-git, node_modules, vendor, מטמון יישומים, קבצים זמניים. Git כבר מאחסן היסטוריה — שכפול בגיבוי הוא מיותר. החרג תיקיות זמניות גדולות כדי לחסוך במקום ובתעבורה. גיבוי מצטבר מעתיק רק קבצים שהשתנו בכל פעם, מה שמאיץ את התהליך ומפחית עומס על השרת.
אנו משתמשים בשני תרחישים עיקריים. הבחירה תלויה בתקציב ובדרישות מהירות השחזור.
איך להגדיר גיבוי מצטבר באמצעות rsync
הצג סקריפט גיבוי rsync
#!/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
הצג סקריפט סנכרון 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
}
}
]
} השוואה בין rsync לסנכרון S3
הצג טבלת השוואה
| קריטריון | rsync + SSH | סנכרון AWS S3 |
|---|---|---|
| מהירות גיבוי ראשון | ~5 דקות ל-10 GB | ~10 דקות ל-10 GB |
| עלות אחסון לחודש עבור 10 GB, 90 ימים | ~$1.2 (השכרת שרת) | ~$0.13 (S3 STANDARD_IA) |
| מורכבות הגדרה | בינונית | נמוכה |
| שחזור | העתקה חזרה דרך SSH | aws s3 cp רקורסיבית |
סנכרון S3 עדיף לפרויקטים בענן; rsync אידיאלי לשליטה מלאה. לגיבוי ראשון, rsync מהיר פי 2 מ-S3. לעלות אחסון, S3 זול כמעט פי 10 מהשכרת שרת. הפתרונות שלנו יכולים להפחית עלויות אחסון בעד 50% בהשוואה לשרת נוסף.
איך לבחור בין rsync ל-S3 ולבצע אוטומציה של רוטציה?
אם השרת שלך כבר ב-AWS, S3 הוא בחירה טבעית בזכות אינטגרציה ועלות נמוכה עבור STANDARD_IA. עם שרת ייעודי, rsync לשרת שני או אחסון SFTP פשוט וזול יותר. אנו עוזרים לך להחליט בשלב הביקורת. הערך מראש את נפח הנתונים ותדירות השינויים כדי להימנע מתשלום יתר על אחסון.
רוטציה מונעת מעותקים ישנים למלא את המקום. עבור S3, הגדר מדיניות Lifecycle: שמור עותקים יומיים ל-30 יום, שבועיים ל-90 יום, חודשיים ל-12 חודשים. עבור rsync, השתמש בסקריפטים עם #!/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}" ו-# Ежедневная синхронизация 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 } }] } . אנו תמיד מגדירים רוטציה כך שיהיו זמינות מספר נקודות שחזור.
מה כלול בהגדרת הגיבוי turnkey שלנו
שירותים כלולים:
- פיתוח סקריפט גיבוי (bash/ansible)
- הגדרת Crontab עם עדיפות אחרי גיבוי מסד הנתונים
- התראות ל-Telegram/Slack (הצלחה/שגיאה)
- הגדרת רוטציה: S3 Lifecycle או rsync --delete-excluded
- שחזור בדיקה בסביבת staging
- תיעוד: סכמה, אנשי קשר, הוראות שחזור
- הדרכה ותמיכה לצוות שלך
תהליך עבודה ולוח זמנים
- ניתוח: קביעת תיקיות לגיבוי, בחירת אחסון (S3, SFTP, שרת שני).
- תכנון: כתיבת סקריפט, הגדרת הרשאות גישה ומפתחות SSH.
- יישום: פריסת פתרון בסביבת production, הגדרת ניטור.
- בדיקה: שחזור קבצים בסביבת בדיקה, אימות תקינות.
- פריסה: סיום crontab, מסירת תיעוד, הדרכת צוות.
הגדרת תרחיש אחד אורכת 0.5 עד יום אחד. המחיר המדויק תלוי בנפח נתונים ובמורכבות. שירות ההגדרה שלנו מתחיל ב-$500 לתרחיש גיבוי יחיד, כולל פיתוח סקריפט, רוטציה ושחזור בדיקה. צור קשר — נבחן את הפרויקט שלך תוך יום אחד.
טעויות נפוצות וחשיבות שחזור הבדיקה
טעויות נפוצות:
- התעלמות משחזור בדיקה — גיבוי שלא ניתן לשחזר הוא חסר תועלת.
- אחסון גיבויים על אותו דיסק כמו האתר (RAID אינו מגן מפני rm accidental).
- חוסר התראות — כשל יכול להיעלם מעיניים במשך שבועות.
אחריות: כל הגיבויים המוגדרים עוברים שחזור בדיקה לפני מסירה ללקוח. ללא שחזור בדיקה, אינך יודע אם הגיבוי עובד. אנו תמיד משחזרים קבצים לסביבת staging ובודקים תקינות באמצעות md5sum או השוואת מספר קבצים. Rsync ממליץ להשתמש באפשרות --dry-run לאימות.
רוטציית גיבוי מומלצת
| סוג | תדירות | תקופת שמירה |
|---|---|---|
| יומי | כל יום | 30 ימים |
| שבועי | כל שבוע | 90 ימים |
| חודשי | כל חודש | 12 חודשים |







