254 lines
10 KiB
Bash
Executable File
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" |