First, we’re working on releasing 3 products to production next week (one of them was a bit of a surprise), so I’ve been maxed out lately. Plus, this was the first week back at school! I’m getting caught up now, and I wanted to get out a couple of blog posts of some interesting things. First, I’ll start off with something that is interesting to me – home infrastructure for a developer.
I’ve been a professional developer for many years now. There are times though, that I want to pursue technology that my company is not pursuing. For example, my current employer is still using Visual Studio 2005. I don’t want my employer to drive the currency of my skills, I want to own that. So, what do I do? Also, what do I do if I want to work on a public web site, where do I stage it? How can I set up a QA environment for it?
For several years now, I’ve had some sort of home infrastructure to address this. Here’s the approximate evolution I had:
- Got a decent, main workstation with extra RAM, so I could run a VM of a server (for SQL server, for example)
- I needed more disk space, so I got an external drive or two (first FW400, then FW800, then USB2, then eSaTA)
- But what about backups? I would use SyncToy to synchronize my “data” directory, to an external drive.
- Then I started using a home laptop from the other room or outside. Now, I have to sync my user accounts and passwords in order to share files or printers, which is a pain. Plus, I had spotty wireless coverage too, I had to choose which side of the house I wanted the “strong” signal.
- When I was laid off from my old job (they went out of business), I was able to get a full-size computer rack (Compaq, with front and back doors, keyboard, and slide-out monitor) for cheap.
- I picked up a desktop machine with more RAM, and moved that and the external drives to the rack. Now, I have 1 server and a couple drives out of the way.
- I have the issue of no redundancy for the server, and for virtual machines, it’s not ideal, because I can basically have 1 host, and 1 maybe 2 virtual machine. If the host goes down, I lose all the machines!
So, at this point, infrastructure was frustrating, because it required maintenance, it didn’t do exactly what I wanted, and what i really wanted was this:
- An Active Directory, so I don’t have to deal with multiple accounts/passwords and everything would “just work” with everything else.
- A web and database server (ideally separate), so that I could stage websites (and supporting databases) that are on the web.
- A way to safely VPN into my internal network from outside of my physical network.
- Good (and secure) wireless so I have a strong signal in and around my house.
- (newer goal) To be able to do continuous integration (CI) with the websites, so that when I check in code, it builds and deploys out to the web, automatically.
- Redundancy. I had “the hard disk crash of ‘03” where I lost a lot of data. I can’t let that happen again. I would like redundancy for drives, systems, and even power supplies, if possible.
For the first time, I actually have addressed all of this. Over the past few months, I’ve been slowly getting things in place to address all of this. As of last weekend, I pretty much have everything in place. Let me explain what I did…
Recently, I got two Dell PowerEdge 2970’s from Ebay for super-cheap ($650/each). They came with 2 quad-cores and 8GB of RAM, and a few hundred gig of 10K RPM drives, and redundant power supplies. I got some more RAM for these and set up several virtual machines:
- Two active directory domain controllers (one on each physical server), which handle internal.sedersoftware.com and internal.robertseder.com
- DNS – these have DNS, so that “internal.sedersoftware.com” addresses resolve correctly, from my LAN.
- DHCP – these have DHCP (and replace DHCP from the Linksys router), because I need to specify that all clients use this DNS, and I want their names registered in DNS, as soon as they get an address.
- A dedicated web server that handles dev and qa for internal.sedersoftware.com and internal.robertseder.com
- A dedicated SQL 2008 server that has an instance for dev and qa, for the same domains
- A dedicated Team Foundation Server 2010, which is really TFS + IIS + SharePoint + SQL. I also installed CruiseControl.net for CI (more on that below).
For wireless, I got two D-Link DAP-1522 wireless access points. I have one on either end of the house. These are fantastic, they support wireless A/B/G/N, WPA2, and I get an “Excellent” signal from anywhere in the house. I highly recommend these devices!
I picked up a couple of 2TB drives and setup defrags and nightly backups for all the machines as well. So management of this infrastructure is pretty automatic. One last thing, here’s how I handled VPN:
- I picked up a SonicWall SSL VPN 200 for a couple of hundred bucks on eBay. This is an very impressive product. It’s pretty easy to setup (if you understand routing and security stuff), and is easy to use. If you are connecting over the internet, it gives you a nice web interface. When you log in, it e-mails (or texts you) a one-time password you must use to continue. Then, you can either use the web interface to quickly (and securely) get to an internal resources. OR, you can download an ActiveX control (called NetExtender) which actually creates a VPN tunnel into the private network. So, when you open a command-line and ping internal addresses, you see them, as if you are connected to the local LAN! Very cool!
- I switched from static to dynamic IP address from my internet provider several months ago. So, I use the Dynamic DNS feature of my LinkSys to set up a DDNS name, which always points to my router.
- I set up a CNAME record on sedersoftware.com to point to my dynamic DNS name (that’s just so the name is prettier, really)
- Lastly, I set up port-forwarding on my LinkSys to send port 80 and port 443 to my VPN appliance. By the way, port 80 just redirects to port 443.
This is pretty easy, relatively cheap, and it’s a very powerful and secure way to get into my private network from over the internet.
So what’s the point of all this? What does all this effort buy me? In a word (or 3): “peace of mind” and very little aggravation. I basically traded: time + effort for things to work smoother over the long-haul. What do I have now that I didn’t have before?
- Single-signon to everything, from anywhere. One account works everywhere. All machines use DNS, so everything is resolvable (and browseable) from everyone on the network. If you come to my house with a laptop, you just need my WPA2 key, and you will get DHCP, DNS, and if you have an account in my domain, access to all the public resource on the LAN (printers, public file share) and a home directory. Everything is backed up nightly, too. Everything works, and it’s virtually no maintenance – everything is automated.
- A clean (and backed up) environment for dev and qa that just seamlessly works. This includes web and database. No jury-rigging needed, everything is set up properly, the way it would be in an office environment. “Proper” means that I can spend my time doing the work I’m trying to do, not wasting time on maintenance of the environment or “trying to get things to work”. This environment just works, all the time.
- A reliable TFS environment where ALL of my source code (active projects + old source code) is checked in and managed by TFS. Again, just worry-free operation.
- A reliable, fast, and secure wireless network from anyone in the house.
- Lastly, a VPN connection that gives me all these benefits which I can connect to from my laptop, from any Internet connection.
- Oh – and incidentally along the way, I continue to learn and sharpen my infrastructure skills – which only helps me, professionally! I have basically set up the equivalent (or more than the equivalent) of what many small businesses might have. Although, I did it on the cheap and over time. I’ve probably spent a little more than $2,000 in one-time costs on everything listed above (excluding MSDN, for the OS licenses). How much would you be willing to invest in your professional development?
For me, this has been well-worth the time, money, and effort to give me seamless, low-maintenance, reliable IT environment that “just works” for everything I need. That may not be appropriate for everyone, but I would argue that if you are doing projects outside of work, you may want to look into investing some time and money into getting your home infrastructure into shape. That way, when you do work on your side projects, you can get right to the business of working, without dealing with constant annoyances or dealing with workarounds!