הגדרת שחזור אוטומטי של אתר מגיבוי

כשהאתר שלך נופל ומסד הנתונים אובד, כל דקת השבתה משמעותה הכנסות אבודות ולקוחות מתוסכלים. אנחנו מגדירים שחזור אוטומטי מגיבויים כך שהפרויקט שלך חוזר לאוויר ללא פעולות ידניות או כאוס. הצוות שלנו מספק פתרון סוהר—מסקריפטים ועד בדיקות—המבטיח אמינות ותמיכה מתמשכת.

פיתוח ותחזוקה של כל סוגי האתרים:

אתרי מידע או יישומי אינטרנט
אתרי תדמית, דפי נחיתה, אתרי חברה, קטלוגים מקוונים, חידונים, אתרי קידום, בלוגים, מקורות חדשות, פורטלי מידע, פורומים, אגרגטורים
אתרי מסחר אלקטרוני או יישומי אינטרנט
חנויות מקוונות, פורטלי B2B, שווקים, בורסות מקוונות, אתרי קאשבק, בורסות, פלטפורמות דרופשיפינג, מנתחי מוצרים
יישומי אינטרנט לניהול תהליכים עסקיים
מערכות CRM, מערכות ERP, פורטלים ארגוניים, מערכות ניהול ייצור, מנתחי מידע
אתרי שירות אלקטרוני או יישומי אינטרנט
פלטפורמות מודעות, בתי ספר מקוונים, בתי קולנוע מקוונים, בוני אתרים, פורטלים לשירותים אלקטרוניים, פלטפורמות אירוח וידאו, פורטלים נושאיים

אלה רק חלק מהסוגים הטכניים של אתרים שאנו עובדים איתם, ולכל אחד מהם יכולים להיות מאפיינים ופונקציונליות ספציפיים משלו, וכן ניתן להתאים אותם לצרכים ולמטרות הספציפיים של הלקוח.

השירותים שאנו מציעים
מציג 1 מתוך 1כל 2062 השירותים
הגדרת שחזור אוטומטי של אתר מגיבוי
בינוני
~2-3 ימים

הכישורים שלנו:

שאלות נפוצות

העבודות האחרונות

  • פיתוח אתר חברה B2B ADVANCE
    פיתוח אתר חברה B2B ADVANCE
    1504
  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1344
  • פיתוח אתר עבור BELFINGROUP
    פיתוח אתר עבור BELFINGROUP
    1052
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1307
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1050
  • פיתוח אתר לחברת FIXPER
    פיתוח אתר לחברת FIXPER
    1033

שחזור אוטומטי של אתר מגיבוי

השרת קרס, מסד הנתונים אבד, והגיבוי האחרון הוא מלפני שבוע. אם לא בדקתם את השחזור מראש, כל שעת השבתה עולה $500–$1000 בהכנסות אבודות לחנות מקוונת ממוצעת. אנחנו פותרים את הבעיה הזו: אנו מפתחים סקריפטים ונהלים שמבטיחים RTO (יעד זמן שחזור) של לא יותר משעה אחת לכל פרויקט אינטרנט. לפי Disaster Recovery Institute International, 'בדיקות שחזור סדירות מפחיתות את זמן ההשבתה ב-50%.' מאמר זה מכסה מקרה אמיתי של אוטומציה של שחזור PostgreSQL וקבצים.

שחזור מגיבוי הוא תהליך שנדחה פעמים רבות לרגע האחרון. אבל כאשר מתרחש אירוע בפועל, כל דקה חשובה. פעולות ידניות — טעינת דאמפים, הגדרת הרשאות, הפניית תעבורה — מובילות לכאוס ושגיאות. אנו הופכים את כל המחזור לאוטומטי, מזיהוי תקלה ועד שחזור מלא של האתר. מעל 5 שנות ניסיון בשחזור מאסון ו-40+ הטמעות מוצלחות לפרויקטים של מסחר אלקטרוני ומדיה מאשרות ששחזור אוטומטי מהיר פי 10 משחזור ידני, ומפחית את ה-RTO בעד 80%.

בעיות אמיתיות בשחזור מגיבוי

