+2  A: 

To answer your questions:

  • I would put SVN on a different server to the dev server. Often all sorts of rubbish is installed on dev servers.
  • TeamCity can be on the same server as the SVN server. (Call it your build server)
  • You don't have any resilience built into your production system.
    I would suggest having a minimum of two more servers, another web server and a hot standby DB server which is mirrored from your live DB server.
    These should not be at the same data center as the rest of your servers, and should use alternative gateways to the internet.
Bravax
Good points about the failovers. Currently we run in a VMWare environment, relying on VMWare High-Availabilty features like VMotion, etc... However, if the entire DataCenter goes down, we are toast. But that will be phase 2 of our Server ReConfiguration Project.
Alex Czarto
+1  A: 

I've just set up TeamCity using SQL Server DB and an instance of our webapp running on Tomcat all on the same Windows VM.

  • The TeamCity web server runs on Tomcat itself, and uses a good deal of memory (like any Tomcat app).
  • The TeamCity Build agents, since they compile, use a ton of memory.
  • SQL Server is a memory hog.

JetBrains mentions that Build agents should not be running on the same server as the web server optimally. I'd suggest that the database be separated as well (onto a physical box, not just a VM), so that the CI setup itself uses 3 systems (TeamCity web server, TeamCity database, TeamCity build agent). If your builds take more than a few minutes, I'd add another build agent server so that developers aren't queued up on commits, especially if you are using TeamCity's remote run/personal build feature from IDEA or Eclipse.

I wouldn't have a problem putting the SVN server on the same system as the TeamCity web server.

Keep in mind that compiling is an activity that is typically CPU-bound or disk access-bound. Build Agents will benefit from being separated onto separate CPUs and/or disks. However, being on separate VMs that are sharing disks and CPUs may be more wasteful than helpful due to the overhead of multiple VMs.

CoverosGene
So I guess the question becomes, can/should TeamCity use one of the existing SQL servers for it's database? (ie: The Development Server, or Staging DB Server). Seems like a shame to dedicate a separte server JUST for the TeamCity DB.
Alex Czarto
It probably doesn't need to. But will having the dev database server, for example, do double duty as the TeamCity database as well cause you issues? When dev is running slow, will you have to decide if TeamCity is to blame? My guess is no, especially on a dev instance, but you'll have to make that decision for your own project, weighing the convenience of one fewer server against the potential resource contention.
CoverosGene
It is a mis-characterization to say that SQL Server is a memory hog, but it does tend to consume all *available* memory. If a limit is set on its memory allocation, then it will generally happily live within that. Depending on the demands placed on the server, that limit can actually be quite low, I've seen SQL instances limited to 70Mb running quite happily and doing the job they were designed to do. An unrestricted SQL server will simply consume meory until some other app tries to allocate it, at which time it will yield the memory.
Tim Long