So I'm finally getting around to doing a write-up about my conversion from CommunityServer to DotNetNuke. The conversion wasn't for the faint of heart, though it has been a great learning experience, which I hope will be beneficial to anyone else considering moving away from CommunityServer or other platforms and onto the DotNetNuke platform.
I chose to move from CommunityServer to DotNetNuke 4.8.0 running the Engage: Publish module, available from www.engagemodules.com. My reasons for choosing the Publish module are detailed below. Overall the process has taken me rougly 3 weeks, though not all of that time was spent doing things productive :). I hope to cover some of the details on this conversion, and the thoughts going into the process, as well as thoughts after the process. Before I do that though I will give you a little background on my experience with both systems first.
My CommunityServer/DotNetNuke History
I started using DotNetNuke back when it was known as the IBuySpy Workshop, it started as a hobby, allowing me to configure sites for my various hobbies without hardly any cost of entry (server was the only initial cost, of which I had access to a server at a friend's business that I had full control over). After a couple of years doing DNN for a hobby I was approached by Engage Software and accepted a position that would allow me to use DNN on a day-to-day basis, a decision I look back on as being one of the best career choices I ever made. Since joining Engage Software in May of 2004 we've been able to become the largest provider of DotNetNuke services in the world, ranging from training to custom website development and implementation on the DNN platform.
Some of the projects that Engage Software has worked on using DotNetNuke include: www.YouthRoots.com, www.Kiwanis.org, www.autographmagazine.com, www.stlouischildrens.org, www.theticketguys.com and www.tamko.com. Most of those each run one variant of Engage: Publish.
Some of my personal domains that have run on DotNetNuke over the years include www.vandenhighschool.com (currently offline as I don't have time to maintain the site) www.alphadeltazeta.org (getting reskinned with a new DNN setup this week, and upgraded to DNN 4.8.0), www.solo2.org (currently on CS, but in the past ran on DNN. Will be converted back to DNN in 2008), my two project car websites www.project240z.com and www.corvettez06.org, and now www.chrishammond.com (converted to DNN in January 2008), plus many other smaller sites throughout the years.
My experiences with CommunityServer started off in a very similar fashion. I was doing CS work as a hobby, blogging, creating community websites using pre-CS versions of the software, they provided free solutions for blogs, photo galleries and forums. At the time these applications, dotText, nGallery and the asp.net Forums didn't all link well together, but I saw that Telligent was going to make these function as a single app over time, so CommunityServer was a good route to go for my social type of sites. I was pretty active in the CommunityServer scene when it first launched, and probably for a year or so after, even releasing my own controls for CS. Some of the sites I built on CS include www.solo2.org www.sccaforums.com and www.themadblogger.org, along with what used to be www.chrishammond.com. The only site I see actually leaving on CommunityServer of those listed would be SCCAForums.com, the rest will be converted to DotNetNuke sometime in 2008.
What prompted the conversion?
A few things led to me doing this conversion:
- Telligent has heavily modified the licensing for CommunityServer over the years, going from a free application to a very restrictive licensing model. I've seen Telligent change their licensing model multiple times, and IMHO, each time they do they make some outrageous changes, then back off some of those changes within a day or two, usually after a visible blog post or two bashing the changes. This way Telligent looks like the good guys, they made their license less restrictive, though still more restrictive than they were originally. I do realize Telligent is running a business, and from what I see they are doing very well at it. I could have upgraded to CS' free "express" edition, which would definitely be an option, but I wouldn't have had access to the source, CS doesn't release as frequently as DotNetNuke does, meaning longer times between advancements in the technology.
- I am a DotNetNuke professional, I actively provide DotNetNuke Training, module development, community support, and speak at as many user groups and conferences as I can attend. I am also a DotNetNuke Core Team member. I find it is MUCH easier to develop for, skin (<sarcasm>that might not be apparent with this beautiful skin I have on my site, </sarcasm>), and much less bloated than CommunityServer has become. If I need to modify something inside of DNN I open up the project, make the change and move on to the next task. With CommunityServer when I did have a source version if was always a pain to try and track down what I had to change and where.
- The core of this upgrade was not necessarily DotNetNuke, but a module that runs inside of DNN. I converted all of the blog posts and comments from CommunityServer to a module called Engage: Publish. The catch there is, Engage: Publish is not free, there is a cost associated with the license for this module, in fact the cost is on the high side of the price spectrum of DotNetNuke modules. I however have the fortunate position that Engage: Publish is my product, I control (for the most part) the direction it takes, and to be honest I do most of the development for the module. So I have the ability to tailor it to fit my needs, and at the same time expand the usability of the module as a product for my employer. One thing I am thinking of doing is seeing what options we might have for releasing an Engage: Publish Blog version which could be utilized as a good blogging module for personal websites, for a much lower cost than we are charging for a full version of Engage: Publish. That will take some time, but may be something very cool that we can release to the DNN Community.
- The DotNetNuke community is like no other. It is an open source community, there are literally thousands of people using DNN, with over 500k registered users on www.DotNetNuke.com. This last November I had the pleasure of speaking at the first US DotNetNuke Conference, OpenForce07. Spending a week in Las Vegas with hundreds of other DNN developers was a GREAT experience, it gave me the confidence to know that DotNetNuke isn't going away any time soon, and will continue to grow and become an even better product.
Steps to Convert for CommunityServer to DotNetNuke
The conversion for CommunityServer to DotNetNuke wasn't a quick process, though now that I've completed it once I could definitely repeat the process again more rapidly. These steps are definitely the cliff note versions, but at least give you an overview of the process I followed. If anyone is interested in more detailed steps please let me know.
- The first thing I did was to start looking at how the blog posts were structured inside of CommunityServer. With this information I started to put together a SQL import script that I would use to export all of the CS posts into Engage: Publish Articles. I had most of the SQL Script written from pervious conversions of CMS systems to Engage: Publish so all I had to really do there was wire up the appropriate tables in CS to SQL variables in my script.
- I then setup a new instance of DNN running on version 4.8.0. This is an easy task for me, I can generally get a new DNN instance setup and installed in under 5 minutes, as I have setup instances probably a thousand times over the years.
- Add pages to DNN for some of the key pages that I knew I would need to keep to save URLs. By saving URLs I wanted to keep all of my existing urls stored in Google, or any other Search engines, accessible.
- Installed a version of Engage: Publish
- Backed up the instance of DNN so I could have a good restore point and save myself from having to install the module and create pages again
- Test the import script. I definitely went through this step multiple times, making changes, rolling back the db and trying the script again.
- Configure the ISAPI filter (IIRF) to redirect all CS formatted requests to a redirect file on my site, passing the original URL as a querystring parameter.
- Configure the redirect page to parse through the request URLs and build the appropriate URLs for Engage: Publish. The redirect page did a server redirect passing a status of 301 so that any search spiders that were following the URLs would know to look for the new URL. That the above two steps allowed me to do was keep the thousands of existing URLs that had been indexed by search engines and return valid current pages for those URLs.
Site Format and Structure, Publish Configuration
One of the more complex, yet useful things within Engage: Publish is the way content can be configured to be displayed. A prime example would be the way I have ChrisHammond.com configured to display information from Publish. Below is a list of the pages that have an Engage: Publish module on them, and how they are configured.
||Custom Display module
||This module is configured to display only the latest posts from the Blog category I have setup in Publish
Engage: Publish Tag Cloud
|The custom display module in the center of the page is configured to display only the latest 25 posts from the Blog category I have setup in Publish. The Tag Cloud is used to list off all of the Tags within Publish
Engage: Publish Tag Cloud
Custom Display module
|The tag cloud lists of all the tags in Publish, but also handles tags passed in from the querystring. The Custom Display module loads a list of categories by default. If tags are passed in via the querystring the Custom Display module loads a list of items for the appropriate tags.
||Engage: Publish (2x)
||Article Display (2x)
||On the ABOUT page I have two Engage: Publish article display modules configured. One is setup to display an article about me, and the other is configured to display an article about the software that powers this website.
The above configuration allows me to display all of my blog posts on the "Blog" page, with custom URLs that are very Search Engine Friendly.
Well, I have a lot of work left on the site to get it where I will be happy with it. I will continue to develop Engage: Publish to be a good blogging platform which will require a few more features in the module. I need to finish up tagging support, add MetaBlogAPI support so that I can make posts from Windows Live Writer, as well as add better "Author" information into the module to support the ability to have multiple authors and multiple blogs. Another area that I will be enhancing within Engage: Publish, the reporting side of Publish is limited, we're storing (if you enable the option) a lot of data about articles and views, I need to create some reports for this data. I have already begun laying the framework for this reporting, if you have a license of Engage: Publish start looking for some of these new reports coming soon!
I have a few modules I want to create and utilize on the site as well, one of which I've already started. Over the weekend I put a Flickr module together, you can see it in action on my Photos page. I will continue to improve the module, and then we will release it as a free module available from www.engagemodules.com, I suspect it will be available in some form in the next week or so.
Another module I will probably use for the site is the Engage: Rotator module, I hope to "feature" some of my various websites in a space on the front page of ChrisHammond.com, and I think that Rotator will allow me to do just that, dynamically and in a flashy way that looks nice.
I also plan to work on a new module to parse through my XML files created by my Garmin Forerunner 305 that I purchased a few weeks ago. I use the Forerunner when I go running (I'm on a fitness craze this year) so I hope to create a module that will track how far I've run, for the year, for the month, for the week, etc. That module won't be coming anytime too soon though, before I start on that I need to get a new Wiki release together for the DotNetNuke Wiki project.
This is just the beginning on my new personal website. I hope to do a lot more "useful" blogging this year, between the blog here, my blog on DotNetNuke.com and my blog on weblogs.asp.net I have plenty of places to put my content for people to read.
For now, I believe that is the majority of what I wanted to cover! This is one of the longest blog posts I've made in quite a while, and took 4 days to put together. I'll go back and "edit" it over time, make any changes as necessary. I'll also have to read over this post again to "edit" it :)