From 4642522fd53e5e9fea624da00198c560caf8a648 Mon Sep 17 00:00:00 2001 From: Viktor Barzin Date: Sun, 18 Jan 2026 14:05:01 +0000 Subject: [PATCH 1/3] update resume to be a bit more working; still not workign but closer...[ci skip] --- main.tf | 6 +- modules/kubernetes/main.tf | 2 + modules/kubernetes/resume/main.tf | 89 +++++++++++++++++++++++------- terraform.tfvars | Bin 45532 -> 45586 bytes 4 files changed, 76 insertions(+), 21 deletions(-) diff --git a/main.tf b/main.tf index 0f826048..509fb6f9 100644 --- a/main.tf +++ b/main.tf @@ -77,6 +77,7 @@ variable "crowdsec_dash_machine_id" { type = string } variable "crowdsec_dash_machine_password" { type = string } variable "vaultwarden_smtp_password" {} variable "resume_database_url" {} +variable "resume_database_password" {} variable "resume_redis_url" {} variable "frigate_valchedrym_camera_credentials" { default = "" } variable "paperless_db_password" {} @@ -485,8 +486,9 @@ module "kubernetes_cluster" { vaultwarden_smtp_password = var.vaultwarden_smtp_password - resume_redis_url = var.resume_redis_url - resume_database_url = var.resume_database_url + resume_redis_url = var.resume_redis_url + resume_database_password = var.resume_database_password + resume_database_url = var.resume_database_url frigate_valchedrym_camera_credentials = var.frigate_valchedrym_camera_credentials diff --git a/modules/kubernetes/main.tf b/modules/kubernetes/main.tf index 1dcbd6a6..121276b4 100644 --- a/modules/kubernetes/main.tf +++ b/modules/kubernetes/main.tf @@ -61,6 +61,7 @@ variable "crowdsec_dash_machine_id" { type = string } variable "crowdsec_dash_machine_password" { type = string } variable "vaultwarden_smtp_password" {} variable "resume_database_url" {} +variable "resume_database_password" {} variable "resume_redis_url" {} variable "frigate_valchedrym_camera_credentials" { default = "" } variable "paperless_db_password" {} @@ -575,6 +576,7 @@ module "crowdsec" { # tls_secret_name = var.tls_secret_name # redis_url = var.resume_redis_url # database_url = var.resume_database_url +# db_password = var.resume_database_password # } module "uptime-kuma" { diff --git a/modules/kubernetes/resume/main.tf b/modules/kubernetes/resume/main.tf index f4f6cba1..cf3fd0ef 100644 --- a/modules/kubernetes/resume/main.tf +++ b/modules/kubernetes/resume/main.tf @@ -1,6 +1,8 @@ -variable "tls_secret_name" {} -variable "database_url" {} -variable "redis_url" {} +variable "tls_secret_name" { type = string } +variable "tier" { type = string } +variable "database_url" { type = string } +variable "redis_url" { type = string } +variable "db_password" { type = string } module "tls_secret" { source = "../setup_tls_secret" @@ -14,12 +16,18 @@ resource "kubernetes_namespace" "resume" { } } +resource "random_string" "random" { + length = 32 + lower = true +} + resource "kubernetes_deployment" "resume" { metadata { name = "resume" namespace = kubernetes_namespace.resume.metadata[0].name labels = { - app = "resume" + app = "resume" + tier = var.tier } annotations = { "reloader.stakater.com/search" = "true" @@ -58,9 +66,34 @@ resource "kubernetes_deployment" "resume" { name = "PUBLIC_SERVER_URL" value = "https://resume.viktorbarzin.me" } + + env { + name = "POSTGRES_HOST" + value = "postgresql.dbaas.svc.cluster.local" + } + env { + name = "POSTGRES_DB" + value = "resume" + } + env { + name = "POSTGRES_USER" + value = "resume" + } + env { + name = "POSTGRES_PASSWORD" + value = var.db_password + } env { name = "JWT_SECRET" - value = "kek" + value = random_string.random.result + } + env { + name = "AUTH_SECRET" + value = random_string.random.result + } + env { + name = "SECRET_KEY" + value = random_string.random.result } env { name = "JWT_EXPIRY_TIME" @@ -70,28 +103,46 @@ resource "kubernetes_deployment" "resume" { name = "STORAGE_ENDPOINT" value = "https://resume.viktorbarzin.me" } - env { - name = "STORAGE_PORT" - value = 443 - } // There's a tone of these... I give up... // check https://github.com/AmruthPillai/Reactive-Resume/blob/main/.env.example port { container_port = 3000 } - # volume_mount { - # name = "config" - # mount_path = "/app/public/" - # } + port { + container_port = 3100 + } } - # volume { - # name = "config" - # config_map { - # name = "config" - # } - # } } } } } + + +resource "kubernetes_service" "resume" { + metadata { + name = "resume" + namespace = kubernetes_namespace.resume.metadata[0].name + labels = { + "app" = "resume" + } + } + + spec { + selector = { + app = "resume" + } + port { + name = "http" + port = 80 + target_port = 3000 + } + } +} + +module "ingress" { + source = "../ingress_factory" + namespace = kubernetes_namespace.resume.metadata[0].name + name = "resume" + tls_secret_name = var.tls_secret_name +} diff --git a/terraform.tfvars b/terraform.tfvars index ffaa6945d76bc0457537a68ed8e36eba075151f1..573346fdeabfb5cdc323e37fbacf5cb30967b7ca 100644 GIT binary patch literal 45586 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

j#9Ak3(B5N4cP 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 CctzF# literal 45532 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 Date: Sun, 18 Jan 2026 14:05:24 +0000 Subject: [PATCH 2/3] add boilerplate for adding basic auth as fallback when authentik is down [ci skip] --- modules/kubernetes/reverse_proxy/factory/main.tf | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/modules/kubernetes/reverse_proxy/factory/main.tf b/modules/kubernetes/reverse_proxy/factory/main.tf index a80407f5..5e758246 100644 --- a/modules/kubernetes/reverse_proxy/factory/main.tf +++ b/modules/kubernetes/reverse_proxy/factory/main.tf @@ -85,6 +85,16 @@ resource "kubernetes_ingress_v1" "proxied-ingress" { "nginx.ingress.kubernetes.io/auth-response-headers" : var.protected ? "Set-Cookie,X-authentik-username,X-authentik-groups,X-authentik-email,X-authentik-name,X-authentik-uid" : null "nginx.ingress.kubernetes.io/auth-snippet" : var.protected ? "proxy_set_header X-Forwarded-Host $http_host;" : null + # # 2. Local Basic Auth Config + # nginx.ingress.kubernetes.io/auth-type: basic + # nginx.ingress.kubernetes.io/auth-secret: emergency-basic-auth + # nginx.ingress.kubernetes.io/auth-realm: "Authentik Down - Use Emergency Login" + + # # 3. The Fallback Magic + # nginx.ingress.kubernetes.io/configuration-snippet: | + # satisfy any; + # allow all; + "nginx.ingress.kubernetes.io/proxy-body-size" : var.max_body_size "nginx.ingress.kubernetes.io/use-proxy-protocol" : var.use_proxy_protocol "nginx.ingress.kubernetes.io/proxy-connect-timeout" : var.proxy_timeout From c76e84cd7741dff25ccfd47c06149ddbdf99a45c Mon Sep 17 00:00:00 2001 From: Viktor Barzin Date: Sun, 18 Jan 2026 15:40:43 +0000 Subject: [PATCH 3/3] add claude files [ci skip] --- .claude/CLAUDE.md | 22 +++++++++++++++++----- .claude/commands/add-service.md | 16 ++++++++++++++++ .claude/commands/kubectl.md | 16 ++++++++++++++++ .claude/commands/list-services.md | 11 +++++++++++ .claude/commands/service-version.md | 10 ++++++++++ .claude/commands/tf-apply.md | 13 +++++++++++++ .claude/commands/tf-plan.md | 13 +++++++++++++ .claude/commands/update-knowledge.md | 12 ++++++++++++ .claude/settings.json | 12 ++++++++++++ 9 files changed, 120 insertions(+), 5 deletions(-) create mode 100755 .claude/commands/add-service.md create mode 100755 .claude/commands/kubectl.md create mode 100755 .claude/commands/list-services.md create mode 100755 .claude/commands/service-version.md create mode 100755 .claude/commands/tf-apply.md create mode 100755 .claude/commands/tf-plan.md create mode 100755 .claude/commands/update-knowledge.md create mode 100755 .claude/settings.json diff --git a/.claude/CLAUDE.md b/.claude/CLAUDE.md index ecc6949d..0978217f 100755 --- a/.claude/CLAUDE.md +++ b/.claude/CLAUDE.md @@ -6,12 +6,23 @@ - **Use `/update-knowledge` command**: Or edit this file directly to add learnings ## Execution Environment (CRITICAL) -- **File operations** (Read, Edit, Write, Glob, Grep): Run locally at `/Volumes/wizard/code/infra` -- **Git commands**: Run locally (git status, git log, git diff, etc.) -- **ALL other commands**: Use the remote executor relay (kubectl, terraform, helm, python, etc.) +- **Prefer running commands directly first** - only use remote executor as fallback if local execution fails -### Remote Command Execution (ALWAYS USE THIS) -For any command that is not file editing or git, use the file-based relay: +### Commands that work LOCALLY (macOS) +- **File operations**: Read, Edit, Write, Glob, Grep tools +- **Git commands**: git status, git log, git diff, git add, git commit, git reset, etc. +- **Basic shell**: ls, cat, head, tail, find, grep, etc. + +### Commands that REQUIRE REMOTE EXECUTOR +- **terraform**: apply, plan, init, state - needs cluster access +- **kubectl**: all k8s commands - needs cluster access +- **helm**: chart operations - needs cluster access +- **docker**: container operations on remote hosts +- **ssh**: connections to infrastructure nodes +- **Any command interacting with**: Proxmox, Kubernetes cluster, NFS server, other infrastructure + +### Remote Command Execution (FALLBACK) +For commands that fail locally, use the file-based relay: **To execute a remote command:** ```bash @@ -151,6 +162,7 @@ Edge/Aux (tier 3-4): - Use `GIT_OPTIONAL_LOCKS=0` prefix if git hangs - **Local SSH is blocked** - use remote executor to push: `echo "git push origin master" > .claude/cmd_input.txt` - Always commit only specific files you changed, not everything +- **ALWAYS ask user before pushing to remote** - never push without explicit confirmation ## Prometheus Alerts - Alert rules are in `modules/kubernetes/monitoring/prometheus_chart_values.tpl` diff --git a/.claude/commands/add-service.md b/.claude/commands/add-service.md new file mode 100755 index 00000000..482a2a4d --- /dev/null +++ b/.claude/commands/add-service.md @@ -0,0 +1,16 @@ +# Add New Service + +Help create a new Kubernetes service module. + +Service name: $ARGUMENTS + +Steps: +1. Create directory at modules/kubernetes// +2. Create main.tf with: + - Namespace resource + - Deployment with appropriate container + - Service resource + - Ingress with TLS and standard annotations +3. Use existing patterns from similar services +4. Add module reference in main.tf +5. Update .claude/CLAUDE.md with new service version diff --git a/.claude/commands/kubectl.md b/.claude/commands/kubectl.md new file mode 100755 index 00000000..344ec707 --- /dev/null +++ b/.claude/commands/kubectl.md @@ -0,0 +1,16 @@ +# Kubectl Command + +Run kubectl commands on the cluster via the remote executor. + +Use the remote executor relay: +```bash +echo "kubectl $ARGUMENTS" > /System/Volumes/Data/mnt/code/infra/.claude/cmd_input.txt +sleep 2 && cat /System/Volumes/Data/mnt/code/infra/.claude/cmd_status.txt +cat /System/Volumes/Data/mnt/code/infra/.claude/cmd_output.txt +``` + +Examples: +- `/kubectl get pods -A` - List all pods +- `/kubectl get pods -n immich` - List pods in immich namespace +- `/kubectl logs -n immich deploy/immich-server` - View logs +- `/kubectl describe pod -n monitoring ` - Describe a pod diff --git a/.claude/commands/list-services.md b/.claude/commands/list-services.md new file mode 100755 index 00000000..6dd54ecd --- /dev/null +++ b/.claude/commands/list-services.md @@ -0,0 +1,11 @@ +# List All Services + +List all Kubernetes services deployed in this infrastructure. + +```bash +ls -1 /System/Volumes/Data/mnt/code/infra/modules/kubernetes/ +``` + +Provide a summary of the services, grouped by category if possible (media, monitoring, productivity, etc.). + +Note: This command runs locally since it only reads the filesystem. diff --git a/.claude/commands/service-version.md b/.claude/commands/service-version.md new file mode 100755 index 00000000..861d750a --- /dev/null +++ b/.claude/commands/service-version.md @@ -0,0 +1,10 @@ +# Check Service Version + +Find the version of a specific service deployed in this infrastructure. + +Search for the service name in modules/kubernetes/ and extract: +1. The image version/tag being used +2. Any version variables defined +3. The Helm chart version if applicable + +Service to check: $ARGUMENTS diff --git a/.claude/commands/tf-apply.md b/.claude/commands/tf-apply.md new file mode 100755 index 00000000..40691f2f --- /dev/null +++ b/.claude/commands/tf-apply.md @@ -0,0 +1,13 @@ +# Terraform Apply + +Run terraform apply to deploy infrastructure changes via the remote executor. + +Use the remote executor relay: +```bash +echo "terraform apply -target=module.kubernetes_cluster.module. -auto-approve" > /System/Volumes/Data/mnt/code/infra/.claude/cmd_input.txt +sleep 2 && cat /System/Volumes/Data/mnt/code/infra/.claude/cmd_status.txt +# Wait for done:N status, then read output +cat /System/Volumes/Data/mnt/code/infra/.claude/cmd_output.txt +``` + +ALWAYS use -target to speed up execution. Monitor the output and report any errors or successful completions. diff --git a/.claude/commands/tf-plan.md b/.claude/commands/tf-plan.md new file mode 100755 index 00000000..d0d35a98 --- /dev/null +++ b/.claude/commands/tf-plan.md @@ -0,0 +1,13 @@ +# Terraform Plan + +Run terraform plan to preview infrastructure changes via the remote executor. + +Use the remote executor relay: +```bash +echo "terraform plan -target=module.kubernetes_cluster.module." > /System/Volumes/Data/mnt/code/infra/.claude/cmd_input.txt +sleep 2 && cat /System/Volumes/Data/mnt/code/infra/.claude/cmd_status.txt +# Wait for done:N status, then read output +cat /System/Volumes/Data/mnt/code/infra/.claude/cmd_output.txt +``` + +ALWAYS use -target to speed up execution. Summarize the planned changes, highlighting any resources being destroyed or recreated. diff --git a/.claude/commands/update-knowledge.md b/.claude/commands/update-knowledge.md new file mode 100755 index 00000000..dd2345dc --- /dev/null +++ b/.claude/commands/update-knowledge.md @@ -0,0 +1,12 @@ +# Update Knowledge Base + +Update the .claude/CLAUDE.md knowledge file with new learnings. + +Add or update information based on recent discoveries about: +- Service versions +- Infrastructure patterns +- Important configurations +- Useful commands +- Troubleshooting notes + +Context to add: $ARGUMENTS diff --git a/.claude/settings.json b/.claude/settings.json new file mode 100755 index 00000000..cf2d6fdd --- /dev/null +++ b/.claude/settings.json @@ -0,0 +1,12 @@ +{ + "project": { + "name": "Home Infrastructure", + "type": "terraform", + "description": "Kubernetes cluster on Proxmox with self-hosted services" + }, + "permissions": { + "allow": [ + "Bash(ssh:*)" + ] + } +}