πŸ“š Wiki

Step-by-step guides pulled from real homelab projects β€” rewritten for anyone to follow, with internal IPs and account details stripped out. Real gotchas kept in, because that's the useful part.

No guides match that search.

Bitcoin III Hashrates, Measured on Cards I Own

Six GPUs on SHA3-256t with wall watts and efficiency. Three are pool runs with shares accepted. Three are benchmarks and say so.

Mining

The Mining Revenue Formula Everyone Uses Is Wrong, and It Fails Silently

Hashrate over network hashrate overstated daily revenue by 75% on a real chain. Use difficulty instead, and take it from the block header.

Mining

Mine on a GPU Without Touching a Terminal

A free open source GPU miner with a real window. Multi-GPU, a gaming mode that drops every card to 30% so you can play, and an honest account of the two warnings Windows will show you.

Mining

Your Auto-Updater Never Removes What It Replaces

A host nine days from a full disk, with 26 container images and one of them in use. The updater was working perfectly and never pruned anything.

Docker

Load Average Is Not CPU, and in a Container It Is Not Even Yours

Load 51 on a 32-core box is fine, load 45 next to an idle CPU is I/O, and a container's load average belongs to the host. Three misreads of one number.

Linux

Run a Blockchain Node on a Headless Raspberry Pi

A Pi runs a full node fine with no monitor, but SSH has to be enabled before first boot. The file that enables it is named ssh with no extension, and Windows hides extensions by default, so most people create ssh.txt and cannot log in.

Raspberry PiNodes

Troubleshoot a Multi-GPU Mining Rig

Four failure classes with different first moves: no post, no boot, a card that will not show up, and a rig that reboots hours later. Pull every GPU, add them back one at a time, and swap against a known good card to tell the GPU from the riser.

MiningTroubleshooting

Recover a Bricked AMD GPU From a UEFI Shell

A bad VBIOS flash leaves a card that will not post, so no Windows tool can reach it. Boot amdvbflash from a FAT32 stick and force the original ROM back. The step people miss is unhiding files, because the EFI folder never gets copied.

GPU RepairBIOS

Check Your Miner Is Actually Mining

An empty wallet after a week is usually a payout threshold, not a broken rig. Look your address up on the pool and read the last seen time per worker, because a hashrate next to a stale timestamp is history rather than a live reading.

MiningPools

Clone to a Bigger SSD and Actually Use the Extra Space

A straight clone copies the old partition sizes onto the new drive, so a 64GB layout lands on a 1TB disk and the rest sits unallocated. Pick shrink or extend to fill the target, then confirm the data partition really grew before committing.

WindowsStorage

Enable Smart Access Memory

Above 4G Decoding and Resizable BAR stay hidden while CSM is enabled, so the options look absent from your board when they are not. Nothing in Windows confirms the feature is on, which makes a benchmark the only real check.

BIOSAMD

Run Two Power Supplies in One Rig, Properly

A 24-pin splitter ties the second supply to the motherboard's own power signal so both come up and go down together. The paperclip trick does not, which is how you get GPUs still spinning in a machine that thinks it is off.

MiningPower

Replace the Thermal Pads on Any GPU

Measure the old pads with calipers and match the thickness, because a thicker pad lifts the cooler off everything around it. The mistake that costs a second teardown is doing the cooler side and never opening the backplate.

GPU RepairCooling

Install HiveOS on an NVMe Drive

A spare NVMe boots HiveOS fine, but on many boards the M.2 slot borrows PCIe lanes from the GPU slots and cards start going missing. Set the M.2 controller to SATA mode. HiveOS gains nothing from the speed anyway.

MiningHiveOS

Update Nvidia Drivers in HiveOS

Maintenance mode without loading drivers, then run the update from Hive Shell so you can actually watch it. Check the hashrate afterward: one update cost 8 to 9 MH/s on 3070s and 3060 Tis while leaving 3080s untouched.

MiningHiveOS

Connect to a New Linux Server, and Prove You Are on the Right One

