Перенос Docker Compose на новую VPS без даунтайма не получится произвести в два действия. Это параллельный запуск, ведь кэш DNS обновляется слишком медленно. Первым делом мы копируем всю рабочую директорию с проектом и volumes на новую машину через rsync и поднимаем там контейнеры. Новую базу данных на этом этапе настраиваем как реплику к старой, чтобы все текущие действия пользователей мгновенно синхронизировались в реальном времени.
Когда новая инфраструктура завелась, мы разворачиваем трафик прямо на старой VPS, используя ее как временный мост. В конфиге Nginx старого сервера мы меняем локальный proxy_pass на внешний IP новой машины. Теперь пользователи, приходящие по старому DNS, незаметно для себя проксируются на новый сервер, который и обрабатывает всю логику приложений.
Убедившись по логам, что этот мост работает, мы переключаем новую базу в режим мастера и спокойно меняем А-записи у регистратора. Пока мир обновляет DNS, часть клиентов будет идти через старый прокси, а часть - сразу на новую VPS напрямую. Гасить старую машину можно дня через два, когда запросы на неё полностью прекратятся.