Interested in Linux, self-hosted services, and software development, with occasional posts about games. This blog documents problems I run into, solutions that work, and tools or projects worth sharing.
When Chinese and English posts use different collection names, the language switcher on collection pages and article pages may disappear. The solution is simpler than expected.
A detailed guide on implementing automatic language redirection for Hugo static sites using Caddy, based on the browser’s Accept-Language header, including path redirects, file-existence fallbacks, language priority demotion, and a complete multilingual site configuration.
How to set up WebDAV file management in Caddy, including subpath mounting, basic_auth access control, route priority adjustment with the order directive, and configuration examples for different WebDAV use cases.
How to implement IP geolocation-based whitelist/blacklist access control using Caddy’s maxmind-geolocation plugin, including GeoLite2 database auto-update setup and configuration examples for both modes.
How to configure Caddy’s rate_limit plugin, including zone definition, key selection, and window tuning — plus why I ultimately chose to comment out this rule in my actual deployment.
How to use Caddy with Cloudflare DNS-01 to automatically get wildcard TLS certificates, with the API Token permissions and global Caddyfile settings you need, plus real client IP handling behind Cloudflare.
A from-scratch guide on using xcaddy to build a custom Caddy image with plugins, including each plugin’s purpose, multi-stage Dockerfile design, and a complete CI/CD workflow via GitHub Actions that auto-builds and pushes to Docker Hub weekly.
Documenting the hybrid-auto-engine OOM issue encountered when deploying MinerU on an 8GB GPU, and why vlm-auto-engine turns out to use less VRAM — backed by source code analysis and the final solution.