Console, SSH and SFTP solve different problems, and the console is the one that still works when SSH does not. Three commands after every login confirm the right machine, the right user and the right directory before you change anything.

LinuxSSH

Navigate the Linux Filesystem

Absolute and relative paths, and why a script needs the absolute one. Cron and systemd do not start your script from the folder you wrote it in. Plus ls -ltr, wc, more, less and grep, and the pipe that joins them.

LinuxShell

Find a Starting Overclock for Any GPU on Any Algorithm

hashrate.no publishes per-card, per-coin overclocks and the miner config to match. The config is often formatted for a Windows .bat file rather than a HiveOS flight sheet, so it needs rewriting before the miner will start.

MiningOverclocking

Put Steam's Gaming Mode on a Normal Desktop PC

SteamOS targets handhelds, so Bazzite is the practical route to a console-style Steam boot on desktop hardware. Nvidia is still beta for gaming mode, and a Ryzen iGPU next to a discrete card can stop gamescope finding the display.

Linux GamingBazzite

Wipe a USB Drive Windows Will Not Format

Write a mining OS image to a USB stick and Disk Management may never format it again. The drive is fine. diskpart clean removes the partition table in four commands, and the warning is that it never asks you to confirm.

WindowsStorage

Write a Qubes OS Install USB on Windows

Qubes ships an ISO that its own instructions tell you to write as a DD image. Pick DD mode in Rufus and the file browser filters your ISO out of view, so the download looks missing when it is not.

Qubes OSWindows

NOT IN With a NULL Drops Every Row, and the Test That Passed Against an Empty Table

NULL NOT IN (1, 2) is not true, it is NULL, so every row with no value in that column silently vanishes from the result. The near-miss is the better story: the test written for exactly this passed against an empty fixture.

DatabasesCorrectness

Electron Screen Share Fails Silently, and It Looks Like a Distro Problem

Electron denies getDisplayMedia unless you register a handler, and the denial raises the same error a cancelled picker does, so every wrapper swallows it. It works in a browser, which is what makes it look distro-specific.

ElectronWebRTC

A Backgrounded WKWebView Kills Your Audio After 27 Seconds, and No Entitlement Fixes It

Wrapping a web app in a WebView is a fine way to ship a mobile client until the feature is voice. iOS suspends WebView audio shortly after the screen locks, and no entitlement changes it.

MobileWebRTC

Desktop Single Sign-On Should Go Through the Real Browser, and Come Back Through a URL Scheme

An embedded login window has none of the user's sessions and none of their password manager. Use the system browser, return through a scheme you own, and never put the session token in that URL.

AuthenticationDesktop Apps

A VLAN With No Internet Does Not Confine the App on Your Own PC

Three layers kept the printer off the internet and the slicer still checked for updates, because a process reads the whole routing table. Isolating the device is a network problem, confining the app is not.

NetworkingIsolation

Run Proton Mail Bridge Headless as an SMTP Relay for Your Whole Fleet

Proton exposes no SMTP to third-party clients, so Bridge is what lets monitoring, forms and scanners send mail. On a headless box it needs a keychain that is not a keychain and a From address it will accept.

EmailSelf-Hosting

Scan to Email From Outside Your Network Without Building an Open Relay

A scanner outside your network needs a reachable SMTP server, and the ten-minute version is an open relay that gets found within hours. Submission only, TLS and auth mandatory, port 25 listener deleted outright.

EmailSecurity

Moving a Static Site to a New Host, and the One File That Was Not Static

A checksum found 158 of 159 files identical and one regenerated by a cron job every two minutes. The generator could not move and home could not push, so the new host pulls, and refuses to publish anything that does not parse.

HostingMigrations

Padding on the Parent Does Not Inset an Absolutely Positioned Child

An absolutely positioned box resolves its offsets against the padding box, whose edges are outside the padding, so a safe-area fix on the shell can be a complete no-op. Twice shipped, never once applied.

CSSLayout

