If you are going to build drupal websites, I wouldn't recommend Dreamhost or any hosting service which splits the database and web server across multiple servers. Its not that I have a problem with dreamhost, its just that the negative performance implications of such a design imposes on database heavy applications.
Yeah I know the reasons for doing such a thing, and in many cases it is more cost effective for hosting. But it works horrible for web applications which do lots of database queries to gather page data. Dreamhost (but not Bluehost!) does this, and unfortunately they happen to be the host which many of the sites I've built lately have been hosted on. I would love to move them over to my hosting service which runs shared database and webservers, however that is not an option at this point.
However, when all your application is built upon an setter method which hits the database everytime, your doomed to be waiting long periods of time for administration areas to load (which don't utilize caching nearly as much as the areas for anonymous users).
Developing like this is a fairly long and sometimes dreadful process. The best solution to this I've found is to develop your site locally and don't bother putting it on the production server until its ready to show the client for reviews. Once its up and looking nice, enable aggressive caching in Site Configuration-> Performance of your drupal admin panel. Then "warm up" your cache by going to a few of the common pages so your client will see the pages load relatively quickly (unless you are looking to show them how slow the site works in which you shouldn't enable caching).
As far as setting up a development environment, I highly recommend you use linux because your less likely to have issues when transferring the site. In general I find linux much better for web development purposes, along with a good virtual machine (or two) so you can test all the gawd awful Internet explorer browsers.
So anyways, the rest of this is a bit of technique for development on a ubuntu/debian based linux box.
First, setup a virtualhost for the site you are going to be working on. To do this on a debian based distro, and many other linux distro's, you create an entry in /etc/apache2/sites-available
My site definitions look like this:
filename is [websitename] (for example a site I recently did was sm-hog.com, so i named the file local.sm-hog.com, and I didnt want to work with the live url or i'd have issues doing dev work once the site went live.
<VirtualHost *:80> ServerName local.[websitename].com #I usually user a ServerAlias if i have alternate domain names #for the site or if I plan to access the site remotely, #then i set it to a dynamic dns domain i've registered #for my home computer -- example: ServerAlias [alternatedomain] DocumentRoot "/home/[your-username]/[path-to-where-you-develop/[site-name]" DirectoryIndex index.php index.html <Directory "[same as documentroot]"> Options Indexes FollowSymLinks AddType application/x-httpd-php .php </Directory> </VirtualHost>
Now you need to put a hosts entry in /etc/hosts for the site you just setup (usually the ServerName, unless you used your publicly accessible domain name as the ServerName, in which case you don't need a host entry)
Alright now that you've added the site to your apache config, and you've added the host entry to your /etc/hosts file, you just need to enable the site with a2ensite and then reload apache.
sudo a2ensite [site-name]
where site-name is the name of the file you created for the virtualhost.
then issue a
sudo /etc/init.d/apache reload
And you should be able to access webpages in the development directory you specified in your virtualhost file.
When you are ready to go live, scp/rsync your files to the webserver, mysqldump your database and import it on the live server. Your site will probably look really broken at first. What i did was run the update.php script in the webroot directory and it usually fixes most problems (the script you use to do updates for drupal).
There are some other things you'll need to do to streamline the process but its not all that difficult.
If you've got questions be sure to leave a comment.
