49 Commits

Author SHA1 Message Date
85cc8494fa feat: add alert bridge service and related configurations
Some checks failed
validate / lint (push) Failing after 1s
2026-08-01 22:51:59 +09:00
df07062cd1 fix: restore nik4nao.home.arpa DNS entry -- wrongly removed as "orphaned"
Some checks failed
validate / lint (push) Failing after 1s
This points at nik-debian's raw IP (192.168.7.183) for a host-level SMB/Samba
share, not a Kubernetes Service. Stage 3 removed it based on "no Certificate/
Ingress/IngressRoute references it" -- the wrong test for a non-HTTP,
non-Kubernetes service that was never going to have one. Broke real SMB
access. Restored to both Pi-hole values files in their original position.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-24 12:18:00 +09:00
f006090fea fix: remove Immich entirely
Some checks failed
validate / lint (push) Failing after 1s
Not used enough to justify chasing the stale-NFS-handle issue on its
photos-art mount. Removes manifests/media/immich.yaml (Namespace, PVCs,
Deployments, Service, Certificate, IngressRoute), its secret script and
sealed secret, immich.home.arpa from both Pi-hole values files, its Dashy
dashboard tile, and all other repo references (READMEs, secrets-leak-scanner
scope, regen-sealed-secret example, .env.example).

Per explicit confirmation: this also means the live namespace's PVCs
(immich-library 50Gi, immich-postgres-data 20Gi, immich-ml-cache 10Gi, all
local-path with Delete reclaim policy) are intended to be deleted along with
it -- any photos actually uploaded to Immich's own library are gone once the
namespace is deleted, separately from the read-only NFS folders it browsed
(untouched either way, those live independently on nik-debian).

Git removal alone does not delete the live cluster resources -- the media
Application has prune: false. Manual `kubectl delete namespace immich` still
needed to actually free the namespace/PVCs/data.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-23 20:21:05 +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
57a78fd8e7 fix: remove orphaned DNS entry, sync Pi-hole DNS drift between primary/secondary
Stage 3 + 6 of REFACTOR_PLAN.md.

- Drop nik4nao.home.arpa from both Pi-hole values files: no Certificate,
  Ingress, or IngressRoute anywhere references it (confirmed via grep).
- Add the immich.home.arpa and gluetun.home.arpa entries that existed in
  values/pihole.yaml but were missing from values/pihole-debian.yaml --
  Pi-hole has no wildcard DNS here, so every hostname must be listed in both.

