I suppose there's no real "perfect" answer, it depends on what you want and where you want to deal with the problems.
Separate Repositories
If you are using separate repositories, make sure that the databases and the migrations AND some of the content (e.g. specific variables / values that should be available for all the sites) are also synced. That's one point that gave me headaches.
You would set the environment stuff in files in
app/config/
and then through environment detection pick the right one depending on your site? http://laravel.com/docs/4.2/configuration#environment-configuration:
If you need more flexible environment detection, you may pass a Closure to the detectEnvironment method, allowing you to implement environment detection however you wish:
$env = $app->detectEnvironment(function()
{
return $_SERVER['MY_LARAVEL_ENV'];
});
And then based on that you can call the appropriate config file.
Either for each website a different set of files in one repo (local, staging, live) or perhaps all the files in one repo (site1-local, site1-staging, site1-live, site2-local...)
Haven't tested this out yet, though.
One codebase + one database
Another option would be (which is what I did in the end) to use the same codebase and have one database and then based on the domain visited, the specific data would be shown. So in many database tables you would have to have "site_id" as a column. And when you search for users instead of
User::where('name', 'Jeffrey')->get();
it would be something like
User::where('site_id', Site::GetThisId())->where('name', 'Jeffrey')->get();
Where GetThisId() checks for the environment / domain and returns the correct id.
You can definitely still make it even more efficient and the code less error-prone (e.g. overwrite the User::get() with User::where('site_id', Site::thisId())->get() or so).
This way has worked well for me, since I only have one codebase and one database and one server and I don't need to make sure all the codebases and databases are synced. Perhaps some might see as not so elegant, but it has helped to create new sites fast.
The question is where you separate
So the actual question is where you want to "separate" the sites. Do you want them on separate repos / servers and everyone has the same set of configs but different content? Or one repo but different configuration file sets for each site? Or everything the same but using id to separate the data on a database level.
Does this help with your question?