<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Gread The Docs</title><description>Gary Read, Engineering Manager at Freelancer.com. Writing about developer tooling, infrastructure, and self-hosting.</description><link>https://gread.uk/</link><item><title>composer dump-autoload is busy, I&apos;ll do it myself</title><link>https://gread.uk/writing/composer-dump-autoload-is-busy/</link><guid isPermaLink="true">https://gread.uk/writing/composer-dump-autoload-is-busy/</guid><description>A Friday night hotfix blocked by a 3-hour deployment pipeline. How classmap-authoritative autoloading made a missing PHP class invisible, and how to manually patch around it without installing anything on a production host.</description><pubDate>Fri, 08 May 2026 00:00:00 GMT</pubDate><category>php</category><category>symfony</category><category>composer</category><category>production</category><category>debugging</category></item><item><title>The NAS that kept us awake</title><link>https://gread.uk/writing/btrfs-docker-nas-lessons/</link><guid isPermaLink="true">https://gread.uk/writing/btrfs-docker-nas-lessons/</guid><description>Building JS projects in your home folder on a btrfs NAS generates tens of thousands of indexed files and hundreds of Docker layers. Read-write NVMe cache meant every Docker build burned through laptop SSDs that weren&apos;t rated for it.</description><pubDate>Fri, 24 Apr 2026 00:00:00 GMT</pubDate><category>btrfs</category><category>docker</category><category>synology</category><category>nvme</category><category>storage</category><category>observability</category></item><item><title>WireGuard throughput: from 5 Mbps to saturating the link</title><link>https://gread.uk/writing/wireguard-throughput/</link><guid isPermaLink="true">https://gread.uk/writing/wireguard-throughput/</guid><description>Investigating why remote users were getting 5 Mbps through a WireGuard tunnel despite 400+ Mbps available on both ends. MTU fragmentation, TCP congestion collapse, and UDP buffer exhaustion.</description><pubDate>Sun, 05 Apr 2026 00:00:00 GMT</pubDate><category>wireguard</category><category>networking</category><category>prometheus</category><category>synology</category></item><item><title>Deploying Authentik SSO across the homelab</title><link>https://gread.uk/writing/authentik-sso/</link><guid isPermaLink="true">https://gread.uk/writing/authentik-sso/</guid><description>Replacing per-service authentication with centralised SSO backed by Google OAuth. OIDC for Grafana, Immich, Portainer; forwardAuth for everything else.</description><pubDate>Thu, 02 Apr 2026 00:00:00 GMT</pubDate><category>authentik</category><category>sso</category><category>traefik</category><category>oauth</category></item><item><title>How my internal services were exposed to the internet</title><link>https://gread.uk/writing/securing-internal-services/</link><guid isPermaLink="true">https://gread.uk/writing/securing-internal-services/</guid><description>Found that my *.internal.gread.uk services were publicly reachable via the VPS TCP proxy. Built a three-layer defence to fix it.</description><pubDate>Thu, 26 Mar 2026 00:00:00 GMT</pubDate><category>security</category><category>traefik</category><category>nginx</category><category>wireguard</category></item></channel></rss>