Your New VPS Is Already Being Brute-Forced: Hardening SSH So cloud-init Cannot Undo It

A fresh VPS took 1,118 login attempts from 37 addresses in its first eight hours. Harden it before you build anything on it, and name your drop-in so cloud-init's own config cannot win.

SecuritySSH

Restricting SSH to Your Own IP Is How You Lock Yourself Out

Locking SSH to your own address is good practice and the fastest way to lock yourself out, because that address changes without telling you. Keep one allowlist entry that is not your home IP.

SecuritySSH

Pinning KexAlgorithms Silently Downgraded My SSH, and the Test That Would Have Caught It

Pasting a hardening snippet can leave you with weaker key exchange than the default, and nothing will warn you. Audit what the server actually negotiates rather than what the file says.

SecuritySSH

When Let's Encrypt Can't Reach You Any More, a Private CA Is the Right Answer

Internal-only hostnames cannot answer an HTTP challenge, so their certificates quietly stop renewing. A private CA issues real certificates for names the public internet will never see.

SecurityCertificates

WireGuard Handshakes but No Traffic Flows: wg set Adds Crypto Routing, Not a Route

The handshake succeeds, the peer is listed, and not one packet crosses. wg set installs crypto routing without installing a kernel route, so the traffic never reaches the tunnel at all.

NetworkingWireGuard

One Source of Truth for a Dynamic Home IP, Because All Five Copies Break at Once

A home IP hardcoded in five places breaks in five ways at once, with symptoms that look unrelated. Detect the live value, reconcile every copy from it, and email the ones you cannot automate.

NetworkingAutomation

Lock Down a Self-Hosted Analytics Dashboard Without Killing Your Analytics

The tracking script has to be public. The dashboard does not. Splitting them is easy, and the obvious allowlist locks out your own laptop for a reason worth understanding.

SecuritySelf-Hosting

Your Rule Is Correct, Enabled, and Does Nothing: Cached Evaluation Results

A firewall rule, a permission or a policy that reads perfectly and changes nothing. Existing connections and cached decisions are evaluated once, so the fix has to invalidate the cache too.

NetworkingSecurity

Marking a Host "Offline" in Your Inventory Can Delete Its Monitoring

A sync tool's cleanup step deleted two running hosts from monitoring because the inventory said they were offline. Nothing alerted, because a deleted host cannot go critical.

Monitoring

A Monitoring Check That Can Never Pass Is Worse Than No Check

A scan scheduled in a four-hour window that takes eleven hours will never finish, and it reports as scheduled rather than as broken. Monitoring can fail silently in a direction nobody watches.

MonitoringAutomation

You Deployed the New Page and the Browser Kept the Old One

Half the page is live and half of it errors. That is a cached shell, not a dead server. Caddy's file_server sends no Cache-Control at all, so the browser decides how long to keep your page for you.

CaddyWeb

Publish the Numbers Without Publishing the Addresses

A status page built on private data has to serve the output and never the source. Keep identifiers in a mode 600 file outside the web root, and go check the backup you left next to index.html.

SecurityWeb

systemd EnvironmentFile Keeps Your Inline Comments

Your service crash-loops on a setting that looks correct in the file. systemd only treats # as a comment at the start of a line, so the note you wrote after the value became part of the value.

Linuxsystemd

herdr: Keep Your Coding Agents Running After You Close the Laptop

A Rust binary that owns the terminal your coding agent runs in, so the work survives a closed lid. Read the installer first, and know what the Claude integration writes into your settings.json.

AI AgentsTerminal

Your Top Attacker Is Your Own Monitoring Server

Your gateway blocks an SSH scan every five minutes and the source is inside the house. Monitoring is still polling a host you retired, and crossing a VLAN to do it. Mine was 93 percent of the threat log.

MonitoringSecurity

Caddy reverse_proxy Takes One Matcher, Not Two

