Рекомендую ознакомится с общей теорией
https://habr.com/ru/company/oleg-bunin/blog/449916/
Зависит конечно от технологических процессов, но обычно самая простая схема выглядит так что из некого репозитория с кодом забирается последняя версия кода, далее производится процесс сборки, проводятся миграции при необходимости и заменяется папка с исходником путём редактирования symlink'а.
Можете глянуть в сторону такой утилиты как
Deployer в которой есть нужный функционал, в том числе параллельный деплой на N-ое количество серверов с одновременной выкаткой обновления и самое главное возможностью отката на предыдущую версию.