diff --git a/content/post/2024-01-10-roll-your-own-authenticator-app-with-keystonejs-and-react-pt-2.md b/content/post/2024-01-10-roll-your-own-authenticator-app-with-keystonejs-and-react-pt-2.md index 5d9faf5..a883890 100644 --- a/content/post/2024-01-10-roll-your-own-authenticator-app-with-keystonejs-and-react-pt-2.md +++ b/content/post/2024-01-10-roll-your-own-authenticator-app-with-keystonejs-and-react-pt-2.md @@ -3,8 +3,6 @@ author: mikeconrad categories: - Software Engineering date: "2024-01-10T20:41:00Z" -guid: https://hackanooga.com/?p=539 -id: 539 tags: - Blog Post - GraphQL @@ -13,7 +11,6 @@ tags: - Prisma - TypeScript title: Roll your own authenticator app with KeystoneJS and React - pt 2 -url: /roll-your-own-authenticator-app-with-keystonejs-and-react-pt-2/ --- In part 1 of this series we built out a basic backend using KeystoneJS. In this part we will go ahead and start a new React frontend that will interact with our backend. We will be using Vite. Let’s get started. Make sure you are in the `authenticator` folder and run the following: diff --git a/content/post/2024-01-17-roll-your-own-authenticator-app-with-keystonejs-and-react-pt-3.md b/content/post/2024-01-17-roll-your-own-authenticator-app-with-keystonejs-and-react-pt-3.md index 536a26a..a34bdaa 100644 --- a/content/post/2024-01-17-roll-your-own-authenticator-app-with-keystonejs-and-react-pt-3.md +++ b/content/post/2024-01-17-roll-your-own-authenticator-app-with-keystonejs-and-react-pt-3.md @@ -8,15 +8,12 @@ enclosure: https://hackanooga.com/wp-content/uploads/2024/03/otp-countdown.mp4 29730 video/mp4 -guid: https://hackanooga.com/?p=546 -id: 546 tags: - Authentication - Blog Post - React - TypeScript title: Roll your own authenticator app with KeystoneJS and React - pt 3 -url: /roll-your-own-authenticator-app-with-keystonejs-and-react-pt-3/ --- In our previous post we got to the point of displaying an OTP in our card component. Now it is time to refactor a bit and implement a countdown functionality to see when this token will expire. For now we will go ahead and add this logic into our Card component. In order to figure out how to build this countdown timer we first need to understand how the TOTP counter is calculated. diff --git a/content/post/2024-02-01-traefik-with-lets-encrypt-and-cloudflare-pt-1.md b/content/post/2024-02-01-traefik-with-lets-encrypt-and-cloudflare-pt-1.md index 5c72613..c1ef522 100644 --- a/content/post/2024-02-01-traefik-with-lets-encrypt-and-cloudflare-pt-1.md +++ b/content/post/2024-02-01-traefik-with-lets-encrypt-and-cloudflare-pt-1.md @@ -10,12 +10,9 @@ dark_fusion_page_sidebar: dark_fusion_site_layout: - "" date: "2024-02-01T14:35:00Z" -guid: https://wordpress.hackanooga.com/?p=422 -id: 422 tags: - Blog Post -title: Traefik with Let’s Encrypt and Cloudflare (pt 1) -url: /traefik-with-lets-encrypt-and-cloudflare-pt-1/ +title: Traefik with Let's Encrypt and Cloudflare (pt 1) --- Recently I decided to rebuild one of my homelab servers. Previously I was using Nginx as my reverse proxy but I decided to switch to Traefik since I have been using it professionally for some time now. One of the reasons I like Traefik is that it is stupid simple to set up certificates and when I am using it with Docker I don’t have to worry about a bunch of configuration files. If you aren’t familiar with how Traefik works with Docker, here is a brief example of a `docker-compose.yaml` @@ -150,4 +147,4 @@ The service name is derived automatically from the definition in the docker comp ```

ots: # This will become the service name

image: luzifer/ots

container_name: ots

