Write the code so that content doesn't rely on files on the disk except for the website itself and the databases.
Write it so that as much as possible is static and can be determined by the URL.
Write it so that the database it reads to and writes from it not hardcoded (returned by a function) and is not necessarily the same database.
Write it so that it uses MySQL's autoincrement keys rather than code generated ones.
Think about all of this before you write it.
If you do all the above, run it on one server. Then, if it gets heavy, you can move the database onto another server. Still heavy? Replicate the database onto another server. Then add a loadbalancer for your webservers. See how you can scale afterwards if you wrote the code well?
Roughly, the amount of servers you need will depend on how good a coder you are and how much of the site can be cached. If it really is big, you'll probably end up with:
User->Internet->Firewall (with failover)->Varnish server->Load Balancer (maybe Squid) with failover->Servers with duplicate content talking to replicated databases.