MattB hit it out of the water. +1 I'll reply with more details but I'm not looking to take his points. I'll add to what he said.
I have a similar setup to what he described, and it works great. ARR is the way to go, even on a single server.
However, a couple things I would add.
Create the 2 sites, as Matt recommended. Call them something like yoursite.com01 and yoursite.com02.
Create 2 URL Rewrite rules. One for www.yourdomain.com and one more staging.yourdomain.com. For production, use {HTTP_HOST} with a value of (^www.yourdomain.com$)|(yourIP). (or whatever binding you prefer) For staging, use {HTTP_HOST} with a value of (^staging.yourdomain.com$). Call the rules yoursite.com and staging.yoursite.com.
Bind Rule=yoursite.com to site=yoursite.com01 and rule=staging.yoursite.com to site=yoursite.com02.
Setup FTP on staging.yoursite.com.
Production traffic is now going to Rule=staging.yoursite.com and Site=yoursite.com01. Stagging to the opposite.
You can deploy to staging at any point, test, pre-spinup, have other people test, etc. Do it during the day, it doesn't matter. Deploy to the same FTP account each time. Works great with build servers.
Then, when you're ready to go live, just make 3 changes:
- move the FTP binding from yoursite.com02 to yoursite.com01
- change URL Rewrite Rule yoursite.com to point to yoursite.com02
- change URL Rewrite Rule staging.yoursite.com to point to yoursite.com01
Now you have Zero downtime, instant switching, with immediate roll-back functionality!
Your only gotcha to consider is your out of process session state. Make sure that your state server accepts both site ids so that you don't lose session state during the swap.
Also note that this is web only and not database.
For scripting, use Configuration Editor. Make the changes that you want and then click on "Generate Script". It will give you C#, appcmd or AHAdmin code.
I've had this in place for a few months with a webpage front end to swap instances and I'm never looking back. It makes deployments so refreshing compared to traditional deployments.