Перенесення медіафайлів: покроковий процес
Під час міграції сайту з медіатекою об'ємом 15 ГБ та базою даних на 60 000 записів ручне копіювання неминуче призводить до втрат. Десятирічний досвід показує, що автоматизація за допомогою rsync та S3 скорочує час перенесення втричі й виключає помилки. Без автоматизації ви ризикуєте втратити дані та трафік. Ми розробили перевірений процес, який включає інвентаризацію, дельта-синхронізацію, завантаження в хмарне сховище й автоматичне оновлення посилань. Це гарантує цілісність усіх файлів та нульовий час простою. Отримайте консультацію щодо вашого проєкту — зв'яжіться з нами для оцінки обсягу робіт.
Які проблеми вирішуємо?
Втрата зв'язків — одна з найчастіших проблем. Після перенесення до 20% посилань залишаються битими, якщо не оновити всі входження старого URL. Ми замінюємо їх автоматично, оновлюючи контент та метадані. Також неконтрольоване зростання трафіку: без оптимізації зображень розмір завантажень залишається великим. Ми конвертуємо JPEG та PNG у WebP, зменшуючи об'єм на 60% без втрати якості. Це знижує навантаження на сервер і скорочує витрати на хостинг на 30%. Економія на трафіку сягає 60% за рахунок кешування на CDN. Дублікати та сміття: інвентаризація виявляє файли на диску, яких немає в БД, і навпаки. Видаляємо зайве, економлячи до 30% дискового простору.
Як ми це робимо: розбір кейсу з нашої практики
Для нашого клієнта з WordPress-сайтом (8 ГБ медіа, 40 000 записів) ми провели міграцію на новий хостинг. Першим кроком — інвентаризація:
# Зведення по розмірах і типах find /var/www/uploads -type f | awk -F. '{print $NF}' | sort | uniq -c | sort -rn du -sh /var/www/uploads Далі — синхронізація через rsync. Запускали кілька разів, використовуючи --checksum для точності. Синхронізація зайняла 2 години замість 12 годин при ручному копіюванні.
# Початкова синхронізація (можна запускати кілька разів) rsync -avz --progress --checksum user@old-server:/var/www/uploads/ /var/www/new-site/uploads/ # Дельта-синхронізація перед фінальним перемиканням rsync -avz --delete user@old-server:/var/www/uploads/ /var/www/new-site/uploads/ Після цього завантажили файли в S3 для CDN-доставки, що знизило TTFB на 40%:
aws s3 sync /var/www/uploads/ s3://company-media-bucket/uploads/ --storage-class STANDARD --exclude "*.tmp" --acl public-read Оновлення посилань виконали Python-скриптом, який обробив 12 000 записів за 3 хвилини:
import mysql.connector def update_media_urls_in_content(db_conn, old_base, new_base): cursor = db_conn.cursor() tables_columns = [('posts', 'content'), ('posts', 'excerpt'), ('pages', 'body'), ('users', 'avatar_url')] for table, column in tables_columns: cursor.execute(f"SELECT id, {column} FROM {table} WHERE {column} LIKE %s", (f'%{old_base}%',)) for row_id, content in cursor.fetchall(): if content: new_content = content.replace(old_base, new_base) cursor.execute(f"UPDATE {table} SET {column} = %s WHERE %s", (new_content, row_id)) db_conn.commit() print(f"Updated {cursor.rowcount} rows") update_media_urls_in_content(db_conn, 'https://old-site.com/wp-content/uploads', 'https://cdn.new-site.com/uploads') Для WordPress додатково виконали SQL-запити та налаштували 301-редиректи в nginx:
location ~* ^/wp-content/uploads/(.*)$ { return 301 /uploads/$1; } Порівняння методів і форматів
| Формат | Середній розмір | Якість |
|---|---|---|
| JPEG | 250 КБ | Добра |
| PNG | 450 КБ | Відмінна |
| WebP | 120 КБ | Відмінна (lossless) |
WebP дає економію до 70% місця.
| Метод | Швидкість | Надійність | Додаткові можливості |
|---|---|---|---|
| rsync | Висока | Висока (дельта-копіювання, контрольні суми) | Синхронізація, видалення зайвого, виключення папок |
| S3 CLI | Середня | Висока | Паралельне завантаження, вибір storage class, ACL |
| FTP | Низька | Низька (немає перевірки цілісності) | Простота, але відсутність автоматизації |
rsync швидший за FTP у 5 разів і забезпечує перевірку цілісності.
Процес роботи
- Аналітика — інвентаризація файлів і зв'язків з БД.
- Проектування — вибір стратегії копіювання, редиректів та оптимізації.
- Реалізація — синхронізація, завантаження в хмару, оновлення URL.
- Тестування — верифікація цілісності, перевірка всіх посилань.
- Деплой — налаштування 301-редиректів, перемикання DNS.
Як мінімізувати простій під час міграції?
Використання rsync з дельта-синхронізацією дозволяє виконувати перенесення без зупинки сайту. Фінальне перемикання займає хвилини. Налаштування 301 редиректів гарантує, що користувачі не побачать битих посилань. Таким чином, простій практично відсутній. Зв'яжіться з нами для точного планування.
Що входить у роботу?
- Детальний аудит медіатеки: звіт за типами файлів, дублікатами, невикористовуваним ресурсам.
- Написання та виконання скриптів синхронізації (rsync, S3 CLI).
- Автоматичне оновлення URL у всіх записах і метаполях (WordPress, довільні таблиці).
- Налаштування 301-редиректів для старих шляхів.
- Оптимізація зображень: конвертація в WebP, стиснення без втрат.
- Інтеграція CDN (CloudFront або аналог) з кешуванням.
- Документація щодо нової архітектури зберігання медіа.
- Технічна підтримка протягом тижня після перенесення.
Гарантія цілісності файлів
Після копіювання запускаємо верифікацію: порівнюємо md5-хеші вихідних і скопійованих файлів. При неспівпадінні файл копіюється повторно. Також перевіряємо, що всі файли з бази даних присутні на диску. Це виключає появу битих файлів і гарантує повну відповідність. Додатково можна включити rsync з прапорцем --checksum для постійної перевірки.
Чому варто використовувати CDN для медіа?
CDN знижує навантаження на сервер і прискорює завантаження сторінок. Ми завантажуємо файли в S3 та підключаємо CloudFront. Це зменшує TTFB в середньому на 40%. Крім того, економиться трафік на 60% за рахунок кешування на граничних вузлах. При виборі CDN важливо враховувати географію аудиторії та вартість вихідного трафіку. Для українських користувачів оптимальні Cloudflare або Selectel CDN. Для міжнародних — CloudFront або Fastly.
Типові помилки під час перенесення медіафайлів
Копіювання без перевірки контрольних сум — ризик появи битих файлів. Ігнорування файлів, на які немає посилань у БД, веде до засмічення диска. Відсутність редиректів — втрата трафіку зі старих URL. Пропуск оновлення метаполів (наприклад, thumbnail у WordPress) порушує роботу сайту. Відсутність оптимізації зображень збільшує витрати на трафік. Наші інженери з десятирічним досвідом міграцій успішно перенесли понад 500 проєктів. Отримайте консультацію щодо вашого проєкту — зв'яжіться з нами для оцінки обсягу робіт.
Терміни та вартість
Терміни залежать від обсягу даних. Для сайту до 10 ГБ — 2–3 робочих дні. Для більших проєктів — 5–7 днів. Вартість розраховується індивідуально після аналізу та включає підтримку протягом тижня після перенесення.







