Streamlining My GCP SSH Workflow: Using SSH Configuration Tricks

I often recreate virtual machines (VMs) in Google Cloud Platform (GCP), which means their connection information changes frequently. That leaves stale entries in known_hosts and creates more DNS work as the number of servers grows. Using GC...

3 min

Use Drone plugins in Gitea Actions

Drone.IO runs each pipeline step in a Docker container. Drone plugins are containers with a predefined task and settings supplied by the pipeline. Because they are published as Docker images, the same plugins can also run in Gitea Actions. ...

4 min

Experimenting with Proxmox on Apple Silicon: Turning Your M1 MacBook Air into a Virtual Datacentre

In an effort to create an easy-to-manage VM environment that I can use on the go, even with spotty internet, I decided to try running Proxmox on my Apple Silicon MacBook Air. Parallels and VMware Fusion were options, but I chose Proxmox to ...

3 min

Bye-bye Docker Hub, time to self-host all of my Docker images

Gitea includes a built-in Docker registry, so I can host Docker and other OCI-compliant images without relying on Docker Hub or dealing with its rate limits. The MVP ("most valuable player") of this whole thing is a tool called skopeo . It ...

4 min

Let WireGuard clients use your BGP-advertised IP blocks

This is an addendum to my previous post on giving yourself an IPv6 address using WireGuard . If you have an IPv4 range from before the "great IPv4 exhaustion", you can assign addresses from that range to WireGuard clients. Several cloud pro...

2 min

Giving yourself IPv6 with WireGuard

After many years of asking, my Internet Service Provider still doesn't support IPv6. The same goes for many other ISPs. IPv4 exhaustion has pushed some ISPs toward "Carrier-Grade NAT", where many customers share one address. Dedicated IPv4 ...

4 min

Instead of Docker-in-Docker, what about Docker-on-Fly?

In my ever-ending quest to do things that are probably not the best idea that aren't a part of a usual use-case, I wanted to see if I could run a docker daemon on Fly.io. Fly.io uses Firecracker micro-VMs to run services. It "transmogrifies...

2 min

Adding SFTP abilities to Namespace.so's ephemeral instances

Update (February 2026): Namespace has since added native file upload support to their CLI. You can now use nsc instance upload to copy files directly to an instance, making the shell scripts in this post unnecessary. This post is kept for h...

5 min

Build your own CDN - Part 3: Allowing bring-your-own domains with automatic TLS certificates

Part 1 synchronized TLS certificates across the PoPs, and Part 2 distributed Caddy configuration with Nomad. Caddy still needs to request certificates only for names approved by Gitea Pages. Customer domains are not known in advance, so thi...

2 min

Build your own CDN - Part 2: Using Nomad to manage Caddy

Part 1 covered provisioning TLS certificates and keeping them synchronized across Caddy instances. The next problem I faced was creating Caddy configuration from the services running at each Point of Presence (PoP) and distributing it to th...

5 min