My previous site was built on top of my own hand-rolled blog/content engine. That was almost 10 years ago. It was a good learning exercise then, but it was well past time to make some updates, add some new content, and engage with some new technology.
I had a few goals with respect to the new site:
- Move it to a proper content management system
- Update the look and feel
- Maintain a good degree of control over the technical underpinnings
- Move the hosting to Azure and Containers
Orchard Core CMS
This current iteration of my site is built on top of Orchard Core, which I've quite liked working with. It's open source, fast, and pretty feature rich. It has everything and more I need to build my site. As I said, my previous content management architecture was one I conceived of and developed. But it lacked a lot of things. It's quite nice to have really robust CMS administration features like be able to save drafts, content preview, media management, liquid templates, Lucene, and much more. I've only begun to take advantage of the platform and I'm sure I'll have more to say as time goes on.
Look and Feel
Orchard comes with a nice set of built-in themes to help jump-start your design and presentation efforts, in particular The Blog theme. I should say that Themes are really more than just the look and feel and layout of the site. Naturally, I wanted to create my own design and such but adapting a built-in theme like the Blog theme was a great way to get a handle on how to work with content parts, liquid templates, queries, and much more. I'm pretty handy with HTML and CSS, so once I got things up and running, I set about overhauling the templates and styles. I kept a couple of things from the Blog template but restructured everything else.
Modularity
Orchard Core is more than a CMS, so you know. It's really a framework for building applications in a modular way. The content management features are really just a bunch of CMS Modules built on top of the base framework. This modularity provides a logical, understandable, and manageable way to extend the feature set, develop themes, and generally augment your solution. It's ideal for someone like me to have the ability to extend and otherwise mutate the system should I feel I need to. Aside from a custom Theme, I haven't done much. But I can and that's the point. I've worked quite a bit with EPiServer over the last year and it also has a module implementation. But it's really a module feature built into a much more monolithic system. At least that's the way it feels. With Orchard, everything is a module, from the built-in authentication to a custom widget you develop. So, it's just far easier to reason about and imagine how to extend the system.
Azure App Services and Containers
The site runs on Azure App Services. I created a custom docker image, deployed to Docker Hub, and pointed Azure to that container. I chose Linux since it's just much cheaper than Windows in App Services. The only issue I ran into was the database. A site like mine would be great using SQLite. But it doesn't work so well in a Linux container. Actually, it seems like it's really that it doesn't work so well on a shared storage in the Linux environment, which is what you get with a Linux Web App. I first tried a multi-container App configuration so I could run SQLServer Express in a container alongside my web container, but that was quite slow given my low-end Site Plan. I ultimately just spun up a Basic SQLServer database, which is cheap enough. So far it seems pretty good.