Both files' hostname lists now match exactly (aside from the differing
target IPs, which is expected for primary vs. secondary).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-23 18:14: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
c373b828d1 fix: remove Photoview references from configuration and documentation 2026-05-13 00:40:15 +09:00
3209a13ed6 feat: enhance Dashy configuration with new Downloads section and integrate gluetun API for VPN IP display
feat: update qBittorrent deployment to expose gluetun API on port 8000 and add TLS certificate for secure access
feat: add gluetun DNS entry to Pi-hole configuration for improved network management
2026-05-12 22:32:20 +09:00
1ceb8209bc feat: add Immich database credentials and deployment configuration 2026-05-01 19:43:09 +09:00
de67ba10c0 feat: add metric relabeling to drop high-cardinality metrics from kube-state-metrics 2026-04-10 19:09:54 +09:00
bacd56f420 fix: update email addresses for Let's Encrypt configuration in cert-manager and Traefik 2026-04-09 21:46:40 +09:00
dc8b485b51 Add rule to keep the IP address 2026-03-25 23:17:50 +09:00
8152679c67 Removed wrong setting 2026-03-25 23:05:34 +09:00
0dcb41f642 feat: enable Loki log volume 2026-03-25 22:41:11 +09:00
23246b1272 feat: enable Tempo metrics generator for Drilldown RED metrics 2026-03-25 22:37:11 +09:00
a31cf5f286 add explicit uid to Tempo datasource 2026-03-25 22:05:43 +09:00
d1dadd0e1d add httpMethod to Tempo datasource, remove deprecated search field 2026-03-25 22:02:40 +09:00
4f194ce720 move Tempo datasource to kube-prometheus-stack values, remove ConfigMap 2026-03-25 21:55:09 +09:00
c56ebca9dd correct otel-collector service FQDN in Traefik OTLP endpoint 2026-03-25 20:37:41 +09:00
ddad39b2ba rename otlp/tempo exporter to otlp_grpc/tempo (deprecation) 2026-03-25 20:25:30 +09:00
f3c0223040 fix: use otel-collector-contrib image for prometheusremotewrite exporter 2026-03-25 20:22:55 +09:00
c2113a0a5a fix: set image.repository for otel-collector chart 0.147.x 2026-03-25 20:21:20 +09:00
14f0e7c43c feat: add OTel Collector, Tempo, Traefik OTLP tracing 2026-03-25 20:17:47 +09:00
0fc43fa163 gitea: revert postgresql to plaintext, remove postgresql sealed secret 2026-03-21 15:49:51 +09:00
45eb496d13 argocd migration: A3 - sealed secrets, gitea, monitoring, loki apps 2026-03-21 14:47:11 +09:00
16804f526a argocd migration: added secrets for A3 migration 2026-03-21 14:35:54 +09:00
d82d467b2b Added Argocd for better gitops management 2026-03-21 13:50:28 +09:00
863e66577c Added homeassistant to the homelab 2026-03-18 23:45:30 +09:00
26c4234dc6 Migrate gitea to gitea.nik4nao.com 2026-03-17 22:45:03 +09:00
e49ea43596 Add Photoview and the corresponding address in Pihole 2026-03-17 21:52:48 +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
12f333d5e8 Update Gitea and Grafana configurations to enhance registration and authentication settings 2026-03-11 23:25:42 +09:00
3c50db2031 Add Authentik OAuth integration for Grafana and update Jellyfin configuration 2026-03-11 22:47:57 +09:00
b2af26ead8 Add Authentik Gitea secret and public ingress configuration, and update Gitea values for internal CA support 2026-03-11 22:31:10 +09:00
a7f7cd4095 Add Authentik configuration and related resources for improved authentication management 2026-03-11 00:02:00 +09:00
fb09e4198d Add monitoring setup with Grafana, Loki, and Prometheus configurations 2026-03-10 19:40:54 +09:00
a470dd4f60 Add CA Trust Installer configuration and web interface for certificate installation 2026-03-10 16:28:17 +09:00
306036cb8d Add pihole-debian Helm values and patch script for DNS services 2026-03-09 22:49:15 +09:00
03cdf9f355 Add Glances deployment and configuration for Debian and Kubernetes 2026-03-09 21:48:07 +09:00
4129089d09 Add K3s agent playbook and related configurations; include JDownloader and qBittorrent manifests 2026-03-06 19:49:18 +09:00
926543ba5c Add Jellyfin manifests and update Pi-hole DNS entries for Jellyfin 2026-03-06 19:20:11 +09:00
e849755d41 Add Dashy dashboard manifests and update Pi-hole DNS entries 2026-03-06 18:57:02 +09:00
dc86a961be Add cert-manager configurations and scripts for Porkbun and Let's Encrypt integration
- Create .env.example for API credentials
- Update .gitignore to include .env file
- Add cluster issuer configurations for internal CA and Let's Encrypt
- Implement porkbun-secret.sh for creating Kubernetes secrets
- Define Helm values for cert-manager, Gitea, and Pihole with TLS settings
2026-03-06 18:42:02 +09:00
208c768b2e Rename YAML file extensions from .yml to .yaml for consistency 2026-03-06 10:37:42 +09:00
feb31a52fb Renamed file extension from yml to yaml 2026-03-05 23:45:59 +09:00
5c1cf1d980 Add Pihole Helm values configuration for deployment 2026-03-05 20:33:18 +09:00
caff826162 Add Gitea Helm values and PersistentVolume manifest for deployment 2026-03-05 20:00:41 +09:00
7155d0c3a1 Refactor Traefik Helm values for compatibility and clarity 2026-03-05 19:10:47 +09:00
f33fdc4044 Add initial Ansible configuration and playbooks for homelab setup
- Created ansible.cfg for configuration settings
- Added inventory.yml for host definitions
- Implemented bootstrap playbook for Minisforum setup
- Developed setup playbook for K3s installation
- Defined common role with user and package management tasks
- Established K3s server role with configuration and installation tasks
- Included Traefik Helm values for ingress management
2026-03-05 18:55:41 +09:00