Commit Graph

11 Commits

Author SHA1 Message Date
funman300 e6c4c894e4 feat(cloudflare-ddns): keep aleshym.co pointed at the current WAN IP
The WAN is on DHCP with no DDNS anywhere, so a lease change would break
public DNS silently -- certs, Plex and Gitea SSH all resolve through
aleshym.co. cert-manager's Cloudflare token only ever writes the
_acme-challenge TXT records and never touches the A record.

Reuses that same token, resealed for this namespace: its Zone:DNS:Edit
scope already covers A records (verified against the live API).

The updater only PATCHes when the record is actually stale, and PATCHes
content alone so the proxied flag and TTL stay as configured. It exits
non-zero on any failure so a broken run surfaces as a Failed job rather
than dying quietly -- silent failure is the thing this exists to prevent.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-16 18:53:18 -07:00
Alex 91733d3f02 Merge 'feat/notesnook-k8s': Notesnook on k3s + sealed secrets
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-16 10:13:37 -07:00
Alex fb110d1c5b chore(sealed-secrets): commit controller manifest with key renewal disabled
Pins a single sealing key (--key-renew-period=0). Upstream rotates every 30d and
kubeseal seals with the newest key, which would silently invalidate the off-cluster
key backup for secrets sealed after a rotation. Includes DR runbook.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-16 10:09:08 -07:00
Alex 3a9675f992 feat(secrets): seal remaining user-provided cluster secrets
Converts cloudflare-api-token, argocd repo creds, nightscout, and the three
solitaire secrets to SealedSecrets (adopted in place; values verified unchanged
by before/after data hash). Controller-generated secrets (cert-manager webhook CA,
LE account key, argocd internals) intentionally left alone.

Verified post-seal: argocd repository label and dockerconfigjson type preserved,
letsencrypt-prod issuer still Ready, both ArgoCD apps still Synced/Healthy.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-16 10:01:58 -07:00
Alex 07654cd135 feat(notesnook): manage secret via SealedSecret
Secrets are now committed encrypted (sealed-secrets v0.38.4) instead of
hand-applied out-of-band, closing the config-DR gap the backups intentionally
don't cover. Existing Secret adopted via the managed annotation (values verified
unchanged). Controller private key backed up GPG-encrypted off-cluster.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-16 09:21:35 -07:00
Alex 4b801e3444 feat(notesnook): migrate self-hosted Notesnook to k3s
Adds apps/notesnook (namespace, config, mongo rs0 StatefulSet, minio,
identity/sync/sse/monograph deployments + Traefik/cert-manager ingresses)
and argocd/notesnook.yaml. Secret applied out-of-band (only .example committed).
Includes design spec + implementation plan under docs/superpowers.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-15 22:33:56 -07:00
funman300 08cb555ce9 fix(nightscout): use TCP probe to avoid 401 from auth-gated status endpoint 2026-05-18 15:45:23 -07:00
funman300 e4473578dc feat(nightscout): migrate from bare-metal LXC to k3s 2026-05-18 13:47:52 -07:00
funman300 70ab699c04 fix(obsidian-livesync): allow /_up probe without auth via require_valid_user_except_for_up 2026-05-18 13:05:47 -07:00
funman300 dc6e8384d5 fix(obsidian-livesync): copy configmap via init container to avoid unchownable subPath bind-mount 2026-05-18 12:58:55 -07:00
funman300 51ccb1f61e feat(obsidian-livesync): initial CouchDB LiveSync deployment 2026-05-18 12:38:32 -07:00