I've been wanting to write a couple of new articles for my blog for a while now, and this one was not supposed to be one of them, especially not the first. However, certain events call for certain actions, and this is one of those times I guess.
Let me begin by explaining the title of this post: A couple of weeks ago I upgraded my server machine with new hardware. There was not a single second downtime while I was doing the upgrade, since I had moved the blog temporarily over to my laptop (and I don't think anybody noticed a difference in performance). After the upgrade was done I moved the blog back (the actual operation was updating the database to reflect recent visits and comments, since there were no code changes and no new posts) and everything was fine. Then, however, something happened which does not happen very often, for whatever reason (I'm still not sure why) I got a new IP from my ISP without noticing it, and then for the last 11 days or so my A entry was pointing to the old IP which didn't work anymore. Since I've been getting around 20 hits per day (on a good day even two or three times as many) that means that a few people must have noticed the blog was gone, and I know from my own experience how annoying it can be to follow a link which does not work anymore. Sorry to anyone who falls into that group of people and who is reading this now! The fact that even during my hardware upgrade I moved the blog over to my laptop shows that I am actually trying to keep the blog online under any circumstances.
This unfortunate experience brought up two thoughts/questions again:
- Hosting the blog on my own server vs. a hosted solution: When I set up this blog I didn't know if anyone would actually be reading it, but thanks to Phil Haack my posts about running and debugging Subtext on Windows Vista and IIS7 have received some attention (which is one of the reasons why I have been meaning to follow up with a couple of additional articles), which showed to me that the initial intent for creating this blog was absolutely spot on. With a growing number of readers I guess it would make sense to move to a hosted solution at some point, so that annoying problems like this IP change don't come up again. However, my decision to run the blog on my own server was made simply because of the unique enviroment I have been able to work on, which is the relatively fresh Windows Vista operating system and the latest version of IIS which runs on it. I have not looked around yet to see if there are hosting providers which offer IIS7 hosting, but I'm sure by now there are some. IIS7 is not the only reason, though. I also wanted the blog to be only one part of my web site (and I admit as of now it is still the only part there is), and then add other things such as a download section for code examples and little tools and utitilies I have written, so using my own server seemed easier. At some point I might decide to just move the blog to a hosted server and leave other experimental things on my own server, that might be a good compromise. If anyone knows of a good, fast, and cheap ASP.NET 2.0 hosting provider (SQL Server 2005 and AJAX Extensions would be awesome, too), please comment on this post and let me know!
- Finding a solution for the actual problem: So far I have not explained why this whole thing happened in the first place. Well, I am running my server on a Comcast Cable Modem line which does not have a static IP. However, since I got the internet connection (almost two years ago) I have had only a handful of IP changes, and all of them without exception have been related to changes I did in my network or TV setup and which required a restart of the cable modem. If I don't do anything, neither does Comcast, and I can run with the same IP for months. Basically I've been treating it like a static IP, thinking that I know when it changes and what to do when it does. Obviously this assumption has been proven wrong by the fact that I got a new IP without noticing it, so I've been thinking about possible solutions:
- Instead of directly pointing my A entry to my IP address, I could use a service such as DynDns to make sure that even on those rare occasions when the IP changes everything keeps working fine. I actually tried this approach in the very beginning, but with very unsatisfying results. Maybe someone else can explain to me if there is a way to configure a GoDaddy domain to forward to another IP without actually exposing that IP? What I mean is the following scenario: Let's say my DynDns hostname is needforgeek.dyndns.org. Now if I set up my needforgeek.com to forward to that name, entering http://blog.needforgeek.com will do the right thing and find the blog, but your browser address bar will say http://blog.needforgeek.dyndns.org at that point. I don't want that. I want it to always say needforgeek.com, especially if other people link to posts I need it to work correctly, and also for Google caching and other search engines I want it to be stored with the right domain name. As of now I have not been able to figure out a better way than to point my A entry directly to my IP. If you know how to do this, feel free to leave a comment!
- I've been thinking about a good way to programmatically update the A entry if my IP changes. Granted, this will still lead to a 2 (best case) to 48 hour (worst case) gap in which the blog won't be reachable, but that still sounds much better than 11 days (which by the way I did not notice earlier because of sickness and work and the fact that I hadn't written a post in a while). Unfortunately GoDaddy does not seem to offer an API to do something like that (which would be really sweet), instead they have this hack they call web portal for configuration. I call it a hack because you can see how it switches between an ASP.NET and a PHP application as you move through the different configuration pages. That is not very consistent, and I can only wonder why they would do something like that. I hope at some point it will all be within the same web application. So my only way to do it is by using frameworks such as NUnitAsp to execute the necessary buttons clicks and field entries automatically. NUnit is actually a test framework, but it simulates user actions such as entering a username and password and clicking a button, so that should actually get me pretty far. It would be nice to know if something like this exists already, then I wouldn't have to write it, but so far Google did not bring up anything useful in that direction.
- A different approach but in the same direction as the second bullet point would be a little tool that notifies me if my IP changes. That is actually very easy to do, so easy that I am tempted to do it as a Windows Vista Sidebar Gadget, since I've been meaning to write an article on that topic anyway.
This has become a pretty long post, not sure if anyone is interested in that much detail :-) Anyway, I'll try to make sure this does not happen again, and follow up in a while with the solution I have decided on!
Update (2007-02-24): I just had another downtime of a couple of hours, this time my router somehow decided not to let any traffic through anymore. This has never happened before, nonetheless it convinced me that I should find some cheap hosted space for this blog to prevent any further "never-happened-before" events from ocurring. I'll give another update once I found a good hosting provider and moved the blog over.
Update 2 (2007-03-06): And another downtime, I simply lost connectivity and had to restart the cable modem, and then subsequently update the A entry with my new IP, which took another couple of hours to update. These random outages are quite annoying and I really need to move the blog to a more reliable server soon!