I’ve been toying with something like that on GitLab myself, to automatically push a Laravel site after building it in GitLab CI.
What I do there is prepare the application (install Composer dependencies, compile assets) in the CI pipeline, and then push the files over FTP. The command line program lftp works quite well for this. However, the original sync takes multiple hours because Laravel is big, FTP is slow and lftp is single threaded.