4 Commits

Author SHA1 Message Date
gsadmin 0873197b43 Add gitignore, stable docker service account, and recursive /custom ACLs
- .gitignore for IDE/OS files; Linux-VM-Bootstrapper.code-workspace untracked
  (stays local only)
- docker user + docker group with stable ids (default 2000:2000, overridable
  via --docker-uid/--docker-gid or DOCKER_UID/DOCKER_GID). Group is ensured
  before Docker installs so the package adopts it; an existing group is
  renumbered with a docker restart. Collisions with foreign uid/gid owners
  are detected and left alone with a warning.
- /custom gets recursive POSIX ACLs (u/g docker, u/g 1000, root implicit)
  plus default ACLs on directories so new stack data inherits the grants;
  ownership of container-managed files is never changed. acl package added
  to the base toolset.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-13 21:19:53 -04:00
gsadmin d123dc16f4 Replace sub-path routes with dedicated TLS ports; bind priority; Dockhand adoption
- Management UIs now served at ROOT paths on dedicated proxy TLS ports
  (10443 Nginx UI, 10444 Dockhand, 10445 Webmin) via automatic.rules.conf -
  no sub-path rewriting and no app-side configuration; Webmin webprefix from
  the previous release is removed automatically. 443 keeps a minimal catch-all
  and stays free for real vhosts.
- Bind priority implemented: VPN tunnel IP > private LAN IP > loopback, with
  auto-upgrade of managed .env values on re-run. The firewall opens the mgmt
  TLS ports on public interfaces ONLY when the host has neither a tunnel nor
  a private LAN address (re-evaluated each boot).
- Dockhand adoption surfaced: same-path stacks mount documented in compose
  headers, summary, and README (Stacks -> Import -> /custom/docker/stacks).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-13 20:59:55 -04:00
gsadmin 7e2bbbe900 Rename firewall chains, maintenance scripts, and default site; add /webmin route
- Firewall chains renamed VMBOOT-INPUT -> EDGE-PROXY-INPUT and
  VMBOOT-DOCKER-USER -> EDGE-PROXY-DOCKER-INPUT (inbound-to-containers via
  DOCKER-USER); legacy VMBOOT-* chains are removed automatically on re-run
- Maintenance payloads moved to /custom/scripts/cron/ as
  Invoke-AutomaticPatchInstallation.sh and Invoke-AutomaticReboot.sh (own log
  + retention); cron file now preserves its randomized schedule while
  refreshing commands on re-run
- Default site renamed to automatic.rules.conf; cert renamed to
  /etc/ssl/selfsigned/selfsigned.{crt,key}; legacy files cleaned up
- New /webmin/ proxy route via host.docker.internal (host-gateway extra_host);
  Webmin configured with native webprefix=/webmin for clean sub-path support
- proxy_redirect fixups on /nginxui/ and /dockhand/ so upstreams see root and
  Location headers map back; sub-path strategy documented in README
- Child node Webmin messaging simplified

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-13 14:29:11 -04:00
gsadmin 4e10e58d58 Initial release: parent/child node bootstrappers
URL-executable, idempotent bootstrap for Docker VMs (Ubuntu/Debian/RHEL):

- ParentNodeBootstrapper.sh: base tooling, Docker+Compose v2, Tailscale or
  NetBird (key-gated registration), EDGE-PROXY-EXTERNAL/INTERNAL networks,
  Nginx UI edge proxy (host-mode 80/443, VPN-bound dashboard, ACME relay to
  HTTPChallengePort 9180), Dockhand with provisioned backup destination,
  default HTTPS routes (/nginxui/, /dockhand/) behind a generated self-signed
  cert, Webmin, iptables VMBOOT-* firewall, fail2ban on public hosts, weekly
  shuf-randomized patch/reboot cron, /custom skeleton with run logs (keep 3)
- ChildNodeBootstrapper.sh: same baseline plus Hawser agent (standard/edge
  mode) and Webmin agent role; no public service ports
- Auto-updates via Dockhand labels (dockhand.update; URL labels commented)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-13 14:03:16 -04:00