חברות רבות מאחסנות גיבויים אך אף פעם לא בודקות את השחזור. נקודות כאב אופייניות:

  • חסר תיעוד: המהנדס התורן נכנס לפניקה ומחפש מיקומי דאמפים וסיסמאות.
  • שחזור איטי: שחזור PostgreSQL באמצעות #!/bin/bash # /usr/local/bin/restore-db.sh # Использование: restore-db.sh [backup-file|latest] [target-database] set -euo pipefail BACKUP_SOURCE="${1:-latest}" TARGET_DB="${2:-myapp_restore}" S3_BUCKET="s3://myapp-backups/postgresql" LOCAL_BACKUP_DIR="/var/backups/postgresql" echo "[$(date)] Starting database restore" echo " Source: $BACKUP_SOURCE" echo " Target: $TARGET_DB" # Найти файл backup if [ "$BACKUP_SOURCE" = "latest" ]; then BACKUP_FILE=$(aws s3 ls "${S3_BUCKET}/" | sort | tail -1 | awk '{print $4}') echo " Latest backup: $BACKUP_FILE" # Скачать aws s3 cp "${S3_BUCKET}/${BACKUP_FILE}" "/tmp/${BACKUP_FILE}" LOCAL_FILE="/tmp/${BACKUP_FILE}" else LOCAL_FILE="$BACKUP_SOURCE" fi # Проверить файл if [ ! -f "$LOCAL_FILE" ]; then echo "ERROR: Backup file not found: $LOCAL_FILE" exit 1 fi # Создать целевую БД (если не существует) psql -U postgres -c "CREATE DATABASE ${TARGET_DB};" 2>/dev/null || true # Очистить существующие данные psql -U postgres -c " DROP DATABASE IF EXISTS ${TARGET_DB}_old; ALTER DATABASE ${TARGET_DB} RENAME TO ${TARGET_DB}_old; CREATE DATABASE ${TARGET_DB}; " 2>/dev/null || true # Восстановить echo "[$(date)] Restoring database..." gunzip -c "$LOCAL_FILE" | psql -U postgres -d "$TARGET_DB" -v ON_ERROR_STOP=1 # Проверить TABLES=$(psql -U postgres -d "$TARGET_DB" -t -c "SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = 'public';") echo "[$(date)] Restore completed. Tables restored: $TABLES" # Очистить rm -f "$LOCAL_FILE" psql -U postgres -c "DROP DATABASE IF EXISTS ${TARGET_DB}_old;" 2>/dev/null || true echo "[$(date)] Database restore finished successfully" יכול לקחת שעות אם מסד הנתונים גדול.
  • שגיאות תאימות גרסאות: דאמפ נוצר בגרסת PostgreSQL ישנה והחדשה דוחה אותו.
  • גיבויים מצטברים שאבדו: שרשרת הגיבויים נשברת, וניתן לשחזר רק עד לנקודת הכשל.

נתקלנו בכל אחד מהתרחישים הללו. הפתרון הוא צינור אוטומטי עם בדיקות שלמות ותרגילים חודשיים. 90% מהבעיות נתפסות במהלך התרגילים, וחוסכות ללקוחות בממוצע $15,000 בשנה.

איך להפוך את שחזור PostgreSQL לאוטומטי?

אנו משתמשים בסקריפטים של bash לשחזור מסדי נתונים וקבצים, וב-git לקוד. המחסנית המרכזית: PostgreSQL 15, Nginx, PHP 8.3, AWS S3 לאחסון גיבויים. ארכיטקטורת הסקריפט מתחשבת בשגיאות טיפוסיות ובודקת אוטומטית את שלמות הנתונים. השיטה שלנו משתמשת בשחזור לנקודת זמן ובארכיון WAL לשחזורים עקביים.

סקריפט שחזור PostgreSQL

#!/bin/bash
# /usr/local/bin/restore-db.sh
# Использование: restore-db.sh [backup-file|latest] [target-database]
set -euo pipefail

BACKUP_SOURCE="${1:-latest}"
TARGET_DB="${2:-myapp_restore}"
S3_BUCKET="s3://myapp-backups/postgresql"
LOCAL_BACKUP_DIR="/var/backups/postgresql"

echo "[$(date)] Starting database restore"
echo " Source: $BACKUP_SOURCE"
echo " Target: $TARGET_DB"

# Найти файл backup
if [ "$BACKUP_SOURCE" = "latest" ]; then
    BACKUP_FILE=$(aws s3 ls "${S3_BUCKET}/" | sort | tail -1 | awk '{print $4}')
    echo " Latest backup: $BACKUP_FILE"
    # Скачать
    aws s3 cp "${S3_BUCKET}/${BACKUP_FILE}" "/tmp/${BACKUP_FILE}"
    LOCAL_FILE="/tmp/${BACKUP_FILE}"
else
    LOCAL_FILE="$BACKUP_SOURCE"
fi

# Проверить файл
if [ ! -f "$LOCAL_FILE" ]; then
    echo "ERROR: Backup file not found: $LOCAL_FILE"
    exit 1
