THIS. IS. WEB SCALE.

As far as a homepage goes, I’ve been down for months.

See, the problem is that I’m too cheap. The only hosting company that tickles my fancy at the moment is Linode, but their cheapest offering is twenty bucks, which equals many pounds of delicious trailmix. It’s not really expensive, but I can’t justify that for a little blog which historically gets like two hits a year. 512MB RAM, 20GB Storage, and 200GB bandwidth. More than I need for this, but not enough to do anything really fun with.

On the other hand, I like things with my name on them. As a programmer, your innards do a strange dance when you have to tell someone, “yeah, here, let me give you my yahoo address.” An AOL or Lycos address could almost be funny, but Yahoo, MSN, and even GMail advertise an unhealthy lack of self-respect for someone asserting their ability to Make Things Go on the web. So I decided to do something about it, while keeping costs to a minimum.

First of all, you need a domain. You can actually go buy one, or get a free one from DynDNS or a similar company. Keep in mind that you need to be able to edit A and MX records, at a minimum, which every paid domain and most free ones should allow. Again, things like jacob.myhomeserver.com embarass me, so I just bought this domain. It’s the only thing here that’s not free, so I splurged. Again, pick a free one if you don’t care.

Next comes the email. You can do this through Google, but first you have to verify that you own the domain. If you have permissions to edit TXT records on your domain, that is by far the simplest option. Otherwise, come back to this step after your web server is running and use one of the other methods. Then you set your MX record to “ASPMX.L.GOOGLE.COM” and create an email account for your site in Google’s console. You’re not forced to use the GMail interface if you hate it; just find your POP and SMTP settings and use whatever client you like.

Update: As of 6 December 2012, Google no longer offers free email services. Previously created services will still be free, but this doesn’t work for new domains anymore.

Finally, my current setup ends with a web server. This was the part that had me hung up the longest, as I couldn’t find many ways to hook the domain up with free services. Then this weekend, while fiddling around on GitHub, I found their Pages feature. At its core, this is unimpressive: it allows you to host static files at username.github.com. Optionally, you can template the site with Jekyll, which has somewhat limited but useful capabilities. What makes this awesome, though, is the section hidden away at the bottom called “Custom Domains.” This allows you to set your DNS A record on your domain to point to GitHub’s server, which will then serve your username.github.com site when the domain is visited. It’s essentially name-based virtualhosts, but on a very large scale. Your site is stored in a username.github.com repository, where you can put your raw files or Jekyll sources. The only thing you need to do is add a CNAME file containing the name of your domain that’s being forwarded, so GitHub knows where to send requests when somebody asks for yoursite.com.

All of this would be mediocre at best, except for that this site is nearly impossible to take down. That $20 Linode server, however flexible it may be, is going to choke if you happen to hit Slashdot or something. While I suspect there must be some sort of rate-limiting in place, GitHub has plenty of horsepower and bandwidth to push out site content. It also knows everything it could need with regard to caching. The content changes when commits are pushed, and it rebuilds the site. We can still do any frilly effects or addons we like if we want to use Javascript, and the lack of server-side processing doesn’t really matter for this kind of site. I’m going to miss being able to serve X-Bender headers, but other than that I’m not missing much.