Volver a proyectosEn Producción

Infraestructura Pesoz

Homelab self-hosted en producción 24/7 sobre NAS Synology. ~30 servicios en Docker tras un único punto de entrada HTTPS (Caddy), con VPN WireGuard, WAF, GitOps/CI-CD, observabilidad y backups automatizados.

DockerCaddyWireGuardCI/CDObservabilidad
Infraestructura Pesoz

Pesoz es mi laboratorio de sistemas en producción real: un servidor doméstico que aloja una treintena de servicios contenedorizados, funcionando 24/7 y accesibles de forma segura desde Internet. Es donde practico DevOps de verdad — no en diapositivas, sino con uptime, backups y post-mortems.

Plataforma

  • Hardware: NAS Synology (CPU Intel de bajo consumo, iGPU para transcodificación por hardware, ~10 GB de RAM, almacenamiento en varios volúmenes con RAID).
  • Orquestación: Docker (Container Manager + Portainer), un docker-compose por servicio. Gestión de recursos consciente: los servicios pesados arrancan bajo demanda para respetar el presupuesto de memoria.
  • Sistema: Linux (DSM), acceso de administración por SSH con clave.

Red y acceso

  • Entrada única HTTPS: todo el tráfico externo entra por un solo puerto y lo atiende Caddy, que hace de reverse proxy con TLS automático (Let’s Encrypt) para cada servicio.
  • DNS + DDNS: dominios gestionados en Cloudflare; un servicio de DDNS mantiene el registro actualizado frente a la IP pública dinámica.
  • DNS local: AdGuard Home resuelve y filtra en la red interna.
  • VPN: WireGuard para acceso remoto a los servicios internos sin exponerlos a Internet.

Modelo de seguridad

El proxy distingue tres niveles de exposición mediante snippets reutilizables:

  • Públicos: accesibles desde Internet, con cabeceras de seguridad (HSTS, X-Frame-Options, X-Content-Type-Options, Referrer-Policy, Permissions-Policy) y compresión.
  • Internos: un snippet internal_only responde 403 a todo lo que no venga de la LAN, la VPN o localhost.
  • Infra: servicios sin proxy, solo alcanzables dentro de su red Docker.

Además: un WAF (CrowdSec) sobre los sitios públicos, bloqueo de rutas sensibles y sondeos de frameworks que no se usan, endurecimiento por contenedor (no-new-privileges, cap_drop: ALL, límites de memoria, healthchecks) y gestión de secretos por .env fuera del control de versiones.

Datos y estado

  • PostgreSQL y Redis como bases de datos y caché compartidas.
  • Qdrant / pgvector para búsqueda vectorial (RAG de proyectos con IA).
  • Backups automatizados (programados) con pruebas de restauración documentadas en un runbook.

Entrega e integración (GitOps)

  • Forgejo autoalojado como forge Git con CI/CD: el despliegue de los servicios se versiona y automatiza (infraestructura como código).
  • n8n para automatizaciones y pasarelas hacia APIs externas.
  • Vigilancia de nuevas versiones de imágenes y notificaciones de actualización.

Observabilidad

Stack Prometheus + Grafana + Loki + Tempo (métricas, logs y trazas) de encendido bajo demanda para no gastar memoria en reposo, más monitorización de disponibilidad (uptime) y alertas.

Qué demuestra

Este homelab es la prueba de un perfil híbrido dev + sistemas: aquí no solo escribo el código, también administro la red, el TLS, las bases de datos, la seguridad perimetral y la recuperación ante fallos donde ese código corre. Es la misma infraestructura que sirve este portfolio.

Pesoz is my systems lab in real production: a home server hosting around thirty containerized services, running 24/7 and securely accessible from the Internet. It's where I practice real DevOps — not on slides, but with uptime, backups and post-mortems.

Platform

  • Hardware: Synology NAS (low-power Intel CPU, iGPU for hardware transcoding, ~10 GB RAM, storage across several RAID volumes).
  • Orchestration: Docker (Container Manager + Portainer), one docker-compose per service. Resource-aware: heavy services start on demand to respect the memory budget.
  • System: Linux (DSM), key-based SSH admin access.

Network & access

  • Single HTTPS entry point: all external traffic comes through one port served by Caddy, acting as a reverse proxy with automatic TLS (Let's Encrypt) for every service.
  • DNS + DDNS: domains managed on Cloudflare; a DDNS service keeps the record updated against the dynamic public IP.
  • Local DNS: AdGuard Home resolves and filters on the internal network.
  • VPN: WireGuard for remote access to internal services without exposing them to the Internet.

Security model

The proxy separates three exposure levels via reusable snippets: Public (Internet-facing, with security headers — HSTS, X-Frame-Options, X-Content-Type-Options, Referrer-Policy, Permissions-Policy — and compression), Internal (an internal_only snippet returns 403 to anything not from the LAN, VPN or localhost) and Infra (no proxy, reachable only within its Docker network).

On top of that: a WAF (CrowdSec) over public sites, blocking of sensitive paths and probes for frameworks that aren't used, per-container hardening (no-new-privileges, cap_drop: ALL, memory limits, healthchecks) and secret management via .env kept out of version control.

Data & state

  • PostgreSQL and Redis as shared databases and cache.
  • Qdrant / pgvector for vector search (RAG for AI projects).
  • Automated backups (scheduled) with restore tests documented in a runbook.

Delivery & integration (GitOps)

  • Forgejo self-hosted as a Git forge with CI/CD: service deployment is versioned and automated (infrastructure as code).
  • n8n for automations and gateways to external APIs.
  • Watching for new image versions and update notifications.

Observability

A Prometheus + Grafana + Loki + Tempo stack (metrics, logs and traces), started on demand to avoid spending memory at rest, plus uptime monitoring and alerts.

What it proves

This homelab is proof of a hybrid dev + systems profile: here I don't just write the code, I also run the network, TLS, databases, perimeter security and failure recovery where that code runs. It's the very same infrastructure that serves this portfolio.