Adding a second path to a reverse_proxy line turns it into an upstream called rtc/* on port 80. The config validates, the reload succeeds, and the route your clients actually use is gone.

CaddyWeb

Perhaps Out Of Memory Is A Guess, Not A Measurement

I doubled a container's RAM to fix an out of memory error that was never about memory. The kernel log had zero OOM events and the job I blamed used 2MB.

DebuggingLinux

Retire a Proxmox Guest So It Stays Retired

You shut a container down on purpose and it came back, or it paged you at 3am. Autostart, your watchdog and your monitoring all have an opinion, and one of them has to be dealt with before you stop anything.

ProxmoxOperations

apport Quietly Undoes Your sysctl Hardening After Every Reboot

You set the sysctl, you verified it, and after the next reboot it is back. On Ubuntu a crash handler rewrites it at runtime, so the value in your config file and the value in the kernel disagree.

SecurityLinux

Config Changes That Silently Never Applied: Two Real Ways It Happens

A reload that reports success and changes nothing, and a bind mount that stops tracking the file it points at. Two mechanisms, one symptom, and the same verification habit catches both.

Self-HostingDocker

Your Deploy Pipeline May Be Publishing to a Host Nobody Visits

Green builds, clean commits, and a site that has not changed in three days. When publishing is a second step, verify against the public URL rather than against the pipeline you just watched.

Self-HostingAutomation

Packaging an Electron App for Flathub: Six Things That Break, Including the BaseApp Not Shipping Electron

The Electron BaseApp ships zypak, not Electron, which produces a 2.7MB app with no runtime in it. Six blockers that appear only when you run flatpak-builder instead of rereading the manifest.

PackagingLinux

A Two-Node Proxmox Cluster Cannot Survive One Node Rebooting: You Need a QDevice

Two nodes means two votes, so losing either leaves the survivor below majority and refusing to start guests. Decide where the third vote lives before you form the cluster.

ProxmoxHomelab

du -sh ~/*/ Lied About My Home Directory by a Factor of 3.5

The estimate said 149G, the real total was 521G, and the destination had 86G free. The shell glob skips every hidden directory, and the durable fix is a preflight that refuses to start.

LinuxMigrations

Behind a CDN, Every Client-IP Check You Write Is Wrong Until You Declare the Proxy

Behind a CDN your matcher only ever sees the CDN, so it can never match a visitor. Declaring trusted proxies fixes that, and closes the forged-header bypass you get free by skipping it.

NetworkingSecurity

Publishing a 3D Model: the Licence Traps, and Why the Default Selection Is the Worst One

Creative Commons grants cannot be revoked, the upload form defaults to public domain, and the strictest CC licence still permits unlimited mirroring. Plus what each marketplace actually pays.

3D PrintingPublishing

A Guest Watchdog That Restarts Stopped VMs, and the Hold File That Stops It Fighting You

onboot only covers a host reboot. A five-minute watchdog covers a guest stopping at any other time, and the hold file is what stops it fighting you during planned maintenance.

ProxmoxAutomation

Putting a Local LLM to Work on Your Fleet: Notify Only, and Never Let History Pose as Fact

A local model can turn a wall of alerts into one readable daily email. Keep it notify-only, and tell it explicitly that retrieved documentation is never a source of current facts.

AIAutomation

printcheck — Catch the Print That Will Fail Before You Spend the Filament

A free MIT-licensed CLI that reads the two numbers your slicer never shows you — height over footprint, and flat underside floating in mid-air — and diffs new gcode against a print you already know came out right.

3D PrintingTools

Add a Content Security Policy Without Breaking Your Own Site

Copy-pasted CSP headers break real sites, so most people water them down until they do nothing. Inventory what your site actually loads first β€” including the runtime fetch() calls that never appear in your HTML β€” then write a policy that fits it.

SecurityWeb

Phantom Gamepad Input in Games: an RGB Controller Posing as a Joystick

Camera drifting, menus scrolling by themselves, a character that walks without you β€” on Linux it's often a motherboard RGB controller enumerated as a joystick with its axes jammed at full deflection. Prove it in two minutes, then kill it with one udev rule.

Linux GamingHardware

