Rebuilding Druware.com & Moving to Azure

Before we get too deep into the nitty gritty about this, there needs some back story to explain the why and eventually the how.

Looking Back...

In 1996 I was working on a project called the Web Wide Classifieds ( think Craigslist about 10 years earlier ). That project never really gained traction, but at the time, I was exploring web technologies before we really had a handle what web technologies were. At the time, everything was CGI scripts generating HTML pages. It was not pretty. It was not efficient. It was not scalable. At that time through, NeXT announced a really interesting technology called WebObjects. It was in a language (Objective-C) that I did not know, on a platform I did not have ( NeXTStep ), on hardware that I did not have access to. My projects at the time used a bunch of emerging technologies, but WebObjects was always on my radar.

Sometime along the way, I personally switched from using Windows machines to Mac machines, and most of my personal development work migrated to the Mac as well, despite my day jobs always being Windows focused. By the time 2000 rolled around, Apple who had merged with NeXT released a version of WebObjects for the Mac at a price that was reasonable, and by then it had transitioned to Java. I was in, so it was that the Druware website migrated from old cgi based technologies to WebObjects. It worked, and it worked well. I was happy with it, and never really felt the need to do anything about.

2008, the Final Release

WebObjects saw its final release in 2008, but it remained supported for a long time after that. There was no urgency to move the website, as I had other priorities. The end result, other than some random tinkering, it really did not get updated or modified until 2019, at which point WebObjects was clearly dead, Java was uninteresting at the time, and my day job .net work had been bleeding my personal time. However, .net worked well on the Mac, and so the rewrite began.

The Rewrite, the bits, the bytes, the pain

Over the ensuing several years, I built the various backend parts ( many of which are now in the process of moving to open source and are in use as building blocks for other projects as well ). Many are already available, but not documented or published on this site, because, well, I was working on other things at the time. The vast majority of the work on this was actually completed in 2023. But then in August of 23, I had a bad health scare ( fine now ), followed by a house fire a month later. The result? I was more than a little distracted, and once again this got pushed down the list. The little Mac mini that hosted it continued to sit in the corner at the office just chugging away.

Then in June of this year, we had a bit of a crisis at the office, and the little Mac mini needed to either relocate, or the contents of it did. I chose the later.

To Azure We Go!

So it was, we decided to move everything into Azure, which was reasonable. Everything was already containerized, it should be easy right? Things are never that easy. The learning curve was steep, and the timing challenging, but by August, everything was more or less ready to go, but I still was loathe to pull the trigger.

Fate it turns out has a sense of humor. Two years to the day after my health scare, the Mac mini gave up the ghost. The move was forced. Everything 'worked' but it wasn't really complete. Publishing was tricky, and there remained some things that I needed to do, but just lacked the time.

This week though, the time was finally there, so I buttoned down and got busy, resulting in a completed move on Friday.

So, about the nitty gritty...

As I mentioned earlier, the back end is all in .net. Unmentioned, the frontend is now all written in Vue.js. The datastore is PostgreSQL ( though it can be Sqlite, or Microsoft SQL Server with nothing more than a configuration switch ). The Azure host is a simple Web Application, that is container based. The web code once built is published to azure via an Alpine based NGINX linux container. The backend REST API is then incorporated into the application via a custom sidecar container that in turn mounts an Azure Storage file share for persistent data via a private virtual network, separate from the database virtual network.

All in all, it is a very clean and easy platform to configure and manage once you understand it.

All of this is a very long way to introduce the next few weeks of writing. We will discuss the various components and launch them publicly as open source modules, and show how the deployment is done.

Dru Satori @ 9/6/2025 9:39:21 PM
infrastructure