<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Aaron Prill</title>
    <description>The latest articles on DEV Community by Aaron Prill (@prill).</description>
    <link>https://dev.to/prill</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1036682%2Fbcc3e4bf-c6c5-4af9-ae46-4018d6dedb2a.jpeg</url>
      <title>DEV Community: Aaron Prill</title>
      <link>https://dev.to/prill</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/prill"/>
    <language>en</language>
    <item>
      <title>The legacy application I plan to 'dockerize' - and a little background</title>
      <dc:creator>Aaron Prill</dc:creator>
      <pubDate>Sat, 04 Mar 2023 16:02:18 +0000</pubDate>
      <link>https://dev.to/prill/the-legacy-application-i-plan-to-dockerize-part-2-25fo</link>
      <guid>https://dev.to/prill/the-legacy-application-i-plan-to-dockerize-part-2-25fo</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;This post is Part 2 in a yet-to-be-determined part series documenting my journey into docker containers and microservices with .Net Core as I attempt to "dockerize" a legacy "mostly internal" windows application and accompanyng webservice (more on the webservice side later). While in &lt;a href="https://dev.to/prill/net-core-microservices-with-blazor-web-front-end-and-mssql-back-end-all-on-docker-part-1-2f2b"&gt;part 1&lt;/a&gt; I optimistically laid out my plan for technologies I will leverage, this gives a little more background on my professional experience, as well as the application I plan to "dockerize". Part 3 (yet to be written) dives right in to the nitty gritty of what I've accomplished so far, focusing mostly on the hurdles I have faced as a "docker newbie".&lt;/p&gt;

&lt;h2&gt;
  
  
  The Backstory
&lt;/h2&gt;

&lt;h3&gt;
  
  
  My Experience
&lt;/h3&gt;

&lt;p&gt;I have 20+ years of Microsoft stack development - beginning with VBA-based MS Access apps, to years of supporting (and being Dev lead on) an enterprise-level VB6 monolothic applicaton, to developing C# Winforms and ASP.net applications, as well as having loads of T-SQL scripting and administration experience in SQL Server environments. While I've done my share of online tutorials and sample projects around WebAPI and Docker containers, this is my first forray into attempting to leverage Docker and a microservices approach on a live production application.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Application
&lt;/h3&gt;

&lt;p&gt;Now, concerning the application I'm planning to dockerize... I described it as "mostly internal" because this application is used to manage software patches for a separate large enterprise-level application. The former, the application I'm actually going to dockerize, we'll call "PatchManager". The latter app, we'll call "LegacyMonolith", is an accounting software application used by business offices for 100+ school districts - mostly in Maine and New Hamsphire. &lt;/p&gt;

&lt;p&gt;My company has been slowly transitioning clients from LegacyMonolith to a newer product offering in order to phase out and retire this app. However, if the past is any predictor of the present, we have at least 5-10 years left supporting LegacyMonolith. And as I said above, the application I'm planning to dockerize - PatchManager - manages and "sends out" database hotfixes to our clients on an as needed basis for LegacyMonolith. &lt;/p&gt;

&lt;p&gt;PatchManager can also send out binary files such as Crystal Reports, yearly tax files, and other individual files as needed. However, it does not manage anything to do with the release cycle or patch the front-end winforms application components of LegacyMonolith - an entire new application build and release are required for software upgrades to take place.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Components
&lt;/h3&gt;

&lt;p&gt;PatchManager has a front-end component -- currently still in MS Access believe it or not -- where we Add/Upload the various SQL Patch scripts (or binary files) as "Patches" (we typically call these Hotfixes - so I may use the terms patch and hotfix interchangeably). As previously mentioned, this application at least has a SQL Server back-end (due to some &lt;em&gt;forward thinking&lt;/em&gt; back in 2004) to store all of the patch data. While the SQL scripts are stored as plain text, the binary files are uploaded into the database as byte arrays (byte[] in SQL Server). This front-end component currently in Access is what I plan to transition to a Blazor Webassembly front-end. &lt;/p&gt;

&lt;p&gt;Thankfully, there are only a few forms that need to be re-developed - making it the perfect application to do as a "pet project" in Blazor. So if you've landed on this post from Google and hoped it was going to describe a blackbox method on how to dockerize a legacy windows monolithic application, you'll be sadly disappointed. But keep reading- I still believe we can learn from each other!&lt;/p&gt;

&lt;p&gt;Finally, PatchManager also has a webservice component that serves as the endpoint for our clients to "pull down" the hotfixes we upload. This webservice resides on a separate server. Phase 2 of this project will be of course to update the webservice to look at the new dockerized version of PatchManager that I create.&lt;/p&gt;

&lt;p&gt;Well, that's enough background. My next post will finally jump into my progress. It's been interesting so far, and I can't wait to tell you about it!&lt;/p&gt;

