It works just like normal site deployment (prepare containers with the site code and a database, etc, push it to cloud servers) but unlikely customer sites that are controlled by, well, customers, the demo is always the same site, so instead of making users wait for a deploy to start and finish when they request a demo, we deploy a bunch of demo sites in the background and when the user asks for a demo they just get one of the pre-deployed sites (while in the background we start deploying a new one to add to the pool).