цены сверены 15 октября 2026 года

Как перенести проект с одного VPS на другой

Проект переносят в таком порядке: подготовить новый сервер, скопировать файлы через rsync, перенести базу дампом, проверить работу на новом адресе и только потом переключить DNS. Старый сервер не удаляйте, пока новый не проработал несколько дней.

Как перенести проект с одного VPS на другой
Содержание
  1. 1. Подготовьте новый сервер
  2. 2. Перенесите файлы через rsync
  3. 3. Перенесите базу данных
  4. 4. Перенесите тома Docker
  5. 5. Проверьте до переключения
  6. 6. Переключите DNS
  7. Что делать дальше
Проверено на живом сервере 6 октября 2026 годаVPS, Ubuntu 24.04 · MariaDB 10.11, PostgreSQL 16Как мы проверяем

Эта инструкция для проекта на Ubuntu 24.04 или 26.04: сайт, бот или сервис с файлами, базой и, возможно, контейнерами Docker. Перенос обычного сайта на хостинг описан в статье перенос сайта на другой хостинг. Все команды ниже подставляйте со своими именами: deploy это пользователь, 203.0.113.20 адрес нового сервера, site и appdb примеры названий.

Перед любым переносом сделайте резервную копию на старом сервере. Как её организовать, написано в статье резервные копии VPS. Команды копирования ничего не удаляют на старом сервере, но ошибка в пути может перезаписать файлы на новом.

Команды из разделов 2–4 мы выполнили 6 октября 2026 года на VPS с Ubuntu 24.04 (rsync 3.2.7, MariaDB 10.11, PostgreSQL 16, Docker 29): файлы, обе базы и том Docker перенеслись без потерь, кириллица в базах сохранилась. Переключение DNS на живом домене не проверяли.

1. Подготовьте новый сервер

Сначала пройдите первую настройку VPS: обновления, пользователь, вход по ключу, файрвол. Затем установите те же программы и версии, что на старом сервере: веб-сервер, среду выполнения, СУБД, Docker. Версии на старом сервере смотрите командами вроде nginx -v или docker --version.

Заранее понизьте TTL записей DNS у домена (время, на которое чужие серверы запоминают адрес). В панели DNS поставьте минимальное разрешённое значение, например 300 секунд, и подождите старый TTL: пока он не истёк, понижение не вступило в силу.

2. Перенесите файлы через rsync

Выполняйте команду на старом сервере:

rsync -az --progress -e ssh /var/www/site/ deploy@203.0.113.20:/var/www/site/

rsync копирует только отличающиеся файлы. Ключ -a сохраняет права, владельцев, даты и ссылки, -z сжимает данные при передаче, --progress показывает ход копирования, -e ssh передаёт данные по SSH. Слэш в конце пути источника важен: с ним копируется содержимое папки, без него папка целиком создастся внутри целевой. Папка /var/www/site/ на новом сервере должна существовать, и пользователь deploy должен иметь право писать в неё.

Одна оговорка про владельцев. Прежних владельцев файлов rsync восстанавливает, только если на новом сервере он работает от root. При копировании под обычным пользователем, как в команде выше, все файлы на новом сервере будут принадлежать этому пользователю: у нас так и вышло, права и ссылки при этом сохранились. Если проекту нужны другие владельцы (например, www-data для сайта), назначьте их после копирования командой sudo chown -R.

Для входа по ключу ваш ключ должен быть на новом сервере: либо добавьте ключ старого сервера пользователю deploy, либо запускайте rsync с вашего компьютера. Повторный запуск той же команды добавит только изменения. Перед финальным переключением остановите запись на старом сервере и выполните её ещё раз.

Чтобы сначала посмотреть, что будет скопировано, добавьте ключ -n (пробный прогон): файлы не копируются, а только перечисляются.

3. Перенесите базу данных

MySQL и MariaDB

На старом сервере:

mysqldump --single-transaction -u appuser -p appdb > appdb.sql

mysqldump выгружает базу в текстовый файл с командами восстановления, --single-transaction делает согласованный снимок для таблиц InnoDB без блокировки сайта, -p спросит пароль. В новых версиях MariaDB команда называется mariadb-dump, параметры те же.

Скопируйте файл (rsync -az appdb.sql deploy@203.0.113.20:~/) и на новом сервере создайте базу и загрузите дамп:

sudo mysql -e "CREATE DATABASE appdb CHARACTER SET utf8mb4;"
mysql -u appuser -p appdb < appdb.sql

Первая команда создаёт пустую базу (пользователя и права создайте так же, как на старом сервере), вторая загружает в неё дамп.

PostgreSQL

На старом сервере:

sudo -u postgres pg_dump -Fc appdb > appdb.dump

pg_dump выгружает базу, -Fc задаёт сжатый формат, подходящий для pg_restore. На новом сервере:

sudo -u postgres createdb appdb
sudo -u postgres pg_restore -d appdb --no-owner < appdb.dump

createdb создаёт пустую базу, pg_restore загружает в неё дамп, --no-owner не пытается назначать прежних владельцев объектов (роли, если они нужны, создайте заранее).

4. Перенесите тома Docker

Данные контейнеров лежат в томах. Остановите контейнеры, чтобы файлы не менялись, и на старом сервере упакуйте том (название app_data подставьте своё, список даёт docker volume ls):

docker compose stop
docker run --rm -v app_data:/data -v "$PWD":/backup alpine tar czf /backup/app_data.tgz -C /data .

Вторая команда запускает временный контейнер Alpine, который упаковывает содержимое тома в архив в текущей папке. Такой же приём описан в статье про установку n8n. Скопируйте архив на новый сервер через rsync, затем распакуйте:

docker run --rm -v app_data:/data -v "$PWD":/backup alpine tar xzf /backup/app_data.tgz -C /data

Том app_data создастся сам, если его не было. Файл docker-compose.yml и .env скопируйте вместе с остальными файлами проекта, затем запустите docker compose up -d.

5. Проверьте до переключения

Запустите проект на новом сервере и проверьте его, не меняя DNS. Для сайта удобно временно прописать адрес нового сервера в файле hosts на своём компьютере: домен будет открываться с нового сервера только у вас. Пройдите главные сценарии: вход, формы, платежи, отправку почты. Проверьте, что задачи по расписанию (cron) и сертификаты настроены так же, как на старом сервере: бесплатный SSL на VPS.

6. Переключите DNS

Остановите запись на старом сервере (режим обслуживания, остановка бота), повторите rsync и дамп базы, загрузите свежую копию. Затем смените в панели DNS адрес в A-записи на адрес нового сервера. Благодаря низкому TTL большинство посетителей перейдёт за минуты, но часть кэшей может обновляться дольше.

Не удаляйте старый сервер сразу. Оставьте его выключенным или хотя бы с остановленными службами на несколько дней: если что-то пойдёт не так, вы вернёте старый адрес в DNS. Удалять можно после того, как новый сервер отработал полный цикл, включая ночные задачи и резервное копирование.

Что делать дальше

Если новый сервер ещё не выбран, откройте подбор VPS и сравните тарифы. Размер сервера удобно прикинуть по занятому месту и памяти старого: об этом в статье как понять, что серверу не хватает ресурсов. После переезда сразу настройте резервные копии.