</description>
      <category>computervision</category>
      <category>healthtech</category>
      <category>ai</category>
      <category>discuss</category>
    </item>
    <item>
      <title>Project Plan: Blazor WebAPI server, Blazor Web client, MSSQL database - All in Docker</title>
      <dc:creator>Aaron Prill</dc:creator>
      <pubDate>Thu, 02 Mar 2023 05:08:18 +0000</pubDate>
      <link>https://dev.to/prill/net-core-microservices-with-blazor-web-front-end-and-mssql-back-end-all-on-docker-part-1-2f2b</link>
      <guid>https://dev.to/prill/net-core-microservices-with-blazor-web-front-end-and-mssql-back-end-all-on-docker-part-1-2f2b</guid>
      <description>&lt;p&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This article series will detail my experience dockerizing a "mostly internal" legacy Windows application with a SQL Server backend (more on the legacy application being "dockerized" in &lt;a href="https://dev.to/prill/the-legacy-application-i-plan-to-dockerize-part-2-25fo"&gt;part 2&lt;/a&gt;). To decouple my application, I will be leveraging microservices and tie them together with an API. Envoy will be used as a proxy to handle incoming requests to the gateway.&lt;/p&gt;

&lt;p&gt;** Application Architecture **&lt;/p&gt;

&lt;p&gt;The new application will be brokend down like so:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;An ASP.net Core Blazor Server WebAPI project that will have the necessary endpoints to be the "gateway" to the back-end database.&lt;/li&gt;
&lt;li&gt;I will utilize Entity Framework in this project and a "database-first" approach since this application has an existing database schema. Once I generate the initial Models I need, I may transition to a code-first/migrations model to create a new database with a cleaned-up schema (then later copy over the data from the legacy database).&lt;/li&gt;
&lt;li&gt;The database is currently a SQL Server database hosted on-premise on a VM with an old Windows Server OS that Corporate It wants me to decomission - this is the main motivation for this project.&lt;/li&gt;
&lt;li&gt;My goal is to host the Blazor WebAPI and SQL Server database in separate Docker containers from the "get go" (that is, during development Visual Studio will launch the WebAPI project in a docker container and attach the database into a separate docker container with a persistent volume).&lt;/li&gt;
&lt;li&gt;Once I get the API methods coded and tested with Swagger, I'll move onto creating a client front-end that will also be in Blazor, but it will be a Blazor Webassembly (client) project.&lt;/li&gt;
&lt;li&gt;The web client may or may not be hosted in docker during development, but once it is ready for deployment it will most likely be.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Well, for an "old dog" like me that project plan is agressive, but keep checking back to see how it goes. I'm sure we'll all learn something along the way!&lt;/p&gt;

&lt;p&gt;Next, for more on the legacy application I'm dockerizing, &lt;a href="https://dev.to/prill/the-legacy-application-i-plan-to-dockerize-part-2-25fo"&gt;check out part 2&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Helpful links&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The following links are references to videos/articles I have found that I may refer back to while completing this project (keeping for my own reference).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=dY_AWdCzsCY&amp;amp;list=PLzewa6pjbr3IQEUfNiK2SROQC1NuKl6PV"&gt;Blazor Webapp Tutorial Playlist - Beginner to Advanced&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Above summary copied from this video&lt;/li&gt;
&lt;li&gt;Get started with front-end development in Blazor&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=hpLvXNASyTI"&gt;Video: .Net Core App with SQL Server&lt;/a&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;App and DB running in separate containers&lt;/li&gt;
&lt;li&gt;How to deploy with Docker-Compose&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=2p01iafOxUw"&gt;Video: Simple .Net Microservice with SQL Backend&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Uses SQL Server Entity Core Framework&lt;/li&gt;
&lt;li&gt;Tests Api with Postman&lt;/li&gt;
&lt;li&gt;Deploys with Docker Compose&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=k4l3Ptd4yjw"&gt;Video: ASP.Net Core API Gateway with Ocelot&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ties all the microservices together in short video&lt;/li&gt;
&lt;li&gt;Separate series linked on creating front-end Blazor app&lt;/li&gt;
&lt;li&gt;Uses Ocelot which is now dormant project

&lt;ul&gt;
&lt;li&gt;Envoy is the "new option" (see next video)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=UsoH5cqE1OA"&gt;Video: Build an API Gateway with Envoy and use with .NET Core APIs&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Long video but explains entire architecture in detail&lt;/li&gt;
&lt;li&gt;Dives into using Envoy as the proxy for the APIs&lt;/li&gt;
&lt;li&gt;Video description links to other videos relevant to the topic&lt;/li&gt;
&lt;li&gt;Ingredients used:

&lt;ul&gt;
&lt;li&gt;VS Code&lt;/li&gt;
&lt;li&gt;.Net Core SDK&lt;/li&gt;
&lt;li&gt;Testing with Postman / Curl / Browser&lt;/li&gt;
&lt;li&gt;OpenSSL (for Envoy HTTPS components)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://4sysops.com/archives/install-docker-on-windows-server-2019/"&gt;Install Docker on Windows Server 2019&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If you choose to deploy to an internal server/vm that server will need to have Docker/containter orchestration capabilities.&lt;/li&gt;
&lt;li&gt;The above link discusses installing Docker on a Windows 2019 server/vm.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;--&lt;/p&gt;

</description>
      <category>docker</category>
      <category>dotnetcore</category>
      <category>microservices</category>
      <category>sqlserver</category>
    </item>
  </channel>
</rss>