Harden Your QIDI Plus 4 Before It Touches Your Network

A Klipper printer is a small Linux server with a published default password and a trust-everything network posture β€” here's the 20-minute lockdown, with the real commands and the gotchas that make a naive attempt look like it worked when it didn't.

Security3D Printing

QIDI Studio Segfaults on Linux Once You Add a Printer β€” The Real Fix

A WebKitGTK conflict QIDITECH admits to in their own release notes, not a config mistake β€” the dmesg trace, the diagnosis, and the two-setting fix.

3D PrintingLinux

smartd Exit 17 and haveged Error 5 on an eMMC Board

Two services fail on every boot of an ARM single board computer and neither one can ever succeed. How to prove it, how to mask them safely, and what to monitor on eMMC instead of SMART.

MonitoringLinux

Docker's Install Script Silently Half-Fails in a Fresh LXC Container

Scripting docker-ce onto a fresh LXC or minimal VM over non-interactive SSH can leave the docker group missing and the socket refusing to start β€” here's the exact one-line fix.

DockerProxmox

Never Write Directly to an App-Encrypted Database Column

A raw SQL write to a field an app encrypts at its own layer can succeed silently, then break the app's very next read in a way that looks exactly like data loss.

DatabasesSelf-Hosting

LiveKit WebRTC Gotchas: Muting, Stale Room Events and Device Switching

Voice-activity detection going silent after mute, a stale room-event race, and an iOS-only connection failure traced to Multipath TCP inside the SDK itself.

LiveKitWebRTC

Why rsync Over SSH Fails Against a Synology NAS With "Permission Denied"

DSM's rsync binary is setuid-root, and that specifically breaks non-interactive SSH invocation β€” real hardening, not a bug. Here's the actual workaround.

SynologyMigrations

The Bitwarden CLI Can Report Success While Silently Dropping a Password

A login item created via the bw CLI can report success while the password is never actually persisted server-side β€” reproduced when the item lands in a shared organization collection.

VaultwardenAutomation

Add Checkmk as a Grafana Datasource: Setup and the Field That Breaks It

The official plugin's real request body shape isn't documented anywhere reachable through Grafana's own API β€” plus the one settings field that silently 404s every graph.

GrafanaCheckmk

Auto-Updating Self-Hosted Apps: the Gap unattended-upgrades Leaves

A browser extension auto-updated past what a one-version-behind self-hosted server could support, silently breaking sync while every other client kept working.

AutomationSelf-Hosting

Automate UniFi Controller SSL Certificate Renewal via its Local API

An internal, unauthenticated localhost port answers the exact same routes UniFi's own certificate auto-renewal presumably uses β€” reverse-engineered from the console's own UI.

UniFiAutomation

Kasm Workspaces + Proxmox Autoscale: Findings & Install Guide

Browser-based VDI with Proxmox auto-cloning agent VMs on demand β€” the real permission set, every startup-script gotcha, and a general method for diagnosing a stuck clone/destroy loop from scratch.

KasmProxmoxVDI

Run an Internal CA with step-ca for Real HTTPS on Homelab Services

Running your own internal certificate authority (step-ca) so every admin UI on your LAN gets a real, trusted cert β€” no more click-through security warnings.

PKIDocker

Replace Synology DSM's Reverse Proxy with Caddy

Moving public domains from a vendor NAS's reverse proxy to a dedicated Caddy instance β€” plus the Cloudflare certificate trick you need if you're behind Cloudflare.

CaddyNetworking

Self-Host Vaultwarden (Bitwarden Server) on a Proxmox LXC

Running Vaultwarden (a Bitwarden-compatible server) in its own isolated container, and the safe way to migrate an existing vault without losing sessions or data.

VaultwardenDocker

Control Chrome on Your Desktop From a Headless Server Over SSH

Forwarding a UNIX domain socket over SSH β€” not a port β€” so browser automation running on a headless box can drive Chrome on your workstation, kept alive by a systemd user service.

SSHsystemd

