We self host on an Windows Server running IIS. We run 2 websites in IIS for every website we build...the first website is a subdomain qa.domain.com and the 2nd site is www.domain.com We use qa as our staging site. Get everything hunky dory there, then we copy from qa to www. So every site we have ends up having 3 versions, one local, one qa, and one www. @Holm76 feel free to DM me if you have any specific questions about how we're setup.
uSync is a sweet package that's great for keeping all 3 versions in sync. That said, I typically manage synchronization by hand.