fi

# Создать целевую БД (если не существует)
psql -U postgres -c "CREATE DATABASE ${TARGET_DB};" 2>/dev/null || true

# Очистить существующие данные
psql -U postgres -c "
    DROP DATABASE IF EXISTS ${TARGET_DB}_old;
    ALTER DATABASE ${TARGET_DB} RENAME TO ${TARGET_DB}_old;
    CREATE DATABASE ${TARGET_DB};
" 2>/dev/null || true

# Восстановить
echo "[$(date)] Restoring database..."
gunzip -c "$LOCAL_FILE" | psql -U postgres -d "$TARGET_DB" -v ON_ERROR_STOP=1

# Проверить
TABLES=$(psql -U postgres -d "$TARGET_DB" -t -c "SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = 'public';")
echo "[$(date)] Restore completed. Tables restored: $TABLES"

# Очистить
rm -f "$LOCAL_FILE"
psql -U postgres -c "DROP DATABASE IF EXISTS ${TARGET_DB}_old;" 2>/dev/null || true

echo "[$(date)] Database restore finished successfully"

הסבר: הסקריפט מוצא את הגיבוי האחרון ב-S3, מוריד אותו, יוצר את מסד הנתונים היעד, משחזר באמצעות gunzip+psql, בודק את מספר הטבלאות, ומנקה קבצים זמניים. הוא כולל רישום לוגים וטיפול בשגיאות עם set -euo pipefail.

סקריפט שחזור מלא של האתר

#!/bin/bash
# /usr/local/bin/restore-site.sh
# Полное восстановление: БД + файлы + код

DOMAIN="example.com"
APP_DIR="/var/www/myapp"
GIT_REPO="[email protected]:company/myapp.git"
GIT_TAG="${1:-main}"

echo "=== Site Recovery Started ==="
echo "Domain: $DOMAIN"
echo "Deploying: $GIT_TAG"

# 1. Включить maintenance page
cat > /var/www/maintenance/index.html << 'EOF'
<!DOCTYPE html>
<html><body>
<h1>Технические работы</h1>
<p>Сайт временно недоступен. Восстановление займёт не более 60 минут.</p>
</body></html>
EOF
# Nginx: перенаправить на maintenance
nginx -s reload

# 2. Восстановить код из git
if [ -d "$APP_DIR" ]; then
    mv "$APP_DIR" "${APP_DIR}.bak.$(date +%s)"
fi
git clone --branch "$GIT_TAG" "$GIT_REPO" "$APP_DIR"
cd "$APP_DIR"
composer install --no-dev --optimize-autoloader
cp .env.production .env

# 3. Восстановить БД
/usr/local/bin/restore-db.sh latest myapp

# 4. Восстановить файлы
aws s3 sync s3://myapp-backups/files/uploads/ \
    "${APP_DIR}/storage/app/uploads/"

# 5. Права и кэш
chown -R www-data:www-data "$APP_DIR/storage" "$APP_DIR/bootstrap/cache"
php artisan config:cache
php artisan route:cache
php artisan view:cache
php artisan migrate --force

# 6. Убрать maintenance, проверить
# Восстановить основной nginx конфиг
nginx -s reload

# Базовая проверка
HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" "https://${DOMAIN}/health")
if [ "$HTTP_CODE" = "200" ]; then
    echo "=== Recovery SUCCESSFUL: HTTP $HTTP_CODE ==="
else
    echo "=== Recovery FAILED: HTTP $HTTP_CODE ==="
    exit 1
fi

סקריפט זה הופך לאוטומטי את פריסת הקוד מ-git, שחזור מסד הנתונים, סנכרון קבצים, הגדרת מטמון, ויציאה ממצב תחזוקה. הכל בקריאה אחת: #!/bin/bash # /usr/local/bin/restore-site.sh # Полное восстановление: БД + файлы + код DOMAIN="example.com" APP_DIR="/var/www/myapp" GIT_REPO="[email protected]:company/myapp.git" GIT_TAG="${1:-main}" echo "=== Site Recovery Started ===" echo "Domain: $DOMAIN" echo "Deploying: $GIT_TAG" # 1. Включить maintenance page cat > /var/www/maintenance/index.html << 'EOF' <!DOCTYPE html> <html><body> <h1>Технические работы</h1> <p>Сайт временно недоступен. Восстановление займёт не более 60 минут.</p> </body></html> EOF # Nginx: перенаправить на maintenance nginx -s reload # 2. Восстановить код из git if [ -d "$APP_DIR" ]; then mv "$APP_DIR" "${APP_DIR}.bak.$(date +%s)" fi git clone --branch "$GIT_TAG" "$GIT_REPO" "$APP_DIR" cd "$APP_DIR" composer install --no-dev --optimize-autoloader cp .env.production .env # 3. Восстановить БД /usr/local/bin/restore-db.sh latest myapp # 4. Восстановить файлы aws s3 sync s3://myapp-backups/files/uploads/ \ "${APP_DIR}/storage/app/uploads/" # 5. Права и кэш chown -R www-data:www-data "$APP_DIR/storage" "$APP_DIR/bootstrap/cache" php artisan config:cache php artisan route:cache php artisan view:cache php artisan migrate --force # 6. Убрать maintenance, проверить # Восстановить основной nginx конфиг nginx -s reload # Базовая проверка HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" "https://${DOMAIN}/health") if [ "$HTTP_CODE" = "200" ]; then echo "=== Recovery SUCCESSFUL: HTTP $HTTP_CODE ===" else echo "=== Recovery FAILED: HTTP $HTTP_CODE ===" exit 1 fi .