Self-Host Gitea with Docker Compose and Postgres

Headless Docker Compose deployment (no web install wizard), avoiding the SSH-port collision, and mirroring an existing GitHub repo without giving it up as canonical.

GiteaDocker

Replace iCloud/NAS Photos with Immich + Radicale

A self-hosted photo library with real ML search, plus CalDAV/CardDAV for contacts and calendars β€” and how to migrate years of existing data over safely.

ImmichSelf-Hosting

Homelab Vulnerability Scanning with Greenbone OpenVAS, Trivy and ZAP

Three free, complementary scanners β€” network, container images, and web apps β€” set up to run on a schedule and actually get looked at.

SecurityOpenVAS

Sync NetBox to Checkmk Automatically with CMDBsyncer

Wiring your network controller, your hypervisor, an inventory system, and a monitoring stack together so new devices and VMs show up automatically β€” and the silent failure modes to watch for on every leg.

NetBoxProxmoxAutomation

Actually Monitor Docker Containers and Non-Systemd Hosts with Checkmk

A fleet-wide notification rule silently discarding every service alert, plus real Docker container monitoring and a from-scratch agent bootstrap on a non-systemd host β€” every gotcha included.

CheckmkDockerMonitoring

Automatic Updates for Docker Game Servers, Gated on a Verified Backup

A per-game breakdown covering Docker-based servers, raw SteamCMD/systemd servers, and a whole Kubernetes-operator-managed one β€” plus two real bugs a dry "no update available" check would have hidden forever, including a management script that lies about its own exit code.

AutomationGame ServersBackups

Self-Hosting a Public Palworld Dedicated Server

Installing Palworld via SteamCMD, exposing it publicly without a port-forward or leaking your home IP, and two config settings β€” guild-building permissions and PvP damage β€” that silently don't do what their names suggest.

Game ServersSteamCMDNetworking

Self-Hosting Enshrouded: A Docker Networking Gotcha That Looks Like a Tunnel Problem

Running Enshrouded in Docker with split-horizon DNS for fast LAN play β€” and a real docker-compose bug where the container looked perfectly healthy while its port was never actually open to the host.

DockerGame ServersNetworking

Self-Hosting Dune Awakening: Exposure, Tuning, and Keeping It Running

Disabling decay/sandstorms/building limits, exposing a 100+ port UDP range through a VPS relay (and a silent config bug that broke it invisibly), a disk that snuck onto the wrong storage, and an auto-update cron that was failing on something nobody suspected.

Game ServersProxmoxNetworking

Self-Hosting Hytale: Finding the Real Save Among Broken Containers

A self-hosted Hytale migration where the obvious save file was a decoy β€” the real multi-week world was trapped inside a stopped container's writable layer, thanks to a bind-mount path mismatch.

HytaleDockerGame Servers

Self-Hosting Minecraft Bedrock Edition

Moving a long-stopped Minecraft Bedrock world off a general-purpose Docker host onto its own dedicated server β€” the small file-permission gotcha that actually broke it, and why Bedrock needs its own box separate from Java.

MinecraftBedrockDocker

Self-Hosting Minecraft Java With Legacy Forge Mods (1.7.10)

A second Minecraft server built specifically for a Forge mod stuck on 1.7.10 β€” the Java 8 image tag requirement, a CurseForge CDN workaround, and rescuing a player from a mod dimension with no built-in way out.

MinecraftForgeDocker

Self-Hosting Minecraft Java with a Modern Fabric Modpack

Standing up a modded Minecraft Java server on Fabric 1.20.1 β€” avoiding shared-storage I/O contention, resolving a modpack's full dependency tree via the Modrinth API, and a recipe-serializer crash with two completely unrelated causes.

MinecraftFabricGame Servers

Self-Hosting TeamSpeak 6 (Beta) in Docker

Deploying TeamSpeak 6 beta in Docker β€” bootstrapping WebQuery/SSH-query API access past a real chicken-and-egg deadlock, building AFK auto-move/mute yourself, and exposing voice + file transfer publicly without silently breaking the file-transfer half.

