11 Commits

Author SHA1 Message Date
435f62d96f Revert "fix: remove Ingress and TLS configurations for Watch Party and Portfolio services"
This reverts commit 3657519b17c16888fbde0946ba5c65c855330d2b.
2026-08-07 16:28:23 +09:00
3657519b17 fix: remove Ingress and TLS configurations for Watch Party and Portfolio services
Some checks failed
validate / lint (push) Failing after 1s
2026-08-07 16:22:33 +09:00
7fbab2561a fix: revert Gitea DB password to plaintext -- existingSecret doesn't work with this chart
Some checks failed
validate / lint (push) Failing after 1s
Root-causes today's Gitea outage. The official Gitea Helm chart
(dl.gitea.com/charts, gitea/helm-gitea) always builds Gitea's own [database]
config directly from the plaintext postgresql.global.postgresql.auth.password
value, confirmed from templates/gitea/config.yaml:

    {{- $_ := set .Values.gitea.config.database "PASSWD" .Values.postgresql.global.postgresql.auth.password -}}

`existingSecret` only affects the bundled postgresql subchart's own credential
provisioning -- it has no effect on what Gitea itself connects with. Removing
the plaintext field in the earlier Stage 1 "secret hygiene" commit made this
silently fall back to the chart's built-in default password ("gitea", 5
chars), which got re-baked into the persisted app.ini on every pod restart
regardless of what the live Postgres role's real password was -- hence the
repeating CrashLoopBackOff no amount of Postgres-side fixing could resolve.

Restores a plaintext password (the value already live on Postgres from this
incident's recovery), with a comment explaining why, so this doesn't get
"cleaned up" back into the same breakage later. Removes the now-nonfunctional
manifests/gitea/gitea-postgres-secret.sh and its .env.example entry. Getting
this fully off plaintext would need a Config Management Plugin or similar --
not attempted here.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-23 19:56:21 +09:00
d0887ac648 fix: Argo CD bootstrap normalization -- adopt cert-manager/Authentik config, fix policy drift
Stage 5 + part of Stage 6/7 of REFACTOR_PLAN.md. This is the highest-risk
stage per the plan -- these Applications are NOT to be pushed/synced blindly.
Each needs `kubectl diff` against live state one at a time before enabling.

New Applications (previously-live resources with zero GitOps coverage):
- cert-manager-config.yaml (manifests/cert-manager: both ClusterIssuers + the
  internal CA Certificate -- every TLS cert in the cluster depends on these,
  and nothing currently restores them on a cold rebuild).
- authentik-config.yaml (manifests/authentik: ingress, proxy outpost,
  middleware -- raw manifests only, low risk).
- authentik.yaml (the Authentik Helm chart itself): sync is deliberately left
  MANUAL and targetRevision is a REPLACE_ME placeholder -- I don't have a safe
  way to read the live chart version (`helm list -n authentik`), and guessing
  wrong risks an unwanted upgrade/downgrade of the SSO IdP gating Argo CD/
  Grafana/Gitea logins. Needs your input before this one goes anywhere.
- network.yaml: widens coverage to the 4 non-sealed files in manifests/network
  (ddns-cronjob, glances-debian-ingress, traefik-dashboard-ingress,
  watch-party-ingress) that were previously invisible to Argo CD; keeps
  network-secrets.yaml scoped to *-sealed.yaml only.

Fixes:
- homeassistant.yaml: destination.namespace was "homeassistant" (empty,
  unused) while the actual resources are hardcoded to "default" -- corrected,
  dropped CreateNamespace=true. The old empty namespace isn't auto-deleted
  (prune: false); safe to remove by hand if desired.
- gitea-backup.yaml: added the missing Namespace object (nothing created
  "gitea-backup" before); replaced a cluster-wide ClusterRole/ClusterRoleBinding
  granting pods/exec everywhere with a Role/RoleBinding scoped to the `gitea`
  namespace, matching what the backup script actually execs into. NOTE: this
  is already under active sync via gitea-secrets.yaml (selfHeal: true,
  prune: false) -- once pushed, the old ClusterRole/ClusterRoleBinding will
  need manual `kubectl delete` since Argo CD won't prune them.
- Added sync-wave "-2" to cert-manager/sealed-secrets Applications so their
  CRDs land before consumers (matches the existing -1/0 wave pattern).
- Normalized targetRevision HEAD -> main on home-services/otel-collector/tempo.
- Normalized sync policy per your decision: home-services/otel-collector/tempo
  prune true -> false; pihole/pihole-debian selfHeal false -> true (repo-wide
  consistency, per your call on finding #18).

Verified: kubeconform valid across all manifests + Argo CD Application objects.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-23 18:20:54 +09:00
e6550d0e39 fix: rotate Gitea DB password and Dashy API key off plaintext, fix internal CA issuerRef
Stage 1 of REFACTOR_PLAN.md. values/gitea.yaml and config/dashy/conf.yaml now
reference secrets injected at apply-time (gitea-postgres-secret.sh, .env) instead
of hardcoding a live DB password and weather API key in git. Both values must be
treated as compromised and rotated by the operator (see .env.example).

Also fixes authentik-ingress.yaml and traefik-dashboard-ingress.yaml, which
pointed at the internal-ca root ClusterIssuer instead of internal-ca-issuer,
the chained issuer every other internal Certificate uses -- causing untrusted-cert
warnings on the SSO login and Traefik dashboard.

Extends .gitignore for *.retry, .vault_pass*, kubeconfig patterns, and editor
swap files.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-23 18:14:46 +09:00
0fc43fa163 gitea: revert postgresql to plaintext, remove postgresql sealed secret 2026-03-21 15:49:51 +09:00
b667757f5a removed gitea runner setting since runner are running as systemd 2026-03-21 15:17:57 +09:00
45eb496d13 argocd migration: A3 - sealed secrets, gitea, monitoring, loki apps 2026-03-21 14:47:11 +09:00
b47a48e306 Updated README and added deployment comment on files 2026-03-18 00:58:15 +09:00
26c4234dc6 Migrate gitea to gitea.nik4nao.com 2026-03-17 22:45:03 +09:00
83f46c9748 feat(gitea): add backup CronJob with RBAC and NFS support
feat(gitea): create PersistentVolume and PersistentVolumeClaim for Gitea

feat(gitea): add script to create Gitea runner registration token secret

feat(gitea): deploy Gitea Actions runner with Docker socket access

feat(media): deploy JDownloader with Ingress configuration

feat(media): set up Jellyfin media server with NFS and Ingress

feat(media): configure qBittorrent deployment with Ingress

feat(monitoring): add Grafana Loki datasource ConfigMap

feat(monitoring): create Grafana admin credentials secret

feat(monitoring): define PersistentVolumes for monitoring stack

feat(network): implement DDNS CronJob for Porkbun DNS updates

feat(network): create secret for Porkbun DDNS API credentials

feat(network): set up Glances service and Ingress for Debian node

fix(network): patch Pi-hole DNS services with external IPs

feat(network): configure Traefik dashboard Ingress with Authentik auth

feat(network): set up Watch Party service and Ingress for Mac Mini

refactor(values): update Helm values files for various services
2026-03-12 21:56:32 +09:00