mirror of
https://github.com/jbowdre/runtimeterror.git
synced 2024-11-29 18:02:18 +00:00
Merge branch 'main' into drafts
This commit is contained in:
commit
b164c18351
47 changed files with 121 additions and 99 deletions
2
.gitignore
vendored
2
.gitignore
vendored
|
@ -4,5 +4,5 @@
|
|||
/package.json
|
||||
/public/
|
||||
/resources/
|
||||
/.env
|
||||
/.env*
|
||||
|
||||
|
|
|
@ -6,7 +6,7 @@ draft: true
|
|||
description: "This is a new post about..."
|
||||
featured: false
|
||||
toc: true
|
||||
comment: true
|
||||
comments: true
|
||||
series: Tips # Projects, Code
|
||||
tags:
|
||||
- 3dprinting
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
baseURL = "https://runtimeterror.dev"
|
||||
theme = "risotto"
|
||||
title = "runtimeterror"
|
||||
copyright = "© 2018-2023 [runtimeterror](https://runtimeterror.dev)"
|
||||
copyright = "© 2024 John Bowdre"
|
||||
paginate = 10
|
||||
languageCode = "en"
|
||||
DefaultContentLanguage = "en"
|
||||
|
|
|
@ -5,18 +5,32 @@ mainSections = ["posts"]
|
|||
fallBackOgImage = "images/broken-computer.png"
|
||||
numberOfFeaturedPosts = 5
|
||||
numberOfRelatedPosts = 5
|
||||
author = "jbowdre"
|
||||
|
||||
indexTitle = ".-. ..- -. - .. -- . - . .-. .-. --- .-."
|
||||
|
||||
# Comments
|
||||
comments = true
|
||||
utterancesRepo = "jbowdre/site-comments"
|
||||
utterancesIssueTerm = "og:title"
|
||||
utterancesTheme = "gruvbox-dark"
|
||||
giscusCategory = "Announcements"
|
||||
giscusCategoryId = "DIC_kwDOKKEGD84CcG89"
|
||||
giscusCrossOrigin = "anonymous"
|
||||
giscusEmitMetadata = "0"
|
||||
giscusInputPosition = "bottom"
|
||||
giscusLang = "en"
|
||||
giscusLoading = "lazy"
|
||||
giscusMapping = "og:title"
|
||||
giscusReactions = "1"
|
||||
giscusRepo = "jbowdre/site-comments"
|
||||
giscusRepoId = "R_kgDOKKEGDw"
|
||||
giscusStrict = "0"
|
||||
giscusTheme = "noborder_gray"
|
||||
|
||||
analytics = true
|
||||
|
||||
[author]
|
||||
name = "John Bowdre"
|
||||
email = "jbowdre@omg.lol"
|
||||
username = "jbowdre"
|
||||
|
||||
[theme]
|
||||
palette = "runtimeterror"
|
||||
|
||||
|
@ -135,7 +149,7 @@ url = "https://social.lol/@jbowdre"
|
|||
[[socialLinks]]
|
||||
icon = "fa-solid fa-heart"
|
||||
title = "omg.lol"
|
||||
url = "https://jbowdre.omg.lol"
|
||||
url = "https://jbowdre.lol"
|
||||
|
||||
[[socialLinks]]
|
||||
icon = "fa-solid fa-comments"
|
||||
|
|
|
@ -1,2 +1,2 @@
|
|||
comments = false
|
||||
comments = true
|
||||
analytics = false
|
|
@ -17,21 +17,21 @@ I'm now part of a small platform engineering team within that same large corpora
|
|||
|
||||
On my off time, I tinker with new [projects](/series/projects) in my little homelab (and share some of those adventures here). I also help out on Google's product support forums as a [Product Expert](https://productexperts.withgoogle.com/what-it-is), where I support Pixel phones, earbuds, and watches, as well as Chromebooks (primarily with Linux-related queries). Helping users troubleshoot their issues scratches my problem-solving itch, and it keeps me connected with some really great like-minded tech enthusiasts.
|
||||
|
||||
On weekends, I race my daily-driven 2014 Subaru BRZ in local [autocross events](https://www.youtube.com/playlist?list=PLwzr4uKY-x-EwCv-rWNGefdikuW6Oy9O_) or wrench on my 1974 Volkswagen Karmann Ghia.
|
||||
On weekends, I race my daily-driven 2014 Subaru BRZ in local [autocross events](https://l.runtimeterror.dev/my-autox-vids) or wrench on my 1974 Volkswagen Karmann Ghia.
|
||||
|
||||
And in the free time I have left, I game on my Steam Deck.
|
||||
|
||||
See what I've been up to on:
|
||||
- [GitHub](https://github.com/jbowdre)
|
||||
- [CounterSocial](https://counter.social/@john_b)
|
||||
- [status.lol](https://status.lol/jbowdre)
|
||||
- [/now](https://jbowdre.omg.lol/now)
|
||||
- [status.lol](https://status.jbowdre.lol)
|
||||
- [/now](https://now.jbowdre.lol)
|
||||
|
||||
Connect with me via:
|
||||
- [SimpleX Chat](/simplex/)
|
||||
- [Matrix](https://matrix.to/#/@jbowdre:omg.lol)
|
||||
- [Electronic Mail](mailto:jbowdre@omg.lol)
|
||||
- [PGP: 613F B70C 4FA7 A077](https://home.omg.lol/keychain/jbowdre/pgp)
|
||||
- [PGP: 613F B70C 4FA7 A077](https://l.runtimeterror.dev/pgp)
|
||||
|
||||
|
||||
[^1]: Congrats? And also, *thank you.*
|
||||
|
|
|
@ -6,7 +6,7 @@ description: "Using the power of Home Assistant automations and Ntfy push notifi
|
|||
featured: true
|
||||
alias: automating-security-camera-notifications-with-home-assistant-and-ntfy
|
||||
toc: true
|
||||
comment: true
|
||||
comments: true
|
||||
thumbnail: thumbnail.png
|
||||
series: Projects
|
||||
tags:
|
||||
|
|
|
@ -21,7 +21,7 @@ tags:
|
|||
- python
|
||||
- api
|
||||
- phpipam
|
||||
comment: true # Disable comment if false.
|
||||
comments: true # Disable comment if false.
|
||||
---
|
||||
|
||||
I [recently wrote](/tanzu-community-edition-k8s-homelab/#a-real-workload---phpipam) about getting started with VMware's [Tanzu Community Edition](https://tanzucommunityedition.io/) and deploying [phpIPAM](https://phpipam.net/) as my first real-world Kubernetes workload. Well I've spent much of my time since then working on a script which would help to populate my phpIPAM instance with a list of networks to monitor.
|
||||
|
|
|
@ -19,7 +19,7 @@ tags:
|
|||
- linux
|
||||
- shell
|
||||
- regex
|
||||
comment: true # Disable comment if false.
|
||||
comments: true # Disable comment if false.
|
||||
---
|
||||
It's super handy when a Linux config file is loaded with comments to tell you precisely how to configure the thing, but all those comments can really get in the way when you're trying to review the current configuration.
|
||||
|
||||
|
|
|
@ -20,7 +20,7 @@ tags:
|
|||
- chromeos
|
||||
- homelab
|
||||
- iac
|
||||
comment: true # Disable comment if false.
|
||||
comments: true # Disable comment if false.
|
||||
---
|
||||
I've lately been trying to do more with [Salt](https://saltproject.io/) at work, but I'm still very much a novice with that tool. I thought it would be great to have a nice little portable lab environment where I could deploy a few lightweight VMs and practice managing them with Salt - without impacting any systems that are actually being used for anything. Along the way, I figured I'd leverage [HashiCorp Vagrant](https://www.vagrantup.com/) to create and manage the VMs, which would provide a declarative way to define what the VMs should look like. The VM (or even groups of VMs) would be specified in a single file, and I'd bypass all the tedious steps of creating the virtual hardware, attaching the installation media, installing the OS, and performing the initial configuration. Vagrant will help me build up, destroy, and redeploy a development environment in a simple and repeatable way.
|
||||
|
||||
|
|
|
@ -4,7 +4,7 @@ date: 2023-11-24
|
|||
description: "I moved my homelab from VMware vSphere to Proxmox VE, and my only regret is that I didn't make this change sooner."
|
||||
featured: false
|
||||
toc: true
|
||||
comment: true
|
||||
comments: true
|
||||
series: Tips # Projects, Code
|
||||
tags:
|
||||
- homelab
|
||||
|
|
|
@ -5,7 +5,7 @@ lastmod: 2023-12-22
|
|||
description: "Deploying and configuring a self-hosted pub-sub notification handler, getting another server to send a notifcation when it boots, and integrating the notification handler into Home Assistant."
|
||||
featured: false
|
||||
toc: true
|
||||
comment: true
|
||||
comments: true
|
||||
series: Projects
|
||||
tags:
|
||||
- android
|
||||
|
|
|
@ -21,7 +21,7 @@ tags:
|
|||
- tanzu
|
||||
- kubernetes
|
||||
- shell
|
||||
comment: true # Disable comment if false.
|
||||
comments: true # Disable comment if false.
|
||||
---
|
||||
|
||||
Lately I've been spending some time [getting more familiar](/tanzu-community-edition-k8s-homelab/) with VMware's [Tanzu Community Edition](https://tanzucommunityedition.io/) Kubernetes distribution, but I'm still not quite familiar enough with the `tanzu` command line. If only there were a better way for me to discover the available commands for a given context and help me type them correctly...
|
||||
|
|
|
@ -23,7 +23,7 @@ tags:
|
|||
- tailscale
|
||||
- photon
|
||||
- vpn
|
||||
comment: true # Disable comment if false.
|
||||
comments: true # Disable comment if false.
|
||||
---
|
||||
{{% notice note "ESXi-ARM Fling v1.10 Update" %}}
|
||||
On July 20, 2022, VMware released a [major update](https://blogs.vmware.com/arm/2022/07/20/1-10/) for the ESXi-ARM Fling. Among [other fixes and improvements](https://flings.vmware.com/esxi-arm-edition#changelog), this version enables **in-place ESXi upgrades** and [adds support for the Quartz64's **on-board NIC**](https://twitter.com/jmcwhatever/status/1549935971822706688). To update, I:
|
||||
|
|
|
@ -57,7 +57,7 @@ Once that's done, I can try my redirect again - and, after a brief moment, it su
|
|||
![Successful redirect](20210820_successful_redirect.png)
|
||||
|
||||
### Link custom domain
|
||||
The whole point of this project is to *shorten* URLs, but I haven't done that yet. I'll want to link in my `go.bowdre.net` domain to use that in place of the rather unwieldy `https://sheets-url-shortener-vrw7x6wdzq-uc.a.run.app`. I do that by going back to the [Cloud Run console](https://console.cloud.google.com/run) and selecting the option at the top to **Manage Custom Domains**.
|
||||
The whole point of this project is to *shorten* URLs, but I haven't done that yet. I'll want to link in my `go.bowdre.net` domain to use that in place of the rather unwieldy `https://sheets-url-shortener-somestring-uc.a.run.app`. I do that by going back to the [Cloud Run console](https://console.cloud.google.com/run) and selecting the option at the top to **Manage Custom Domains**.
|
||||
![Manage custom domains](20210820_manage_custom_domain.png)
|
||||
|
||||
I can then use the **Add Mapping** button, select my `sheets-url-shortener` service, choose one of my verified domains (which I *think* are already verified since they're registered through Google Domains with the same account), and then specify the desired subdomain.
|
||||
|
@ -73,8 +73,6 @@ It took a while for the domain mapping to go live once I've updated the record.
|
|||
Once it did finally update, I was able to hit `https://go.bowdre.net` to get the error/landing page, complete with a valid SSL cert:
|
||||
![Successful error!](20210820_landing_page.png)
|
||||
|
||||
And testing [go.bowdre.net/ghia](https://go.bowdre.net/ghia) works as well!
|
||||
|
||||
### Outro
|
||||
I'm very pleased with how this quick little project turned out. Managing my shortened links with a Google Sheet is quite convenient, and I really like the complete lack of tracking or analytics. Plus I'm a sucker for an excuse to use a cloud technology I haven't played a lot with yet.
|
||||
|
||||
|
@ -82,9 +80,9 @@ And now I can hand out handy-dandy short links!
|
|||
|
||||
| Link | Description|
|
||||
| --- | --- |
|
||||
| [go.bowdre.net/coso](https://go.bowdre.net/coso) | Follow me on CounterSocial |
|
||||
| [go.bowdre.net/conedoge](https://go.bowdre.net/conedoge) | 2014 Subaru BRZ autocross videos |
|
||||
| [go.bowdre.net/cooltechshit](https://go.bowdre.net/cooltechshit) | A collection of cool tech shit (references and resources) |
|
||||
| [go.bowdre.net/stuffiuse](https://go.bowdre.net/stuffiuse) | Things that I use (and think you should use too) |
|
||||
| [go.bowdre.net/shorterer](https://go.bowdre.net/shorterer) | This post! |
|
||||
| [go.bowdre.net/coso](https://l.runtimeterror.dev/coso) | Follow me on CounterSocial |
|
||||
| [go.bowdre.net/conedoge](https://l.runtimeterror.dev/conedoge) | 2014 Subaru BRZ autocross videos |
|
||||
| [go.bowdre.net/cooltechshit](https://l.runtimeterror.dev/cooltechshit) | A collection of cool tech shit (references and resources) |
|
||||
| [go.bowdre.net/stuffiuse](https://l.runtimeterror.dev/stuffiuse) | Things that I use (and think you should use too) |
|
||||
| [go.bowdre.net/shorterer](https://l.runtimeterror.dev/shorterer) | This post! |
|
||||
|
||||
|
|
|
@ -23,7 +23,7 @@ tags:
|
|||
- automation
|
||||
- rest
|
||||
- api
|
||||
comment: true # Disable comment if false.
|
||||
comments: true # Disable comment if false.
|
||||
---
|
||||
I've been doing a bit of work lately to make my vRealize Automation setup more flexible and dynamic and less dependent upon hardcoded values. To that end, I thought it was probably about time to learn how to interact with the vRA REST API. I wrote this post to share what I've learned and give a quick crash course on how to start doing things with the API.
|
||||
|
||||
|
|
|
@ -22,7 +22,7 @@ tags:
|
|||
- cloud
|
||||
- tailscale
|
||||
- selfhosting
|
||||
comment: true # Disable comment if false.
|
||||
comments: true # Disable comment if false.
|
||||
---
|
||||
I recently started using [Obsidian](https://obsidian.md/) for keeping notes, tracking projects, and just generally organizing all the information that would otherwise pass into my brain and then fall out the other side. Unlike other similar solutions which operate entirely in *The Cloud*, Obsidian works with Markdown files stored in a local folder[^sync], which I find to be very attractive. Not only will this allow me to easily transfer my notes between apps if I find something I like better than Obsidian, but it also opens the door to using `git` to easily back up all this important information.
|
||||
|
||||
|
|
|
@ -19,7 +19,7 @@ codeLineNumbers: false # Override global value for showing of line numbers withi
|
|||
tags:
|
||||
- meta
|
||||
- hugo
|
||||
comment: true # Disable comment if false.
|
||||
comments: true # Disable comment if false.
|
||||
---
|
||||
**Oops, I did it again.**
|
||||
|
||||
|
|
|
@ -24,7 +24,7 @@ tags:
|
|||
- containers
|
||||
- iac
|
||||
- packer
|
||||
comment: true # Disable comment if false.
|
||||
comments: true # Disable comment if false.
|
||||
---
|
||||
I've been leveraging the open-source Tanzu Community Edition Kubernetes distribution for a little while now, both [in my home lab](/tanzu-community-edition-k8s-homelab) and at work, so I was disappointed to learn that VMware was [abandoning the project](https://github.com/vmware-tanzu/community-edition). TCE had been a pretty good fit for my needs, and now I needed to search for a replacement. VMware is offering a free version of Tanzu Kubernetes Grid as a replacement, but it comes with a license solely for non-commercial use so I wouldn't be able to use it at work. And I'd really like to use the same solution in both environments to make development and testing easier on me.
|
||||
|
||||
|
|
|
@ -23,7 +23,7 @@ tags:
|
|||
- certs
|
||||
- cluster
|
||||
- containers
|
||||
comment: true # Disable comment if false.
|
||||
comments: true # Disable comment if false.
|
||||
---
|
||||
Not long ago, I [deployed a Tanzu Community Edition Kubernetes cluster in my homelab](/tanzu-community-edition-k8s-homelab/), and then I fumbled through figuring out how to [log into it from a different device](/logging-in-tce-cluster-from-new-device/) than the one I'd used for deploying the cluster from the `tanzu` cli. That setup works great for playing with Kubernetes in my homelab but I'd love to do some Kubernetes with my team at work and I really need the ability to authenticate multiple users with domain credentials for that.
|
||||
|
||||
|
|
|
@ -19,7 +19,7 @@ tags:
|
|||
- vmware
|
||||
- kubernetes
|
||||
- tanzu
|
||||
comment: true # Disable comment if false.
|
||||
comments: true # Disable comment if false.
|
||||
---
|
||||
When I [set up my Tanzu Community Edition environment](/tanzu-community-edition-k8s-homelab/), I did so from a Linux VM since the containerized Linux environment on my Chromebook doesn't support the `kind` bootstrap cluster used for the deployment. But now that the Kubernetes cluster is up and running, I'd like to be able to connect to it directly without the aid of a jumpbox. How do I get the appropriate cluster configuration over to my Chromebook?
|
||||
|
||||
|
|
|
@ -21,7 +21,7 @@ tags:
|
|||
- tanzu
|
||||
- containers
|
||||
- security
|
||||
comment: true # Disable comment if false.
|
||||
comments: true # Disable comment if false.
|
||||
---
|
||||
Now that VMware [has released](https://blogs.vmware.com/vsphere/2022/01/announcing-availability-of-vsphere-7-update-3c.html) [vCenter 7.0U3c](https://docs.vmware.com/en/VMware-vSphere/7.0/rn/vsphere-vcenter-server-70u3c-release-notes.html) to resolve the Log4Shell vulnerabilities I thought it might be fun to run a security scan against the upgraded VCSA in my homelab to see how it looks. Of course, I don't actually have a security scanner in that environment so I'll need to deploy one.
|
||||
|
||||
|
|
|
@ -19,7 +19,7 @@ tags:
|
|||
- vmware
|
||||
- powercli
|
||||
- powershell
|
||||
comment: true # Disable comment if false.
|
||||
comments: true # Disable comment if false.
|
||||
---
|
||||
|
||||
I recently needed to export a list of all the Linux VMs in a rather large vSphere environment spanning multiple vCenters (and the entire globe), and I wanted to include information about which virtual datacenter each VM lived in to make it easier to map VMs to their physical location.
|
||||
|
|
|
@ -18,7 +18,7 @@ series: Code
|
|||
tags:
|
||||
- powershell
|
||||
- windows
|
||||
comment: true # Disable comment if false.
|
||||
comments: true # Disable comment if false.
|
||||
---
|
||||
We've been working lately to use [HashiCorp Packer](https://www.packer.io/) to standardize and automate our VM template builds, and we found a need to pull in all of the contents of a specific directory on an internal web server. This would be pretty simple for Linux systems using `wget -r`, but we needed to find another solution for our Windows builds.
|
||||
|
||||
|
|
|
@ -20,7 +20,7 @@ tags:
|
|||
- powershell
|
||||
- windows
|
||||
- powercli
|
||||
comment: true # Disable comment if false.
|
||||
comments: true # Disable comment if false.
|
||||
---
|
||||
{{% notice note "Fix available" %}}
|
||||
VMware has released a fix for this problem in the form of [ESXi 7.0 Update 3k](https://docs.vmware.com/en/VMware-vSphere/7.0/rn/vsphere-esxi-70u3k-release-notes.html#resolvedissues):
|
||||
|
|
|
@ -19,7 +19,7 @@ tags:
|
|||
- vmware
|
||||
- vsphere
|
||||
- homelab
|
||||
comment: true # Disable comment if false.
|
||||
comments: true # Disable comment if false.
|
||||
---
|
||||
|
||||
Way back in 2020, VMware released vSphere 7 Update 1 and introduced the new [vSphere Clustering Services (vCLS)](https://core.vmware.com/resource/introduction-vsphere-clustering-service-vcls) to improve how cluster services like the Distributed Resource Scheduler (DRS) operate. vCLS deploys lightweight agent VMs directly on the cluster being managed, and those VMs provide a decoupled and distributed control plane to offload some of the management responsibilities from the vCenter server.
|
||||
|
|
|
@ -5,7 +5,7 @@ lastmod: 2023-12-22
|
|||
description: "A hasty Salt state to deploy netdata monitoring and publish it internally on my tailnet with Tailscale Serve"
|
||||
featured: false
|
||||
toc: true
|
||||
comment: true
|
||||
comments: true
|
||||
series: Code
|
||||
tags:
|
||||
- homelab
|
||||
|
|
|
@ -20,7 +20,7 @@ tags:
|
|||
- hugo
|
||||
- meta
|
||||
- shell
|
||||
comment: true # Disable comment if false.
|
||||
comments: true # Disable comment if false.
|
||||
---
|
||||
In case you missed [the news](/hello-hugo), I recently migrated this blog from a site built with Jekyll to one built with Hugo. One of Hugo's cool features is the concept of [Page Bundles](https://gohugo.io/content-management/page-bundles/), which _bundle_ a page's resources together in one place instead of scattering them all over the place.
|
||||
|
||||
|
|
|
@ -24,7 +24,7 @@ tags:
|
|||
- networking
|
||||
- security
|
||||
- tailscale
|
||||
comment: true # Disable comment if false.
|
||||
comments: true # Disable comment if false.
|
||||
---
|
||||
Not all that long ago, I shared about a [somewhat-complicated WireGuard VPN setup](/cloud-based-wireguard-vpn-remote-homelab-access/) that I had started using to replace my previous OpenVPN solution. I raved about WireGuard's speed, security, and flexible (if complex) Cryptokey Routing, but adding and managing peers with WireGuard is a fairly manual (and tedious) process. And while I thought I was pretty clever for using a WireGuard peer in GCP to maintain a secure tunnel into my home network without having to punch holes through my firewall, routing all my traffic through The Cloud wasn't really optimal[^egress_fees].
|
||||
|
||||
|
|
|
@ -23,7 +23,7 @@ tags:
|
|||
- chat
|
||||
- selfhosting
|
||||
- caddy
|
||||
comment: true # Disable comment if false.
|
||||
comments: true # Disable comment if false.
|
||||
---
|
||||
**Non-technical users deserve private communications, too.**
|
||||
|
||||
|
|
|
@ -5,7 +5,7 @@ lastmod: 2023-11-13
|
|||
description: "Syntax highlighting powered by the Torchlight.dev API makes it easier to dress up code blocks. Here's an overview of what I did to replace this blog's built-in Hugo highlighter (Chroma) with Torchlight."
|
||||
featured: false
|
||||
toc: true
|
||||
comment: true
|
||||
comments: true
|
||||
series: Projects # Projects, Code
|
||||
tags:
|
||||
- javascript
|
||||
|
|
|
@ -5,7 +5,7 @@ date: 2023-10-15
|
|||
description: "Quick notes on using `systemctl edit` to override a systemd service to delay its startup."
|
||||
featured: false
|
||||
toc: false
|
||||
comment: true
|
||||
comments: true
|
||||
series: Tips # Projects, Code
|
||||
tags:
|
||||
- crostini
|
||||
|
|
|
@ -22,7 +22,7 @@ tags:
|
|||
- wireguard
|
||||
- containers
|
||||
- selfhosting
|
||||
comment: true # Disable comment if false.
|
||||
comments: true # Disable comment if false.
|
||||
---
|
||||
I've shared in the past about how I use [custom search engines in Chrome](/abusing-chromes-custom-search-engines-for-fun-and-profit/) as quick web shortcuts. And I may have mentioned [my love for Tailscale](/tags/tailscale/) a time or two as well. Well I recently learned of a way to combine these two passions: [Tailscale golink](https://github.com/tailscale/golink). The [golink announcement post on the Tailscale blog](https://tailscale.com/blog/golink/) offers a great overview of the service:
|
||||
> Using golink, you can create and share simple go/name links for commonly accessed websites, so that anyone in your network can access them no matter the device they’re on — without requiring browser extensions or fiddling with DNS settings. And because golink integrates with Tailscale, links are private to users in your tailnet without any separate user management, logins, or security policies.
|
||||
|
|
|
@ -22,7 +22,7 @@ tags:
|
|||
- networking
|
||||
- security
|
||||
- tailscale
|
||||
comment: true # Disable comment if false.
|
||||
comments: true # Disable comment if false.
|
||||
---
|
||||
You might remember that I'm a [pretty big fan](/secure-networking-made-simple-with-tailscale/) of [Tailscale](https://tailscale.com), which makes it easy to connect your various devices together in a secure [tailnet](https://tailscale.com/kb/1136/tailnet/), or private network. Tailscale is super simple to set up on most platforms, but you'll need to [install it manually](https://tailscale.com/download/linux/static) if there isn't a prebuilt package for your system.
|
||||
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
---
|
||||
title: "Tailscale Serve in a Docker Compose Sidecar"
|
||||
date: 2023-12-30
|
||||
# lastmod: 2023-12-28
|
||||
lastmod: 2024-01-01
|
||||
description: "Using Docker Compose to deploy containerized applications and make them available via Tailscale Serve and Tailscale Funnel"
|
||||
featured: false
|
||||
toc: true
|
||||
comment: true
|
||||
comments: true
|
||||
series: Projects
|
||||
tags:
|
||||
- containers
|
||||
|
@ -120,6 +120,7 @@ There's also a [sample `docker-compose.yml`](https://github.com/jbowdre/tailscal
|
|||
services:
|
||||
tailscale:
|
||||
image: ghcr.io/jbowdre/tailscale-docker:latest
|
||||
restart: unless-stopped
|
||||
container_name: tailscale
|
||||
environment:
|
||||
TS_AUTHKEY: ${TS_AUTHKEY:?err} # from https://login.tailscale.com/admin/settings/authkeys
|
||||
|
@ -133,6 +134,7 @@ services:
|
|||
- ./ts_data:/var/lib/tailscale/ # the mount point should match TS_STATE_DIR
|
||||
myservice:
|
||||
image: nginxdemos/hello
|
||||
restart: unless-stopped
|
||||
network_mode: "service:tailscale" # use the tailscale network service's network
|
||||
```
|
||||
|
||||
|
@ -211,6 +213,7 @@ And I can add the corresponding `docker-compose.yml` to go with it:
|
|||
services:
|
||||
tailscale: # [tl! focus:start]
|
||||
image: ghcr.io/jbowdre/tailscale-docker:latest
|
||||
restart: unless-stopped
|
||||
container_name: cyberchef-tailscale
|
||||
environment:
|
||||
TS_AUTHKEY: ${TS_AUTHKEY:?err}
|
||||
|
@ -286,6 +289,7 @@ I adapted the [example `docker-compose.yml`](https://miniflux.app/docs/dacker.ht
|
|||
services:
|
||||
tailscale: # [tl! focus:start]
|
||||
image: ghcr.io/jbowdre/tailscale-docker:latest
|
||||
restart: unless-stopped
|
||||
container_name: miniflux-tailscale
|
||||
environment:
|
||||
TS_AUTHKEY: ${TS_AUTHKEY:?err}
|
||||
|
@ -299,6 +303,7 @@ services:
|
|||
- ./ts_data:/var/lib/tailscale/ # [tl! focus:end]
|
||||
miniflux:
|
||||
image: miniflux/miniflux:latest
|
||||
restart: unless-stopped
|
||||
container_name: miniflux
|
||||
depends_on:
|
||||
db:
|
||||
|
@ -312,6 +317,7 @@ services:
|
|||
network_mode: "service:tailscale" # [tl! focus]
|
||||
db:
|
||||
image: postgres:15
|
||||
restart: unless-stopped
|
||||
container_name: miniflux-db
|
||||
environment:
|
||||
- POSTGRES_USER=${DB_USER}
|
||||
|
|
|
@ -5,7 +5,7 @@ date: 2023-12-20
|
|||
description: "Exploring some of my favorite Tailscale addon features: SSH, Serve, and Funnel."
|
||||
featured: false
|
||||
toc: true
|
||||
comment: true
|
||||
comments: true
|
||||
series: Tips # Projects, Code
|
||||
tags:
|
||||
- homelab
|
||||
|
|
|
@ -23,7 +23,7 @@ tags:
|
|||
- containers
|
||||
- tanzu
|
||||
- homelab
|
||||
comment: true # Disable comment if false.
|
||||
comments: true # Disable comment if false.
|
||||
---
|
||||
|
||||
Back in October, VMware [announced](https://tanzu.vmware.com/content/blog/vmware-tanzu-community-edition-announcement) [Tanzu Community Edition](https://tanzucommunityedition.io/) as way to provide "a full-featured, easy-to-manage Kubernetes platform that’s perfect for users and learners alike." TCE bundles a bunch of open-source components together in a modular, "batteries included but swappable" way:
|
||||
|
|
|
@ -19,7 +19,7 @@ tags:
|
|||
- vmware
|
||||
- homelab
|
||||
- vsphere
|
||||
comment: true # Disable comment if false.
|
||||
comments: true # Disable comment if false.
|
||||
---
|
||||
You may have heard that there's a new vSphere release out in the wild - [vSphere 8, which just reached Initial Availability this week](https://advocacy.vmware.com/Article/Redirect/9cfbc1b1-207f-4885-a520-cc0bfafcd6c0?uc=197618&g=2d17264e-593a-492d-8d91-3a2155e835f1&f=3104867). Upgrading the vCenter in my single-host homelab is a very straightforward task, and using the included Lifecycle Manager would make quick work of patching a cluster of hosts... but things get a little trickier with a single host. I could write the installer ISO to a USB drive, boot the host off of that, and go through the install interactively, but what if physical access to the host is kind of inconvenient?
|
||||
|
||||
|
|
|
@ -19,7 +19,7 @@ tags:
|
|||
- vmware
|
||||
- vsphere
|
||||
- python
|
||||
comment: true # Disable comment if false.
|
||||
comments: true # Disable comment if false.
|
||||
---
|
||||
VMware vCenter does wonders for abstracting away the layers of complexity involved in managing a large virtual infrastructure, but when something goes wrong it can be challenging to find exactly where the problem lies. And it can be even harder to proactively address potential issues before they occur.
|
||||
|
||||
|
|
|
@ -6,7 +6,7 @@ timeless: true
|
|||
draft: false
|
||||
description: "This blog has migrated from virtuallypotato.com to runtimeterror.dev."
|
||||
toc: false
|
||||
comment: true
|
||||
comments: true
|
||||
tags:
|
||||
- meta
|
||||
---
|
||||
|
|
|
@ -8,7 +8,7 @@ showReadTime = false
|
|||
timeless = true
|
||||
title = "SimpleX Chat"
|
||||
+++
|
||||
*You can **[contact me on SimpleX Chat](https://simplex.chat/contact/#/?v=1-2&smp=smp%3A%2F%2FkYx5LmVD9FMM8hJN4BQqL4WmeUNZn8ipXsX2UkBoiHE%3D%40smp.vpota.to%2FFLy56WLZ79Xda3gW0BjUWDotP6uaparF%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAZTkRAbrxefYZbb5Qypb9BXfuN0X0tzSPEv682DkNcn0%253D)** by clicking that link or scanning the QR code below.*
|
||||
*You can **[contact me on SimpleX Chat](https://l.runtimeterror.dev/simplex-chat-invite)** by clicking that link or scanning the QR code below.*
|
||||
|
||||
![](/images/simplex-invite.png)
|
||||
|
||||
|
@ -32,7 +32,7 @@ Just add these in the SimpleX app at **Settings > Network & servers > SMP server
|
|||
|
||||
| | |
|
||||
| --- | --- |
|
||||
| [![](https://status.vpota.to/api/badge/6/uptime)](https://status.vpota.to/status/simplex) | [[details](https://jbowdre.url.lol/smp_status)] |
|
||||
| [![](https://status.vpota.to/api/badge/6/uptime)](https://status.vpota.to/status/simplex) | [[details](https://l.runtimeterror.dev/smp_status)] |
|
||||
|
||||
---
|
||||
|
||||
|
@ -42,7 +42,7 @@ Just add these in the SimpleX app at **Settings > Network & servers > SMP server
|
|||
|
||||
| | |
|
||||
| --- | --- |
|
||||
| [![](https://status.vpota.to/api/badge/4/uptime)](https://status.vpota.to/status/simplex) | [[details](https://jbowdre.url.lol/smp1_status)] |
|
||||
| [![](https://status.vpota.to/api/badge/4/uptime)](https://status.vpota.to/status/simplex) | [[details](https://l.runtimeterror.dev/smp1_status)] |
|
||||
|
||||
---
|
||||
|
||||
|
@ -52,4 +52,4 @@ Just add these in the SimpleX app at **Settings > Network & servers > SMP server
|
|||
|
||||
| | |
|
||||
| --- | --- |
|
||||
| [![](https://status.vpota.to/api/badge/5/uptime)](https://status.vpota.to/status/simplex) | [[details](https://jbowdre.url.lol/smp2_status)] |
|
||||
| [![](https://status.vpota.to/api/badge/5/uptime)](https://status.vpota.to/status/simplex) | [[details](https://l.runtimeterror.dev/smp2_status)] |
|
||||
|
|
|
@ -11,44 +11,36 @@
|
|||
{{- $pages = $pages | first $limit -}}
|
||||
{{- end -}}
|
||||
{{- printf "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\"?>" | safeHTML }}
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
|
||||
<rss version="2.0"
|
||||
xmlns:atom="http://www.w3.org/2005/Atom"
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/">
|
||||
<channel>
|
||||
<title>{{ if eq .Title .Site.Title }}{{ .Site.Title }}{{ else }}{{ with .Title }}{{.}} on {{ end }}{{ .Site.Title }}{{ end }}</title>
|
||||
<link>{{ .Permalink }}</link>
|
||||
<description>Recent content {{ if ne .Title .Site.Title }}{{ with .Title }}in {{.}} {{ end }}{{ end }}on {{ .Site.Title }}</description>
|
||||
<generator>Hugo -- gohugo.io</generator>{{ with .Site.LanguageCode }}
|
||||
<language>{{.}}</language>{{end}}{{ with .Site.Author.email }}
|
||||
<managingEditor>{{.}}{{ with $.Site.Author.name }} ({{.}}){{end}}</managingEditor>{{end}}{{ with .Site.Author.email }}
|
||||
<webMaster>{{.}}{{ with $.Site.Author.name }} ({{.}}){{end}}</webMaster>{{end}}{{ with .Site.Copyright }}
|
||||
<language>{{.}}</language>{{end}}{{ with .Site.Copyright }}
|
||||
<copyright>{{.}}</copyright>{{end}}{{ if not .Date.IsZero }}
|
||||
<lastBuildDate>{{ .Date.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }}</lastBuildDate>{{ end }}
|
||||
{{- with .OutputFormats.Get "RSS" -}}
|
||||
{{ printf "<atom:link href=%q rel=\"self\" type=%q />" .Permalink .MediaType | safeHTML }}
|
||||
{{- end -}}
|
||||
<image>
|
||||
<url>{{ .Site.Params.fallBackOgImage | absURL }}</url>
|
||||
<title>{{ if eq .Title .Site.Title }}{{ .Site.Title }}{{ else }}{{ with .Title }}{{.}} on {{ end }}{{ .Site.Title }}{{ end }}</title>
|
||||
<link>{{ .Permalink }}</link>
|
||||
</image>
|
||||
{{ range $pages }}
|
||||
<item>
|
||||
<title>{{ .Title }}</title>
|
||||
<title>{{ .Title | plainify }}</title>
|
||||
<link>{{ .Permalink }}</link>
|
||||
<pubDate>{{ .Date.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }}</pubDate>
|
||||
{{ with .Site.Author.email }}<author>{{.}}{{ with $.Site.Author.name }} ({{.}}){{end}}</author>{{end}}
|
||||
{{ with .Site.Params.Author.name }}<dc:creator>{{.}}</dc:creator>{{ end }}
|
||||
{{ with .Params.series }}<category>{{ . | lower }}</category>{{ end }}
|
||||
{{ range (.GetTerms "tags") }}
|
||||
<category>{{ .LinkTitle }}</category>{{ end }}
|
||||
<guid>{{ .Permalink }}</guid>
|
||||
<description>
|
||||
{{ if ne site.Params.rss_summary false }}
|
||||
{{ if .Params.summary }}
|
||||
{{ .Params.summary | html }}
|
||||
{{ else if .Params.abstract }}
|
||||
{{ .Params.abstract | html }}
|
||||
{{ else if .Summary }}
|
||||
{{ .Summary | html }}
|
||||
{{ end }}
|
||||
{{ if site.Params.rss_summary_read_more_link }}
|
||||
{{ $trans := i18n "read_more" -}}
|
||||
{{ printf "<p><a href=\"%s\">%s</a></p>" .RelPermalink $trans | html }}
|
||||
{{ end }}
|
||||
{{ else }}
|
||||
{{ .Content | html }}
|
||||
{{ end }}
|
||||
</description>
|
||||
<description>{{ .Summary | plainify }}</description>
|
||||
</item>
|
||||
{{ end }}
|
||||
</channel>
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
<h1 class="about__title">{{ .title }} <a target="_blank" href="/feed.xml" aria-label="RSS"><i class="fa-solid fa-square-rss"></i></a> </h1>
|
||||
{{ partial "tagline.html" . }}
|
||||
<br>
|
||||
<a href="about"><i class="fa-regular fa-user"></i></a> <a href="/about">{{ site.Params.Author }}</a>
|
||||
<a href="about"><i class="fa-regular fa-user"></i></a> <a href="/about">{{ site.Params.Author.username }}</a>
|
||||
</div>
|
||||
{{ end }}
|
||||
<ul class="aside__social-links">
|
||||
|
|
|
@ -1,11 +1,20 @@
|
|||
{{ if .Site.Params.utterancesRepo }}
|
||||
{{ if isset site.Params "giscusrepo" }}
|
||||
<br>
|
||||
<div class="post_comments">
|
||||
<script src="https://utteranc.es/client.js"
|
||||
repo="{{.Site.Params.utterancesRepo}}"
|
||||
issue-term="{{.Site.Params.utterancesIssueTerm | default "pathname"}}"
|
||||
theme="{{.Site.Params.utterancesTheme | default "github-dark-orange"}}"
|
||||
crossorigin="anonymous"
|
||||
<script src="https://giscus.runtimeterror.dev/client.js"
|
||||
data-repo="{{ .Site.Params.giscusRepo }}"
|
||||
data-repo-id="{{ .Site.Params.giscusRepoId }}"
|
||||
data-category="{{ .Site.Params.giscusCategory }}"
|
||||
data-category-id="{{ .Site.Params.giscusCategoryId }}"
|
||||
data-mapping="{{ .Site.Params.giscusMapping }}"
|
||||
data-strict="{{ .Site.Params.giscusStrict }}"
|
||||
data-reactions-enabled="{{ .Site.Params.giscusReactions }}"
|
||||
data-emit-metadata="{{ .Site.Params.giscusEmitMetadata }}"
|
||||
data-input-position="{{ .Site.Params.giscusInputPosition }}"
|
||||
data-theme="{{ .Site.Params.giscusTheme }}"
|
||||
data-lang="{{ .Site.Params.giscusLang }}"
|
||||
data-loading="{{ .Site.Params.giscusLoading }}"
|
||||
crossorigin="{{ .Site.Params.giscusCrossOrigin }}"
|
||||
async>
|
||||
</script>
|
||||
</div>
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
publish = "public"
|
||||
|
||||
[build.environment]
|
||||
HUGO_VERSION = "0.111.3"
|
||||
HUGO_VERSION = "0.121.1"
|
||||
|
||||
[context.production]
|
||||
command = """
|
||||
|
|
|
@ -197,7 +197,10 @@ ul.pagination li {
|
|||
}
|
||||
|
||||
.statuslol_time a:hover,
|
||||
.statuslol_time a:active,
|
||||
.statuslol_time a.active {
|
||||
.statuslol_time a:active {
|
||||
color: var(--hover) !important;
|
||||
}
|
||||
|
||||
small[style^="opacity: .5"] {
|
||||
opacity: 1 !important;
|
||||
}
|
|
@ -6,7 +6,7 @@
|
|||
--base01: #282828; /* off-bg */
|
||||
--base02: #383838; /* inner-bg */
|
||||
--base03: #585858; /* muted */
|
||||
--base04: #959494; /* off-fg */
|
||||
--base04: #abaaaa; /* off-fg */
|
||||
--base05: #d8d8d8; /* fg */
|
||||
--base06: #e8e8e8;
|
||||
--base07: #5f8700; /* user prompt */
|
||||
|
|
Loading…
Reference in a new issue