Self-HostingTeamSpeakDocker

Google Account Recovery Scam Call: How the Vishing Attempt Works

A real phone call impersonating Google tried to trigger a genuine account-recovery approval prompt β€” not a fake login page, the real thing. How the technique works, the tells, and what actually stopped it.

SecuritySocial Engineering

UniFi RBAC Gap: a Limited Admin Can Still Read Full Site Settings

A precautionary infrastructure audit after an unrelated social-engineering attempt found an over-privileged automation API key β€” and a role downgrade that looked like a complete fix but wasn't. The real gap, how to actually verify a fix, and why to audit standing credentials on a schedule.

SecurityUniFiAccess Control

Your SSH Hardening Test Passed and the Server Still Takes Passwords

Three checks that reported success against hosts that were not hardened. An AEAD cipher skipping MAC negotiation, sshd -T printing nothing on a host that is listening, and a guard that failed open.

SSHHardeningVerification

SSH Hardening: Remove Weak MAC Algorithms Across a Whole Fleet

Fixing weak SSH MAC algorithms across an entire fleet of mixed Linux containers, VMs, and vendor NAS units β€” and how to actually verify the fix worked.

SSHHardening

Set Up Proxmox Backup Server with NFS Storage on a NAS

A dedicated backup target for your whole virtualization fleet β€” including physical Windows PCs, not just VMs β€” plus the permission gotchas that trip up almost everyone on first setup.

ProxmoxBackups

Back Up Docker Config Volumes That Live on an NFS Bind Mount

An NFS bind-mount for a container's config folder is invisible to most backup tools β€” how to check for this silent gap and migrate onto real backed-up storage without losing anything.

DockerBackups

Build an Offsite Proxmox Backup Server Replica on a Cheap VPS

A second, independent backup server on a cloud VPS for genuine 3-2-1 coverage β€” locking it down with a firewall instead of a tunnel, a write-only sync credential, and the honest truth about backup immutability.

BackupsCloud

Back Up DigitalOcean Droplets to Proxmox Backup Server

A cloud droplet isn't a VM your hypervisor manages, so nothing backs it up automatically β€” plus a genuinely obscure Docker/overlay2 bug that can leave backups completely unrestorable while looking perfectly healthy.

BackupsDigitalOceanDocker

btrbk btrfs Backups Silently Stopped: How to Diagnose and Monitor Them

An off-site btrfs backup failed every night for 5 nights with zero alerting β€” the red herring that wasn't the cause, the real version-mismatch root cause, the fix, and closing the monitoring gap so it can't happen silently again.

BackupsMonitoring

Expose a Self-Hosted Game Server Without Port Forwarding (frp Tunnel)

Two approaches β€” a simple single-port tunnel for most games, and a VPS-based tunnel for games that need a whole range of ports β€” plus a subtle bug that can make a tunnel look healthy while being completely broken.

NetworkingGame Servers

PUID and PGID Ignored: Docker UID Mapping in an Unprivileged LXC

PUID/PGID are a LinuxServer.io convention, not a Docker feature. Set them on an image that ignores them, inside an unprivileged LXC that offsets every uid by 100000, and writes to an NFS share fail with permission denied while extraction looks like it succeeded.

DockerProxmoxNFS

Large Downloads Fail Only When You're Away From Home: Cloudflare's 100 MB Cap

Cloudflare's Free plan caps a single proxied response at 100 MB. Streaming survives it because segments are small; full-file downloads don't, and Range-resumed retries fail just as fast. How to confirm it in the origin's logs and route around it.

CloudflareJellyfinNetworking

New Media Never Shows Up in Jellyfin: inotify Can't See Another NFS Client's Writes

Real-time monitoring uses inotify, which can never observe writes made by a different NFS client. It looks enabled and does nothing. Why it's structural, and a debounced poller that triggers a real scan instead.

JellyfinNFSRadarr

Your β€œ10 Gigabit” NFS Mount May Be Running Over the 1 Gigabit Link