-``` \ No newline at end of file +``` diff --git a/content/post/2024-02-15-traefik-with-lets-encrypt-and-cloudflare-pt-2.md b/content/post/2024-02-15-traefik-with-lets-encrypt-and-cloudflare-pt-2.md index fc120c1..bed718d 100644 --- a/content/post/2024-02-15-traefik-with-lets-encrypt-and-cloudflare-pt-2.md +++ b/content/post/2024-02-15-traefik-with-lets-encrypt-and-cloudflare-pt-2.md @@ -10,12 +10,9 @@ dark_fusion_page_sidebar: dark_fusion_site_layout: - "" date: "2024-02-15T15:19:12Z" -guid: https://wordpress.hackanooga.com/?p=425 -id: 425 tags: - Blog Post title: Traefik with Let’s Encrypt and Cloudflare (pt 2) -url: /traefik-with-lets-encrypt-and-cloudflare-pt-2/ --- In this article we are gonna get into setting up Traefik to request dynamic certs from Lets Encrypt. I had a few issues getting this up and running and the documentation is a little fuzzy. In my case I decided to go with the DNS challenge route. Really the only reason I went with this option is because I was having issues with the TLS and HTTP challenges. Well as it turns out my issues didn’t have as much to do with my configuration as they did with my router. diff --git a/content/post/2024-03-07-self-hosted-package-registries-with-gitea.md b/content/post/2024-03-07-self-hosted-package-registries-with-gitea.md index 0b75941..bc0bc28 100644 --- a/content/post/2024-03-07-self-hosted-package-registries-with-gitea.md +++ b/content/post/2024-03-07-self-hosted-package-registries-with-gitea.md @@ -10,12 +10,9 @@ dark_fusion_page_sidebar: dark_fusion_site_layout: - "" date: "2024-03-07T10:07:07Z" -guid: https://wordpress.hackanooga.com/?p=413 -id: 413 tags: - Blog Post title: Self hosted package registries with Gitea -url: /self-hosted-package-registries-with-gitea/ --- I am a big proponent of open source technologies. I have been using [Gitea](https://about.gitea.com/) for a couple years now in my homelab. A few years ago I moved most of my code off of Github and onto my self hosted instance. I recently came across a really handy feature that I didn’t know Gitea had and was pleasantly surprised by: [Package Registry](https://docs.gitea.com/usage/packages/overview?_highlight=packag). You are no doubt familiar with what a package registry is in the broad context. Here are some examples of package registries you probably use on a regular basis: diff --git a/content/post/2024-03-11-automating-ci-cd-with-teamcity-ansible.md b/content/post/2024-03-11-automating-ci-cd-with-teamcity-ansible.md index d6f30a4..abc4fe6 100644 --- a/content/post/2024-03-11-automating-ci-cd-with-teamcity-ansible.md +++ b/content/post/2024-03-11-automating-ci-cd-with-teamcity-ansible.md @@ -10,12 +10,9 @@ dark_fusion_page_sidebar: dark_fusion_site_layout: - "" date: "2024-03-11T09:37:47Z" -guid: https://wordpress.hackanooga.com/?p=393 -id: 393 tags: - Blog Post title: Automating CI/CD with TeamCity and Ansible -url: /automating-ci-cd-with-teamcity-ansible/ --- In part one of this series we are going to explore a CI/CD option you may not be familiar with but should definitely be on your radar. I used Jetbrains TeamCity for several months at my last company and really enjoyed my time with it. A couple of the things I like most about it are: diff --git a/content/post/2024-04-03-stop-all-running-containers-with-docker.md b/content/post/2024-04-03-stop-all-running-containers-with-docker.md index 97c845f..e78bf38 100644 --- a/content/post/2024-04-03-stop-all-running-containers-with-docker.md +++ b/content/post/2024-04-03-stop-all-running-containers-with-docker.md @@ -5,13 +5,10 @@ categories: - Docker - Software Engineering date: "2024-04-03T09:12:41Z" -guid: https://hackanooga.com/?p=557 -id: 557 image: /wp-content/uploads/2024/04/docker-logo-blue-min.png tags: - Blog Post title: Stop all running containers with Docker -url: /stop-all-running-containers-with-docker/ --- These are some handy snippets I use on a regular basis when managing containers. I have one server in particular that can sometimes end up with 50 to 100 orphaned containers for various reasons. The easiest/quickest way to stop all of them is to do something like this: diff --git a/content/post/2024-05-11-traefik-3-0-service-discovery-in-docker-swarm-mode.md b/content/post/2024-05-11-traefik-3-0-service-discovery-in-docker-swarm-mode.md index 02f6866..d368d1c 100644 --- a/content/post/2024-05-11-traefik-3-0-service-discovery-in-docker-swarm-mode.md +++ b/content/post/2024-05-11-traefik-3-0-service-discovery-in-docker-swarm-mode.md @@ -7,12 +7,9 @@ categories: - Software Engineering - Traefik date: "2024-05-11T09:44:01Z" -guid: https://hackanooga.com/?p=564 -id: 564 tags: - Blog Post title: Traefik 3.0 service discovery in Docker Swarm mode -url: /traefik-3-0-service-discovery-in-docker-swarm-mode/ --- I recently decided to set up a Docker swarm cluster for a project I was working on. If you aren’t familiar with Swarm mode, it is similar in some ways to k8s but with much less complexity and it is built into Docker. If you are looking for a fairly straightforward way to deploy containers across a number of nodes without all the overhead of k8s it can be a good choice, however it isn’t a very popular or widespread solution these days. diff --git a/content/post/2024-06-24-fun-with-bots-ssh-tarpitting.md b/content/post/2024-06-24-fun-with-bots-ssh-tarpitting.md index c90659b..25d48bc 100644 --- a/content/post/2024-06-24-fun-with-bots-ssh-tarpitting.md +++ b/content/post/2024-06-24-fun-with-bots-ssh-tarpitting.md @@ -7,12 +7,9 @@ categories: - Security - SSH date: "2024-06-24T09:37:43Z" -guid: https://hackanooga.com/?p=576 -id: 576 tags: - Blog Post title: Fun with bots - SSH tarpitting -url: /fun-with-bots-ssh-tarpitting/ --- For those of you who aren’t familiar with the concept of a network tarpit it is a fairly simple concept. Wikipedia defines it like this: diff --git a/content/post/2024-07-16-debugging-running-nginx-config.md b/content/post/2024-07-16-debugging-running-nginx-config.md index f5fd082..9cbea9e 100644 --- a/content/post/2024-07-16-debugging-running-nginx-config.md +++ b/content/post/2024-07-16-debugging-running-nginx-config.md @@ -5,13 +5,10 @@ categories: - Networking - Self Hosted date: "2024-07-16T21:42:43Z" -guid: https://hackanooga.com/?p=596 -id: 596 image: /wp-content/uploads/2024/07/nginx.png tags: - Blog Post title: Debugging running Nginx config -url: /debugging-running-nginx-config/ --- I was recently working on project where a client had cPanel/WHM with Nginx and Apache. They had a large number of sites managed by Nginx with a large number of includes. I created a custom config to override a location block and needed to be certain that my changes where actually being picked up. Anytime I make changes to an Nginx config, I try to be vigilant about running: diff --git a/content/post/2024-07-16-sftp-server-setup-for-daily-inventory-file-transfers.md b/content/post/2024-07-16-sftp-server-setup-for-daily-inventory-file-transfers.md index b3bd0cb..ba48812 100644 --- a/content/post/2024-07-16-sftp-server-setup-for-daily-inventory-file-transfers.md +++ b/content/post/2024-07-16-sftp-server-setup-for-daily-inventory-file-transfers.md @@ -7,12 +7,9 @@ categories: - Security - Self Hosted date: "2024-07-16T22:15:23Z" -guid: https://hackanooga.com/?p=599 -id: 599 tags: - Upwork Project title: SFTP Server Setup for Daily Inventory File Transfers -url: /sftp-server-setup-for-daily-inventory-file-transfers/ --- ### Job Description diff --git a/content/post/2024-08-01-hardening-your-web-server-by-only-allowing-traffic-from-cloudflare.md b/content/post/2024-08-01-hardening-your-web-server-by-only-allowing-traffic-from-cloudflare.md index aa0cfc7..614fbc5 100644 --- a/content/post/2024-08-01-hardening-your-web-server-by-only-allowing-traffic-from-cloudflare.md +++ b/content/post/2024-08-01-hardening-your-web-server-by-only-allowing-traffic-from-cloudflare.md @@ -7,12 +7,9 @@ categories: - Software Engineering date: "2024-08-01T17:02:29Z" excerpt: Harden your origin server by only allowing access from Cloudflare IP addresses. -guid: https://hackanooga.com/?p=607 -id: 607 tags: - Blog Post title: Hardening your web server by only allowing traffic from Cloudflare -url: /hardening-your-web-server-by-only-allowing-traffic-from-cloudflare/ --- #### TDLR: diff --git a/content/post/2024-09-25-standing-up-a-wireguard-vpn.md b/content/post/2024-09-25-standing-up-a-wireguard-vpn.md index 42522ce..daf21b5 100644 --- a/content/post/2024-09-25-standing-up-a-wireguard-vpn.md +++ b/content/post/2024-09-25-standing-up-a-wireguard-vpn.md @@ -9,12 +9,9 @@ categories: - Software Engineering - SSH date: "2024-09-25T09:56:04Z" -guid: https://hackanooga.com/?p=619 -id: 619 tags: - Blog Post title: Standing up a Wireguard VPN -url: /standing-up-a-wireguard-vpn/ --- VPN’s have traditionally been slow, complex and hard to set up and configure. That all changed several years ago when Wireguard was officially merged into the mainline Linux kernel ([src](https://arstechnica.com/gadgets/2020/03/wireguard-vpn-makes-it-to-1-0-0-and-into-the-next-linux-kernel/)). I won’t go over all the reasons for why you should want to use Wireguard in this article, instead I will be focusing on just how easy it is to set up and configure. diff --git a/content/post/2024-11-20-the-case-for-recording-user-sessions.md b/content/post/2024-11-20-the-case-for-recording-user-sessions.md index 35b3933..d74479f 100644 --- a/content/post/2024-11-20-the-case-for-recording-user-sessions.md +++ b/content/post/2024-11-20-the-case-for-recording-user-sessions.md @@ -3,8 +3,6 @@ author: mikeconrad categories: - Software Engineering date: "2024-11-20T16:07:50Z" -guid: https://hackanooga.com/?p=509 -id: 509 image: /wp-content/uploads/2024/03/hilger-portal-home.webp tags: - Portfolio