Налаштування автоматичного відновлення сайту з резервної копії

Наша компанія займається розробкою, підтримкою та обслуговуванням сайтів будь-якої складності. Від простих односторінкових сайтів до масштабних кластерних систем, побудованих на мікро сервісах. Досвід розробників підтверджено сертифікатами від вендорів.

Розробка та обслуговування будь-яких видів сайтів:

Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Пропоновані послуги
Показано 1 з 1 послугУсі 2065 послуг
Налаштування автоматичного відновлення сайту з резервної копії
Середня
~2-3 робочих дні
Часті питання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1171
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    874
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1094
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    831
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851

Налаштування автоматичного відновлення сайту з резервної копії

Відновлення з резервної копії повинно бути задокументовано та протестовано до інциденту. Паніка при аварії + незнайома процедура відновлення = години простою. Мета — RTO (Recovery Time Objective) не більше 1 години.

Скрипт відновлення PostgreSQL

#!/bin/bash
BACKUP_SOURCE="${1:-latest}"
TARGET_DB="${2:-myapp_restore}"
S3_BUCKET="s3://myapp-backups/postgresql"

if [ "$BACKUP_SOURCE" = "latest" ]; then
    BACKUP_FILE=$(aws s3 ls "${S3_BUCKET}/" | sort | tail -1 | awk '{print $4}')
    aws s3 cp "${S3_BUCKET}/${BACKUP_FILE}" "/tmp/${BACKUP_FILE}"
    LOCAL_FILE="/tmp/${BACKUP_FILE}"
fi

psql -U postgres -c "CREATE DATABASE ${TARGET_DB};" 2>/dev/null || true

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;")
echo "Відновлення завершено. Таблиці: $TABLES"

rm -f "$LOCAL_FILE"

Повне відновлення сайту

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

# 1. Сторінка обслуговування
cat > /var/www/maintenance/index.html << 'HTMLEOF'
<h1>Технічні роботи</h1>
<p>Сайт тимчасово недоступний. Відновлення займе не більше 60 хвилин.</p>
HTMLEOF

# 2. Відновити код з git
git clone --branch "$GIT_TAG" "$GIT_REPO" "$APP_DIR"
cd "$APP_DIR"
composer install --no-dev --optimize-autoloader

# 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"
php artisan config:cache
php artisan route:cache
php artisan migrate --force

# 6. Вимкнути обслуговування
nginx -s reload

# Перевірка
HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" "https://${DOMAIN}/health")
if [ "$HTTP_CODE" = "200" ]; then
    echo "Відновлення УСПІШНЕ"
fi

Runbook для дежурного

# Runbook: відновлення myapp після інциденту

## Крок 1: Діагностика (5 хв)
- ssh web01.example.com
- systemctl status nginx php8.3-fpm postgresql
- tail -100 /var/log/nginx/error.log

## Крок 2: Сповіщення
- Оновити статусну сторінку
- Повідомлення Slack #incidents

## Крок 3: Відновлення
- Повне: sudo /usr/local/bin/restore-site.sh v1.2.3
- Тільки БД: sudo /usr/local/bin/restore-db.sh latest
- Тільки файли: aws s3 sync s3://myapp-backups/files/ /var/www/myapp/storage/

## Крок 4: Перевірка
- https://example.com/ → HTTP 200
- Вхід → успішно
- Критичні функції з /docs/smoke-tests.md

## Крок 5: Post-mortem
- Заповнити шаблон інциденту в Confluence
- Додати запобігання в backlog

Щомісячна перевірка відновлення

0 8 1 * * /usr/local/bin/restore-site.sh latest >> /var/log/dr-drill.log 2>&1 && \
  curl -fsS https://hc-ping.com/dr-drill-uuid > /dev/null

Тривалість реалізації

Скрипти відновлення БД та файлів з runbook: 2–3 дні. Автоматичне тестування відновлення з щомісячним drill: 3–4 дні.