The problem with uploading over a live site
For the duration of the upload, visitors get a mixture of old and new files. Half-updated applications produce errors that look random and are hard to reproduce afterwards.
Deploy to a directory, then switch
Upload the new release into a fresh folder, run migrations, then repoint the document root or symlink. The switch is atomic, and rolling back is repointing at the previous folder.
What still needs care
Database migrations must work against both the old and new code for the moments they overlap. Add columns before you use them; drop them a release later.