One of the easiest ways is to use wget and copy your entire website to your local computer. This should be done on a regular basis anyway, in case California slides off into the Pacific.
Then put the site up using the same method you put your original site, but putting it into staging.
You probably need to create a now virtual host member of your domain called staging.
When the time comes to go live, log in using ssh to your server, change directory to one level above your directories, and
mv site.yourdomain.com sitebackup.yourdomain.com
mv staging.yourdomain.com site.yourdomain.com
I run a server at home – a linux virtual machine running apache – and my templates define a variable ‘base’ that is used by the html header. (I’m on a sloooooowwww internet link. Uploading a file can take minutes.)
This allows me to just rebuild with a different base to move my webpage anywhere.