Files
ptp/migration-s3/4-verify-migration.sh
T
2025-08-02 11:45:16 +02:00

254 lines
10 KiB
Bash
Executable File

#!/bin/bash
# Скрипт для проверки успешности миграции на S3
# Проверяет доступность изображений, работу сайта и целостность ссылок
set -e # Остановка при ошибке
# Загрузка конфигурации
source "$(dirname "$0")/config.sh"
log "Начало проверки миграции на S3..."
# Счетчики для статистики
total_checks=0
successful_checks=0
failed_checks=0
warnings=0
# Функция для проверки доступности URL
check_url() {
local url="$1"
local description="$2"
total_checks=$((total_checks + 1))
if curl -s -I "$url" | grep -q "200 OK"; then
successful_checks=$((successful_checks + 1))
log "$description: $url"
return 0
else
failed_checks=$((failed_checks + 1))
error_log "$description: $url"
return 1
fi
}
# 1. Проверка доступности S3 bucket
log "1. Проверка доступности S3 bucket..."
if aws s3 ls "s3://$S3_BUCKET/images/" &> /dev/null; then
log "✓ S3 bucket доступен"
else
error_log "✗ S3 bucket недоступен"
exit 1
fi
# 2. Проверка случайных изображений из S3
log "2. Проверка доступности изображений в S3..."
# Получение списка изображений из S3
s3_images=$(aws s3 ls "s3://$S3_BUCKET/images/" --recursive | grep -E "\.(jpg|jpeg|png|gif|webp)$" | awk '{print $4}' | head -10)
if [ -z "$s3_images" ]; then
error_log "Изображения не найдены в S3"
exit 1
fi
# Проверка случайных изображений
echo "$s3_images" | while read -r s3_key; do
if [ -n "$s3_key" ]; then
image_url="$S3_BASE_URL/$s3_key"
check_url "$image_url" "Изображение в S3"
fi
done
# 3. Проверка специальных файлов
log "3. Проверка специальных файлов..."
special_files=(
"images/favicon.ico"
"images/DESKTOP_NEW_1.jpg"
"images/bg-winter.jpg"
"images/bg-spring.jpg"
"images/bg-summer.jpg"
"images/bg-autumn.jpg"
)
for file in "${special_files[@]}"; do
special_url="$S3_BASE_URL/$file"
check_url "$special_url" "Специальный файл" || warnings=$((warnings + 1))
done
# 4. Анализ контента на наличие старых ссылок
log "4. Проверка контента на наличие старых ссылок..."
old_links_count=0
if [ -d "$CONTENT_DIR" ]; then
# Поиск ссылок, начинающихся с /images/ (старые локальные ссылки)
old_links=$(grep -r "images/" "$CONTENT_DIR" | grep -v "$S3_BASE_URL" | grep -E "\.(jpg|jpeg|png|gif|webp)" || true)
if [ -n "$old_links" ]; then
old_links_count=$(echo "$old_links" | wc -l)
warnings=$((warnings + old_links_count))
error_log "Найдено $old_links_count старых ссылок на изображения:"
echo "$old_links" | head -5 | while read -r link; do
error_log " $link"
done
else
log "✓ Старые ссылки не найдены"
fi
fi
# 5. Проверка синтаксиса Hugo
log "5. Проверка синтаксиса Hugo..."
if command -v hugo &> /dev/null; then
hugo_output=$(hugo --verbose --printPathWarnings 2>&1 || true)
if echo "$hugo_output" | grep -qi "error"; then
error_log "Hugo сообщает об ошибках:"
echo "$hugo_output" | grep -i "error" | head -3
warnings=$((warnings + 1))
else
log "✓ Hugo синтаксис корректен"
fi
else
log "⚠ Hugo не установлен, пропуск проверки синтаксиса"
warnings=$((warnings + 1))
fi
# 6. Проверка размера репозитория
log "6. Проверка размера репозитория..."
repo_size_mb=$(du -sm . | cut -f1)
if [ "$repo_size_mb" -lt 1000 ]; then
log "✓ Размер репозитория: ${repo_size_mb}MB (хорошо)"
else
error_log "⚠ Размер репозитория: ${repo_size_mb}MB (все еще большой)"
warnings=$((warnings + 1))
fi
# 7. Проверка отсутствия дубликатов изображений
log "7. Проверка на дубликаты изображений..."
if [ -d "./public/images" ] || [ -d "./static/images" ]; then
error_log "⚠ Локальные изображения все еще присутствуют"
error_log " Рекомендуется удалить после успешной проверки:"
error_log " - ./public/images"
error_log " - ./static/images"
warnings=$((warnings + 1))
else
log "✓ Локальные изображения удалены"
fi
# 8. Тестирование с помощью Hugo server (опционально)
log "8. Тестирование локального сервера Hugo..."
if command -v hugo &> /dev/null; then
# Запуск Hugo сервера в фоне на короткое время
hugo server --bind 127.0.0.1 --port 1313 --disableFastRender &
hugo_pid=$!
# Ждем запуска сервера
sleep 5
# Проверка доступности главной страницы
if curl -s "http://localhost:1313/" > /dev/null; then
log "✓ Локальный сервер Hugo работает"
else
error_log "✗ Локальный сервер Hugo недоступен"
warnings=$((warnings + 1))
fi
# Остановка сервера
kill $hugo_pid 2>/dev/null || true
wait $hugo_pid 2>/dev/null || true
else
log "⚠ Hugo не установлен, пропуск тестирования сервера"
fi
# 9. Создание отчета
log "9. Создание отчета..."
report_file="./migration-s3/migration-verification-report.md"
{
echo "# Отчет о проверке миграции на S3"
echo ""
echo "**Дата проверки:** $(date)"
echo "**S3 Bucket:** $S3_BUCKET"
echo "**CDN URL:** $S3_BASE_URL"
echo ""
echo "## Результаты проверки"
echo ""
echo "- ✅ **Успешных проверок:** $successful_checks"
echo "- ❌ **Неудачных проверок:** $failed_checks"
echo "- ⚠️ **Предупреждений:** $warnings"
echo "- 📊 **Общее количество проверок:** $total_checks"
echo ""
if [ $failed_checks -eq 0 ] && [ $warnings -eq 0 ]; then
echo "## ✅ Статус: УСПЕШНО"
echo ""
echo "Миграция прошла успешно! Все изображения доступны через S3."
elif [ $failed_checks -eq 0 ] && [ $warnings -gt 0 ]; then
echo "## ⚠️ Статус: УСПЕШНО С ПРЕДУПРЕЖДЕНИЯМИ"
echo ""
echo "Миграция прошла в целом успешно, но есть предупреждения, которые стоит рассмотреть."
else
echo "## ❌ Статус: ТРЕБУЕТСЯ ВНИМАНИЕ"
echo ""
echo "Обнаружены проблемы, которые требуют исправления."
fi
echo ""
echo "## Рекомендации"
echo ""
if [ -d "./public/images" ] || [ -d "./static/images" ]; then
echo "1. **Удалите локальные изображения** после подтверждения работы:"
echo " \`\`\`bash"
echo " rm -rf ./public/images"
echo " rm -rf ./static/images"
echo " \`\`\`"
echo ""
fi
echo "2. **Настройте CloudFront CDN** для улучшения производительности"
echo "3. **Настройте мониторинг** доступности изображений"
echo "4. **Регулярно проверяйте** работу ссылок"
echo ""
echo "## Следующие шаги"
echo ""
echo "1. Протестируйте сайт в браузере"
echo "2. Проверьте работу галерей и изображений"
echo "3. Убедитесь в корректности отображения на разных устройствах"
echo "4. Используйте \`add-new-photos.sh\` для добавления новых изображений"
echo ""
echo "---"
echo "*Отчет создан автоматически скриптом 4-verify-migration.sh*"
} > "$report_file"
# 10. Финальная статистика
log "Проверка миграции завершена!"
log "Отчет создан: $report_file"
log ""
log "=== ИТОГОВАЯ СТАТИСТИКА ==="
log "Успешных проверок: $successful_checks"
log "Неудачных проверок: $failed_checks"
log "Предупреждений: $warnings"
log "Общее количество проверок: $total_checks"
log ""
if [ $failed_checks -eq 0 ] && [ $warnings -eq 0 ]; then
log "🎉 МИГРАЦИЯ УСПЕШНА! Все изображения работают через S3."
log "Теперь вы можете использовать add-new-photos.sh для добавления новых изображений."
elif [ $failed_checks -eq 0 ]; then
log "✅ МИГРАЦИЯ ЗАВЕРШЕНА с предупреждениями. Проверьте отчет."
else
log "❌ ОБНАРУЖЕНЫ ПРОБЛЕМЫ. Необходимо исправить ошибки."
exit 1
fi
# Показать путь к скриптам для дальнейшего использования
log ""
log "Для добавления новых изображений используйте:"
log " ./migration-s3/add-new-photos.sh /path/to/new/photos"
log ""
log "Для отката изменений (если нужно):"
log " ./migration-temp/rollback-content.sh"