9.3 KiB
9.3 KiB
External Integrations
Analysis Date: 2026-02-23
APIs & External Services
Cloudflare:
- DNS management (public domain
viktorbarzin.me) - Tunnel for public HTTPS access
- Account ID:
cloudflare_account_idin tfvars - SDK/Client:
cloudflare/cloudflareTerraform provider v4.52.5 - Auth: API token stored in
cloudflare_api_key, email incloudflare_email, zone ID incloudflare_zone_id, tunnel ID incloudflare_tunnel_id - Implementation:
stacks/platform/modules/cloudflared/deploys Cloudflare tunnel daemon
GitHub:
- Git repository hosting and CI/CD webhook source
- Webhook endpoint:
https://webhook.viktorbarzin.me/(handled bystacks/webhook_handler/) - Auth: Git token in
webhook_handler_git_token(terraform.tfvars) - User:
webhook_handler_git_user(terraform.tfvars) - SSH key:
webhook_handler_ssh_keyfor Git operations (secret in K8s)
Facebook Messenger:
- Chatbot integration via webhook
- Webhook endpoint:
https://webhook.viktorbarzin.me/(receives webhook_handler_fb_*) - Auth tokens:
webhook_handler_fb_verify_token,webhook_handler_fb_page_token,webhook_handler_fb_app_secret(all in tfvars)
Slack:
- Alert routing and notifications
- Webhook URL:
alertmanager_slack_api_url(terraform.tfvars) - Integration: Alertmanager alerts from
stacks/platform/modules/monitoring/sent to Slack - CrowdSec integration: Security events to Slack via
stacks/platform/modules/crowdsec/
Hetrix Tools:
- Uptime monitoring service
- Status page redirects:
https://hetrixtools.com/r/38981b548b5d38b052aca8d01285a3f3/andhttps://hetrixtools.com/r/2ba9d7a5e017794db0fd91f0115a8b3b/ - Implementation: Traefik middleware redirect in
stacks/platform/modules/monitoring/main.tf
Tiny Tuya:
- Smart device control via tuya-bridge
- Auth:
tiny_tuya_service_secret(terraform.tfvars)
Mailgun:
- SMTP relay for outgoing mail (primary relay host)
- Relay:
[smtp.eu.mailgun.org]:587(Postfix DEFAULT_RELAY_HOST) - Auth: SASL credentials in
sasl_passwd(mailserver config) - Alternative: SendGrid (commented out, previously used)
Home Assistant:
- Home automation integration
- API token:
haos_api_token(terraform.tfvars) - Access:
https://ha-london.viktorbarzin.me,https://ha-sofia.viktorbarzin.me
Proxmox:
- Virtualization platform for VM provisioning
- Host:
192.168.1.127:8006(proxmox_pm_api_url) - Auth: API token ID
terraform-prov@pve!terrform-prov, secret in tfvars - Provider:
telmate/proxmoxv3.0.2-rc07 - Access: IDRAC credentials for physical server monitoring (
idrac_host,idrac_username,idrac_password)
Data Storage
Databases:
-
MySQL 9.2.0
- Connection:
mysql.dbaas.svc.cluster.local:3306(K8s internal) - Client: Direct port access (no ORM in core infrastructure)
- Root password:
dbaas_root_password(tfvars) - Storage: NFS PV at
/mnt/main/mysql
- Connection:
-
PostgreSQL 16.4-bullseye (with PostGIS + PGVector)
- Connection:
postgresql.dbaas:5432(K8s internal) - Connection via PgBouncer:
pgbouncer.authentik:6432(Authentik only) - Root password:
dbaas_postgresql_root_password(tfvars) - Root password for pgbouncer:
pgbouncer_root_password(tfvars) - Admin UI: PgAdmin at
pma.viktorbarzin.me - PgAdmin password:
dbaas_pgadmin_password(tfvars) - Storage: NFS PV at
/mnt/main/postgresql
- Connection:
File Storage:
- NFS (Primary)
- Host:
10.0.10.15(TrueNAS) - Mount path:
/mnt/main/ - Subdirectories: per-service (e.g.,
/mnt/main/immich/,/mnt/main/affine/,/mnt/main/mailserver/, etc.) - Configuration:
secrets/nfs_directories.txt(git-crypt encrypted) - Export script:
secrets/nfs_exports.sh(updates TrueNAS exports)
- Host:
Caching:
- Redis/redis-stack:latest
- Connection:
redis.redis.svc.cluster.local(K8s internal, no explicit port in code) - Databases: DB 2 (Gramps Web broker), DB 3 (Gramps Web rate limiting)
- Storage: Persistent volume for data durability
- Implementation:
stacks/platform/modules/redis/main.tf
- Connection:
Authentication & Identity
Auth Provider:
- Authentik (self-hosted OIDC/OAuth2 identity provider)
- URL:
https://authentik.viktorbarzin.me - API:
/api/v3/endpoint - Token:
authentik_api_token(terraform.tfvars) - Database: PostgreSQL via
postgresql.dbaas:5432(also PgBouncer atpgbouncer.authentik:6432) - Secret key:
authentik_secret_key(terraform.tfvars) - Postgres password:
authentik_postgres_password(terraform.tfvars) - K8s OIDC: Issuer
https://authentik.viktorbarzin.me/application/o/kubernetes/, clientkubernetes(public) - Implementation:
stacks/platform/modules/authentik/main.tf+ Helm chart - Traefik integration: Forward auth via protected = true in ingress_factory
- URL:
RBAC:
- Kubernetes API auth via Authentik OIDC
- SSH keys:
ssh_private_key(terraform.tfvars) - Implementation:
stacks/platform/modules/rbac/+stacks/platform/modules/k8s-portal/
Monitoring & Observability
Error Tracking:
- None detected - alerts routed to Slack instead
Metrics:
- Prometheus - Time series database
- Scrape endpoints: cluster nodes, services, Proxmox IDRAC, Tuya devices, Home Assistant
- Implementation:
stacks/platform/modules/monitoring/ - Health check: CronJob monitors prometheus-server pod and alerts to
https://webhook.viktorbarzin.me/fb/message-viktorif down
Logs:
- Loki 3.6.5 (single binary) + Alloy v1.13.0 (DaemonSet collector)
- Retention: 7 days
- Storage: NFS PV at
/mnt/main/loki/loki(15Gi), WAL on tmpfs (2Gi) - Alerting: HighErrorRate, PodCrashLoopBackOff, OOMKilled (ConfigMap
loki-alert-rules)
Visualization:
- Grafana
- Database: PostgreSQL via dbaas
- Admin password:
grafana_admin_password(tfvars) - DB password:
grafana_db_password(tfvars)
Status Pages:
- Hetrix Tools (external uptime monitoring)
- Uptime Kuma (self-hosted,
stacks/platform/modules/uptime-kuma/)
CI/CD & Deployment
Hosting:
- Proxmox 8.x (hypervisor)
- Kubernetes 1.34.2 (application platform)
- Cloudflare Tunnel (public ingress)
CI Pipeline:
- Woodpecker CI (self-hosted,
stacks/woodpecker/)- Hosted at:
https://ci.viktorbarzin.me - Config:
.woodpecker/in repo root - Triggers: Git push, scheduled jobs
- Applies platform stack automatically on merge to master
- Hosted at:
GitOps:
- Webhook-handler service: receives GitHub webhooks, triggers deployments
- Endpoint:
https://webhook.viktorbarzin.me/ - Auth: Secret token
webhook_handler_secret(tfvars) - Can update K8s deployments via RBAC
- Implementation:
stacks/webhook_handler/main.tf, imageviktorbarzin/webhook-handler:latest
- Endpoint:
Environment Configuration
Required env vars (terraform.tfvars - git-crypt encrypted):
cloudflare_api_key,cloudflare_email,cloudflare_zone_id,cloudflare_tunnel_id,cloudflare_tunnel_tokendbaas_root_password,dbaas_postgresql_root_password,dbaas_pgadmin_passwordauthentik_secret_key,authentik_postgres_password,authentik_api_tokenproxmox_pm_api_url,proxmox_pm_api_token_id,proxmox_pm_api_token_secretalertmanager_slack_api_url,alertmanager_account_passwordwebhook_handler_secret,webhook_handler_fb_verify_token,webhook_handler_fb_page_token,webhook_handler_fb_app_secret,webhook_handler_git_token,webhook_handler_git_user,webhook_handler_ssh_keyvaultwarden_smtp_password,mailserver_accounts,postfix_account_aliases,sasl_passwdcrowdsec_enroll_key,crowdsec_db_password,crowdsec_dash_api_key,crowdsec_dash_machine_id,crowdsec_dash_machine_passwordheadscale_config,headscale_aclmonitoring_idrac_username,monitoring_idrac_password,tiny_tuya_service_secret,haos_api_token,pve_password,grafana_admin_password,grafana_db_passwordk8s_users(map of SSH keys for K8s RBAC)
Secrets location:
- Primary:
terraform.tfvars(git-crypt encrypted at rest, decrypted duringterragrunt apply) - K8s Secrets: Created by Terraform from tfvars into namespaces (see
stacks/platform/modules/*/main.tf) - TLS certificates:
secrets/directory (symlinked into stacks assecrets/→../../secrets)
Webhooks & Callbacks
Incoming (Webhook endpoints):
- GitHub webhooks:
https://webhook.viktorbarzin.me/(deployment triggers) - Facebook Messenger webhooks:
https://webhook.viktorbarzin.me/(chatbot messages) - Health alerts: CronJob sends to
https://webhook.viktorbarzin.me/fb/message-viktorif Prometheus is down
Outgoing:
- Alertmanager → Slack webhook:
alertmanager_slack_api_url - CrowdSec → Slack webhook: same as alertmanager
- Hetrix Tools status pages: redirect middleware instead of direct integration
Integration Patterns
Terraform Secrets Injection:
- Template pattern:
templatefile("${path.module}/values.yaml", { var1 = var.value1, ... }) - Direct env injection: K8s ConfigMap/Secret created from tfvars variables
- Example:
stacks/platform/modules/crowdsec/main.tfrenders Helm values with interpolated secrets
Internal Service Discovery:
- DNS: Services accessible via
<name>.<namespace>.svc.cluster.local - Examples:
mysql.dbaas.svc.cluster.local,redis.redis.svc.cluster.local,postgresql.dbaas.svc.cluster.local
External Service Access:
- Cloudflare Tunnel: Provides public HTTPS for services (no direct internet access needed)
- Traefik Ingress: Routes external traffic to internal K8s services
- Technitium (internal DNS) for
.landomain resolution
Integration audit: 2026-02-23