При миграции сайта нужно перенести тысячи файлов между серверами. Выбор инструмента влияет на скорость, безопасность и удобство — особенно при повторных синхронизациях.
Сравнение инструментов переноса
| Инструмент | Скорость | Безопасность | Инкрементальность | Требования |
|---|---|---|---|---|
| rsync | Высокая | Высокая (SSH) | Да (только изменения) | SSH на обоих серверах |
| SCP | Средняя | Высокая (SSH) | Нет | SSH на обоих серверах |
| FTP/SFTP | Средняя | Низкая/Высокая | Нет | FTP-клиент |
| tar + SSH pipe | Высокая | Высокая | Нет | tar, SSH |
rsync — лучший выбор для миграции
rsync передаёт только изменённые блоки файлов, что делает его незаменимым для финальной синхронизации перед переключением DNS:
# Синхронизировать директорию с удалённым сервером
rsync -avz --progress /var/www/example.com/ root@new-server:/var/www/example.com/
# Ключи:
# -a — архивный режим (сохраняет права, время, симлинки)
# -v — подробный вывод
# -z — сжатие при передаче
# --progress — показать прогресс
# Исключить ненужные директории
rsync -avz --exclude=".git" --exclude="node_modules" /var/www/example.com/ root@new-server:/var/www/example.com/
# Удалить на цели файлы, которых нет в источнике
rsync -avz --delete /var/www/example.com/ root@new-server:/var/www/example.com/
SCP — быстрый перенос архивов
# Скопировать файл на удалённый сервер
scp backup.tar.gz root@new-server:/tmp/
# Скопировать директорию рекурсивно
scp -r /var/www/example.com root@new-server:/var/www/
# Скопировать с удалённого сервера локально
scp root@old-server:/var/www/example.com/config.php ./
# Использовать нестандартный SSH-порт
scp -P 2222 backup.tar.gz root@new-server:/tmp/
tar + SSH pipe — перенос без промежуточных файлов
# Передать директорию напрямую без создания архива на диске
tar -czf - /var/www/example.com/ | ssh root@new-server "tar -xzf - -C /var/www/"
# Это быстрее чем: создать архив → scp → распаковать
SFTP (безопасный FTP) через lftp
# Параллельная загрузка через lftp (5 соединений)
lftp -u username,password sftp://new-server <<'EOF'
mirror -P5 /var/www/example.com /var/www/example.com
quit
EOF
Стратегия двухэтапного переноса:
- День 1: Первичная синхронизация rsync (все файлы, медленно)
- День миграции: Финальный rsync --delete (только изменения, быстро — 1–5 минут)
- Переключить DNS
SSH-ключи для автоматизации
# Создать ключевую пару (без пароля для автоматизации)
ssh-keygen -t ed25519 -C "migration-key" -f ~/.ssh/migration_key -N ""
# Добавить публичный ключ на новый сервер
ssh-copy-id -i ~/.ssh/migration_key.pub root@new-server
# Использовать конкретный ключ в rsync
rsync -avz -e "ssh -i ~/.ssh/migration_key" /var/www/example.com/ root@new-server:/var/www/example.com/
FTP (без шифрования) небезопасен для передачи файлов через интернет — пароли и данные передаются в открытом виде. Используйте только SFTP, SCP или rsync через SSH.