Migration to IIS 8.0 and the new blog(s)

I've been running Kartones.net since 2006, and from the beginning used Community Server (2007, then the 2007.1 patch). Partly because was the cool .NET blogging engine back then (there were others like .Text, but CS had forums, a file manager...) but also because it looked robust and had nice documentation.

Over the years I've built some small components, modules and http handlers over it, and performed lots of tweaks and optimizations, but I also suffered one ugly scenario: The company behind CS2007 shutdown the old SDK and documentation, leaving me with just blog posts from other people and reverse engineering to keep maintaining my installation. This has been the main reason why I won't use again a commercial software that is not based on a fully opensource codebase; The core of Community Server 2007 had some Assemblies without source code, plus no documentation, meant nights of debugging for some errors or new features I wanted to build.

Last week my hosting provider informed me that I was switching to a newer machine, with SQL Server 2012 and Windows Server 2012 and IIS 8.0. Coming from SQLS2008 and IIS 7.0, and keeping .NET 2.0/4.0 should have been a smoothly change... but things are never easy.

After switching, the site refused to load, not even detecting my Web.config changes to activate the detailed ASP.NET error messages. As CS stores exception traces in the DB but needs the core to be running, I had no error traces either. Cool deadlock.

So, I went for the typical unkown scenario situation: Replicate it. I grabbed my Windows Server 2012 VM, setup inside IIS 8.0, left SQL Server 2008 as the DB was originally that and shouldn't affect. Deployed a copy of my site, restored a backup of the DB, modified connection strings, and run. And I got the same problem locally.

I spent hours trying to debug it, to nail the problem, down to the tiring process of removing fragments of Web.config to try to nail down what block was failing, and found that was the core Community Server files. Removing them the site would at least load (do nothing but ASP.NET completed its flow). Add them and errors everywhere.

I installed .NET 3.5 too (which includes 2.0), setup all variations of IIS Application Pools (integrated pipeline/classic pipeline with each FW), and I was only able to get a pseudo-detailed error trying to run some CS controls inside the homepage latest posts Repeater list.

This was indicating that something inside had changed and my .NET was not easily portable to IIS 8, and I'm no longer willing to patch a 7 year old software piece so problematic (when I upgraded .NET to 3.5 I already had issues, as I had later with .NET 4.0), so the decision was clear: How the hell I get my data out of this dinosaur and put it elsewhere.

I've already suffered Wordpress, and moved out of it because PHP is already a not so beautiful language to also have to suffer a terrible and insecure codebase. I've also had small issues in the past due to outages in the DB layer (SQL Server going down, being in a shared hosting environment reduces its reliability)... if I could remove that requirement would be great... so BlogEngine.net was the winner.

Researching a bit I found that BlogEngine supports BlogML out of the box and that somebody wrote a CS2007 to BlogML converter, so the escape plan was ready.

I've killed the Community Server problem, along the way cleaned a lot of dead stuff, but I've also broken from the landing page CSS (there's none right now) to most old links that had a ".aspx" suffix. I've migrated the main blogs and critical old sections to subdomains, I've setup email notifications, auto-tweeting upon new posts and similar stuff, but there's still quite some work ahead:

  • New Kartones.Net landing page design
  • Themes for the 4 remaining blogs (old ones converted to static files are fine)
  • Fixing urls inside all migrated posts that link to other posts
  • Small customizations and tweaks that all blogs had (for Example Vicio Como Monos only shows certain categories/tags, handling others like genres)
  • Image galleries (at least I had one already done for BlogEngine)
  • Caching and optimizations: BE is not slow but has lots of stuff I don't want and does too many http requests per page. Old blog loaded all but images on average in under a second

I've also had the benefit of past nice actions a approaches that made this less terrible, such as:

  • Separate subdomain for images. Not only they load faster, but I didn't had to change any of them now, as the URL is the same.
  • Getting experience with ASP.NET/IIS url rewrites. Not only full rewrite rules but also the partial url mappings. RSS and most critical paths were rerouted in no time to time.
  • Migration plans researched. I didn't did a proof of concept, but I already had lots of migration alternatives, from Jekyll or Node.JS to BlogML or using Wordpress as an intermediate step to "something better". I also had some experience with BlogEngine so basic setup was a no-brainer.

Unfortunately, there are some "breaking changes" on all this, mainly regarding RSS and urls. The new (remaining) blog urls are:

  • kartones.net: Will become a simple landing page of my blogs and links to my stuff.
  • blog.kartones.net: This blog, new URL and RSS feed url (old would sould redirect to new one) but everything else the same.
  • theelderthoughts.blogs.kartones.net: New url for my RPGs blog.
  • uncut.blogs.kartones.net: New url for the micro-reviews blog that a friend and I maintain.
  • viciocomomonos.blogs.kartones.net: New url for the videogame reviews blog that a friend and I maintain.

The old general site feed, aggregating all blogs, is now gone, and will redirect to this blog's RSS. If you want all RSS you must now subscribe to each individual blog. Sorry but not being anymore a blog community but individual blogs had not much sense. The Twitter account will remain active, though, because is quite easy to auto-post from all blogs there.

In summary, welcome to the new (forced) version of my blog ;)

Migration to IIS 8.0 and the new blog(s) published @ . Author: