Files
nas-tools/CLAUDE.md
T
2026-02-25 02:09:04 +08:00

2.0 KiB

NAS Tools Project

Architecture

  • Synology DS224+ (x86_64, 18GB RAM), Tailscale IP: 100.78.131.124, LAN: 192.168.31.221
  • Docker: /volume1/@appstore/ContainerManager/usr/bin/docker, compose dirs: /volume1/docker/*
  • Caddy VPS (161.33.182.109, Tailscale: 100.109.198.126): reverse proxy for nas.jimmygan.com → NAS:4000, music.jimmygan.com → NAS:4533
  • Build VPS (server2, 158.101.140.85, Tailscale: 100.70.115.1): podman, fast network for pulling images

Dashboard

  • Backend: Python FastAPI (dashboard/backend/)
  • Frontend: Svelte 5 + Tailwind CSS (dashboard/frontend/)
  • Svelte 5 runes: use $state, $props, $bindable (not legacy export let)
  • Sidebar: categorized as Main (Overview, Docker, Files, Terminal), Media (Navidrome, Jellyfin, Audiobookshelf, Immich), Tools (OpenClaw, Repos, Gitea Web, Stirling PDF, Vaultwarden, Speedtest)
  • New pages: create route in src/routes/, import in App.svelte, add to appropriate category in Sidebar.svelte

Build & Deploy

  • Build images on Mac: docker build --platform linux/amd64
  • Transfer: docker save <image> | ssh zjgump@100.78.131.124 "/volume1/@appstore/ContainerManager/usr/bin/docker load"
  • Deploy: git push triggers Gitea Actions CI (docker compose up -d --pull never) — do NOT manually restart
  • CI workflow deploy.yml is stored in Gitea, not in this repo

Synology Quirks

  • No crontab — edit /etc/crontab with sudo + printf, restart crond
  • No scp subsystem — use cat file | ssh ... 'cat > dest'
  • ACLs override Unix perms — use sudo chmod 777 + synoacltool -enforce-inherit for bind mounts

DNS

  • dnsmasq on NAS resolves *.jimmygan.com161.33.182.109 (Caddy VPS)
  • Tailscale split DNS: jimmygan.com → NAS (queries hit dnsmasq)
  • All paths (LAN, Tailscale, public) route through Caddy for TLS

Proxy API

  • URL: https://www.bytecatcode.org
  • Models: claude-opus-4-6, claude-sonnet-4-6, claude-haiku-4-5-20251001 (no date-suffixed names)