Self-Hosted Infrastructure Exploration

condensed from conversations with Claude

Git Hosting

  • Forgejo — preferred over Gitea (active fork post-licensing drama); single binary, GitHub-style UI
  • Woodpecker CI integrates cleanly for build/deploy pipelines

Static Sites

  • Zola — single Rust binary, Tera templating (Jinja2-like), built-in Sass, zola serve for local dev with live reload
  • Supports YAML front matter (---) so existing posts migrate without touching front matter
    • yeah that was false, still had to add front matter, and while at it changed most of it to TOML
  • CommonMark is close to Pandoc Markdown; enable smart_punctuation and footnotes in config.toml
  • zola build outputs to public/ — deploy via rsync or CI
    • deployed via Cloudflare workers
  • Quartz for Digital Cellar zk
  • End state: Forgejo repo → Woodpecker CI → rsync to Caddy-served directory
    • Probably should still set up Forgejo

Hosting Path

  • Interim: Cloudflare Pages (free tier, 500 builds/month, global CDN, zero ops) — good bridge before VPS
  • Long term: Hetzner VPS + Caddy (auto HTTPS via Let’s Encrypt, minimal config)
  • Once VPS exists, serve Zola site directly from Caddy — two extra lines in Caddyfile

May not need VPS depending on what I want to do. 2026-07-27: VPS tabled for now CF working fine

Networking

  • Tailscale — WireGuard-based private mesh between devices; learn this first
  • Headscale — self-hosted coordination server, drop-in replacement for Tailscale’s centralized piece; migrate once VPS exists
  • Natural order: Tailscale → Headscale when VPS is up
  • Cloudflare Tunnel — punches through firewall for public-facing services without opening ports

File Sync

  • Syncthing — P2P encrypted file sync, pairs with Tailscale for private transport
  • iOS client: Möbius Sync (paid, most functional option)
  • Use case: keeping ~/Documents/Repos/knowledge_library/ synced across devices
  • iOS is low priority for now; revisit if needed

Rough Order of Operations

  1. Migrate site from GitHub Pages to Zola + self-hosted or Cloudflare Pages
  2. Syncthing for file sync if/when needed
  3. Explore Tailscale on existing devices
  4. Deploy Forgejo + Woodpecker + Caddy
  5. Replace Tailscale coordination with Headscale on VPS
  6. Spin up Hetzner VPS (or Oracle free tier)

References

Zola YAML TOML Quartz