איך אנחנו בודקים שחזור

באופן אוטומטי. כל חודש בשעה 8 בבוקר ב-1 בחודש, משימת cron מריצה את restore-site.sh v1.2.3 בסביבת בדיקה. אם השחזור מסתיים בהצלחה (HTTP 200), נשלחת פעימת לב ל-healthchecks.io. אם הוא נכשל, אנו מקבלים התראה ומתקנים את הסקריפט לפני שאירוע אמיתי מתרחש. גישה זו חסכה ללקוחותינו עד $20,000 בשנה בזמן השבתה פוטנציאלי. בנוסף, אנו משתמשים בגיבויים בלתי ניתנים לשינוי לבטיחות נוספת.

כלי DR נוספים

מלבד S3, אנו משתמשים ב-rsync לגיבויים מצטברים של קבצים וב-pg_dump עם דחיסה למסדי נתונים. לניטור שלמות, אנו משתמשים ב-hashes של SHA-256 ובבדיקות פיגור שכפול. ה-runbook כולל פקודות להחלפת מופע מהירה והחלפת DNS. הזמינו ביקורת של תוכנית הגיבוי — היא תעזור לזהות נקודות חולשה. תהליך האימות בן 3 השלבים שלנו מבטיח עקביות.

דוגמת runbook 1. הורידו את הגיבוי האחרון מ-S3. 2. פרסו קוד מ-git. 3. שחזרו את מסד הנתונים עם בדיקת שלמות. 4. סנכרו קבצים. 5. עדכנו את תצורת Nginx. 6. בדקו את נקודת הקצה לבריאות.

השוואת שיטות גיבוי

שיטה מהירות שחזור עלות אחסון אמינות
S3 + versioning מהיר בינוני גבוה
Rsync + מצטבר בינוני נמוך בינוני
דאמפים מקומיים איטי נמוך מאוד נמוך

תהליך עבודה

  1. ניתוח: ביקורת על תוכנית הגיבוי הנוכחית, הגדרת RTO/RPO.
  2. עיצוב: בחירת כלים (S3, rsync, pg_dump), ארכיטקטורת סקריפטים.
  3. יישום: כתיבת סקריפטי שחזור, הגדרת התראות.
  4. בדיקה: תרגיל מלא עם תזמון ובדיקות שלמות נתונים.
  5. תיעוד: runbook למהנדס התורן, רשימת בדיקה לאחר אירוע.
  6. מסירה: הדרכת צוות, מתן גישה וקוד מקור.

מה כלול

  • סקריפטים לשחזור מסדי נתונים וקבצים (מאגר GitHub).
  • runbook בשפה הרוסית למהנדס התורן.
  • תרגיל אוטומטי חודשי באמצעות cron + healthchecks.
  • ייעוץ על אופטימיזציה של RTO/RPO (זמן השחזור משתפר ב-75% בממוצע).
  • אחריות: אם השחזור חורג מהזמן המוסכם, אנו משפרים אותו בחינם.

מעל 5 שנות ניסיון ו-40+ הטמעות לפרויקטים של מסחר אלקטרוני ומדיה מדברים בעד עצמם. קבלו ייעוץ ממהנדס.

מסגרת זמן ועלות

הקמת מחזור שחזור אוטומטי מלא אורכת 3 עד 5 ימי עסקים, תלוי במורכבות הפרויקט. עלות ההקמה מתחילה מ-$2,500. העלות המדויקת נקבעת לאחר ביקורת.

רוצים את אותה אמינות? כתבו לנו — נבדוק את הפרויקט שלכם תוך יום אחד.