NFSv4 trunking detection recognises a server it already has a session with and reuses the old connection, so a new fast path can carry zero bytes while mount, routing and ping all look correct. Plus why nconnect nearly doubled throughput from a VM.

NFS10GbEProxmox

Proxmox Backup Server Retention: keep-daily Buckets by Local Day

keep-daily keeps the newest snapshot per local calendar day, not per 24 hours. Backups running near local midnight collide, and a host with two backups can be pruned to one. Pair it with keep-last, and dry-run everything.

ProxmoxBackups

Proxmox Backup Server Fingerprint Mismatch After a Certificate Renewal

Backup clients pin the server's certificate fingerprint, so a routine renewal breaks every one of them at the same moment β€” and a nightly job that fails is completely silent. How to fix it, where the pins hide, and how to make sure it can't happen quietly again.

BackupsMonitoringProxmox

WireGuard AllowedIPs 0.0.0.0/0 Hijacks All Traffic and Kills SSH

A misconfigured AllowedIPs value doesn't just fail to connect β€” it can hijack all of a host's outbound traffic via policy routing, even while the tunnel itself never connects. How to spot it, fix it, and avoid it from the start.

WireGuardNetworkingSecurity

UniFi VLAN Isolation Firewall Rules Without Locking Yourself Out

Putting a device on its own VLAN doesn't isolate it by default on most routers β€” how to check, fix it properly, and avoid a gotcha that silently breaks the direction you meant to keep working.

NetworkingSecurity

Route a VLAN Through a WireGuard VPN Without Adding Gaming Lag

Protocol and server choices that actually matter, a real gotcha with reused provider configs, and a test suite that goes well beyond a handful of pings.

VPNNetworking

Run a "Windows-Only" Dedicated Server on Plain Linux

Bypassing an official Windows+Hyper-V requirement by finding the real Linux payload underneath β€” plus a real debugging story about a live-service game's hidden cloud dependencies, including two wrong turns before finding the real answer.

Self-HostingGame Servers

Self-Host a OneDrive Alternative with Seafile

A real security incident from one wrong env var name, a Cloudflare mTLS gotcha that broke only the iOS app, and the honest truth about what "automatic sync" can and can't mean on an iPhone.

SeafileSelf-Hosting

Self-Host Umami Analytics Behind Caddy: a Google Analytics Alternative

Discovering a reverse proxy had zero access logging, standing up self-hosted Umami analytics, a dropped-image gotcha, and verifying the whole pipeline with a real simulated pageview instead of just a healthy container.

UmamiAnalyticsDocker

Self-Host Outpost: A Real Discord Alternative

Deploying a self-hosted Discord alternative with real WebRTC voice/video β€” the one-click Docker install, and the TLS gotcha that silently breaks voice chat (not just avatars) if you skip it.

DockerSelf-HostingLiveKit

Send Email From a Custom Domain with Mailgun and Cloudflare DNS

Wiring up Mailgun + Cloudflare DNS so a contact form can actually deliver β€” a per-account domain limit, a brand-new account getting auto-disabled, and a dashboard that lags real DNS by several minutes.

MailgunDNSEmail

Get a Self-Hosted Site Crawled and Indexed: Sitemaps, IndexNow, Search Console

Both classic sitemap-ping URLs have been dead for years, IndexNow is the real replacement for everyone except Google, and how to verify Search Console via a plain DNS record instead of an OAuth grant to your DNS provider.

SEODNSSearch Console

Allow One Device Past a UniFi Category Content Filter

Punching a precise, single-device hole in a network-wide content filtering rule β€” and a real gotcha where the firewall API silently refuses to reorder rules, no matter how convincing the success response looks.

NetworkingFirewall

Use Dedicated Service Accounts for Automation, Not Your Admin Login

Dedicated service/bot accounts over reusing your own login, scoped roles instead of admin convenience, one-time tokens, and a real secret-storage gotcha that quietly drops passwords.

SecurityAutomation