Commit Graph

68 Commits

Author SHA1 Message Date
Eduardo David Paredes Vara c484e502c2 feat(onetimesecret): añadir stack de compartición segura de secretos
OneTimeSecret para compartir contraseñas y datos sensibles mediante
enlaces de un solo uso, con integración OIDC a Authentik.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-25 05:49:44 +00:00
Eduardo David Paredes Vara 975554892a feat(litellm): añadir gateway de IA con proveedor Codex personalizado
Proxy LiteLLM que enruta peticiones a DeepSeek y a los modelos Codex
de OpenAI (gpt-5.5, gpt-5.4, gpt-5.3-codex, gpt-5.4-mini, gpt-5.2)
usando los tokens OAuth del CLI de Codex en lugar de la API estándar.

- codex_provider.py: proveedor CustomLLM que llama a
  chatgpt.com/backend-api/codex/responses con renovación automática
  de tokens JWT
- config.yaml: model_list con prefijo cx- para evitar interceptación
  por litellm.open_ai_chat_completion_models
- docker-compose.yml y stack.env: configuración del stack

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-25 05:49:34 +00:00
Eduardo David Paredes Vara 7b4ed3e05e feat(kasm): añadir stack de workspaces aislados en navegador
Kasm Workspaces para ejecutar aplicaciones de escritorio en contenedores
accesibles desde el navegador, protegido con Authentik SSO.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-25 05:49:12 +00:00
Eduardo David Paredes Vara 26898ac1fe feat(homepage): añadir stack de dashboard del homelab
Dashboard centralizado con widgets de estado de servicios, integración
con Docker para mostrar contenedores y acceso SSO vía Authentik.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-25 05:49:12 +00:00
Eduardo David Paredes Vara 49a4cfd510 feat(guacamole): añadir stack de escritorio remoto vía navegador
Apache Guacamole para acceso RDP/SSH/VNC desde el navegador, protegido
con Authentik SSO. Incluye script de inicialización de base de datos.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-25 05:49:05 +00:00
Eduardo David Paredes Vara 8b16744da8 feat(dozzle): añadir stack de visualización de logs de contenedores
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-25 05:49:04 +00:00
Eduardo David Paredes Vara 49a7e16da1 feat(crowdsec): añadir stack de detección de intrusiones con Grafana
- docker-compose.yml: CrowdSec + bouncer de Traefik + Postgres + Grafana
- setup.sh: configuración inicial de colecciones, bouncers y whitelist
- metrics-export.sh: exportación de métricas al endpoint de Prometheus
- traefik-crowdsec-bouncer.yml: config dinámica de Traefik para el bouncer
- stack.env: plantilla con API keys y configuración

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-25 05:48:58 +00:00
Eduardo David Paredes Vara 38587699f9 feat(cloudflared): añadir stack de Cloudflare Tunnel + gestión DNS
- docker-compose.yml: tunnel de Cloudflare para exponer servicios sin
  abrir puertos en el router
- add-domain.sh: script para añadir subdominios al tunnel y crear
  registros DNS en Cloudflare vía API
- stack.env: plantilla con tokens y configuración del tunnel

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-25 05:48:58 +00:00
Eduardo David Paredes Vara 6dd699fcfe feat(bookstack): añadir stack de wiki con integración Authentik SSO
Wiki basada en BookStack con autenticación delegada a Authentik via OIDC.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-25 05:48:47 +00:00
Eduardo David Paredes Vara 2ea6457b8a feat(beszel): añadir stack de monitorización de servidores
Stack ligero para monitorizar recursos del host y contenedores Docker.
Incluye agente local y servidor con interfaz web protegida por Authentik.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-25 05:48:47 +00:00
Eduardo David Paredes Vara 616b20f285 feat(backups): añadir stack de backups cifrados con Kopia + Cloudflare R2
- init-r2-repository.sh: inicializa repositorio Kopia en R2
- run-backup.sh: ejecuta backup de rutas definidas en backup-paths.txt
- pre-backup-dumps.sh: vuelca bases de datos (Postgres, MariaDB) antes del backup
- kopia-common.sh: funciones compartidas de autenticación y configuración
- restore-smoke-test.sh: test de restauración para verificar integridad
- backup-paths.txt / excludes.txt: rutas y exclusiones del backup
- systemd/: unidades kopia-server, kopia-docker-backup (service + timer)
- traefik-kopia.yml: exposición del servidor Kopia vía Traefik
- env.example: plantilla de variables (credenciales R2, contraseña repo)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-25 05:48:38 +00:00
Eduardo David Paredes Vara 6ba696ff2b fix(wireguard): actualizar stack VPN y documentación
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-25 05:48:28 +00:00
Eduardo David Paredes Vara 4644da06c4 feat(karakeep): añadir stack de archivo de enlaces con OCR e IA
- stack.env: plantilla con configuración de modelos de inferencia
  (text, embedding) y parámetros de OCR multilingüe (eng, spa)
- docker-compose.yml: ajustes del stack

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-25 05:48:28 +00:00
Eduardo David Paredes Vara c158569a04 fix(media-server): actualizar documentación del stack multimedia
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-25 05:48:28 +00:00
Eduardo David Paredes Vara e9f35d7154 fix(trilium, vikunja): actualizar stacks de notas y tareas
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-25 05:48:27 +00:00
Eduardo David Paredes Vara faaffc2a3b feat(memos): añadir proxy de reescritura de rutas para Authentik SSO
- proxy/server.js: proxy Node.js que reescribe la ruta del callback OAuth
  de Authentik (/auth/callback → /api/v1/auth/oauth/authentik/callback)
  resolviendo la incompatibilidad entre la URL que Authentik envía y la
  que espera Memos
- docker-compose.yml y stack.env: actualizados para incluir el proxy

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-25 05:48:15 +00:00
Eduardo David Paredes Vara 46d7a28210 feat(n8n-observability): añadir stack de observabilidad con agente IA
Stack de scripts y plantillas para generar reportes diarios del homelab
usando n8n como orquestador y un modelo de IA como redactor:

- scripts/server-summary.sh: métricas del sistema (CPU, RAM, disco)
- scripts/log-digest.sh: resumen de logs de Traefik y contenedores
- scripts/health-results.sh: estado de servicios y checks
- scripts/codex-reauth.sh: reautenticación OAuth del proveedor Codex
- templates/ai-daily-report-prompt.md: prompt para el informe diario
- workflows/workflow-design.md: diseño del workflow de n8n
- config/services.example.json: ejemplo de configuración de servicios

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-25 05:48:07 +00:00
Eduardo David Paredes Vara 6b641981dd fix(n8n): actualizar stack de automatización de workflows
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-25 05:48:07 +00:00
Eduardo David Paredes Vara 1db61640d2 fix(nextcloud, paperless): actualizar stacks de gestión documental
- Nextcloud: ajustes en docker-compose.yml y stack.env
- Paperless-ngx: ajustes en docker-compose.yml y stack.env
  (ambos stacks comparten integración via WebDAV para sincronizar bandeja)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-25 05:47:52 +00:00
Eduardo David Paredes Vara c1f7e90b58 fix(gitea): actualizar stack y documentación
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-25 05:47:39 +00:00
Eduardo David Paredes Vara 82d09276c6 fix(mail-relay): actualizar configuración del relay SMTP
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-25 05:47:39 +00:00
Eduardo David Paredes Vara 61134d7834 feat(authentik): añadir script de creación de aplicaciones OAuth
- create-auth-app.sh: script interactivo para crear providers y
  aplicaciones en Authentik vía API, automatizando la integración SSO
- docker-compose.yml y stack.env: ajustes del stack
- README.md: documentación actualizada

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-25 05:47:33 +00:00
Eduardo David Paredes Vara 174d282fd9 feat(adguard): añadir sincronización automática de certificados
- adguard-cert-sync.service / .timer: unidades systemd para renovar
  automáticamente el certificado TLS de AdGuard cuando Traefik lo renueva
- sync-adguard-cert.sh: script que copia cert desde /opt/traefik/certs
  y reinicia AdGuard vía API
- docker-compose.yml y stack.env: ajustes menores
- README.md: documentación actualizada con instrucciones de instalación

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-25 05:47:26 +00:00
Eduardo David Paredes Vara 97512178db feat(traefik): actualizar stack y añadir dashboard dinámico
- docker-compose.yml y stack.env: ajustes generales del stack
- traefik-dashboard.yml: nueva config dinámica para exponer el dashboard
  vía Traefik con autenticación Authentik
- README.md: documentación actualizada

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-25 05:47:19 +00:00
Eduardo David Paredes Vara 5e220591e7 chore: actualizar meta del repo y configuración base
- .gitignore: añadir reglas para .env, *.live.yaml, .codex, .vscode, certs
- README.md y COOLIFY-TEMPLATE.md: actualizados con nuevos stacks
- NUEVA-APP.md: guía para añadir nuevas apps al homelab
- PROMPT-SSO-ISSUE.md: contexto de debugging SSO/Authentik
- .github/copilot-instructions.md: instrucciones de arquitectura para Copilot
- docker-compose.yml raíz: ajustes al stack de Portainer

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-25 05:47:11 +00:00
Eduardo David Paredes Vara 5e69ad1024 wireguard torrent 2026-04-05 23:54:10 +00:00
root 6781b90b25 feat: add vikunja stack (Coolify-ready)
- pull_policy: always on vikunja service
- hardcoded bind mounts: /opt/vikunja/{postgres,files}
- port hardcoded in label: 3456 (Gotcha 6)
- removed Portainer Traefik router labels
- vikunja_internal: driver bridge (no fixed name)
- proxy: external: true

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-23 02:57:15 +00:00
root 43c80867c0 feat: add memos stack (Coolify-ready)
- pull_policy: always on memos service
- hardcoded bind mounts: /opt/memos/{postgres,data}
- port hardcoded in label: 5230 (Gotcha 6)
- removed Portainer Traefik router labels (Coolify manages routing)
- removed traefik.enable / traefik.docker.network
- memos_internal: driver bridge (not fixed name)
- proxy: external: true

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-23 02:52:18 +00:00
root 7dce4a06cb fix: hardcode Traefik port labels (Gotcha 6 - vars not expanded in labels)
Coolify does not expand ${VAR} in label values. All loadbalancer port
labels must use hardcoded values:
- trilium:   ${TRILIUM_HTTP_PORT}  → 8080
- adguard:   ${ADGUARD_HTTP_PORT}  → 80
- authentik: ${AUTHENTIK_HTTP_PORT} → 9000
- gitea:     ${GITEA_HTTP_PORT}    → 3000
- wireguard: ${WG_UI_PORT}         → 51821

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-23 02:44:58 +00:00
root d337f82d1c fix: hardcode OO domain in Traefik label; Coolify does not expand vars in labels
- nextcloud/docker-compose.yml: X-Forwarded-Host=onlyoffice.sherlockhomeless.net
  (was ${OO_DOMAIN} which Coolify leaves unexpanded → OnlyOffice loads assets
  from https://${oo_domain}/ and editor breaks entirely)
- nextcloud/stack.env: update placeholder domains to real ones
- COOLIFY-TEMPLATE.md: add Gotcha 6 about label variable expansion

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-23 02:27:38 +00:00
root 2c7b7eb356 docs: add gotcha 5 - all host data lives under /opt/<stack>/
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-23 02:10:59 +00:00
root 15341785b2 fix: adguard and authentik use /opt bind mounts (original Portainer paths)
Data was in /opt/adguard/{work,conf} and /opt/authentik/{postgres,redis}
all along. Previous commit used named volumes which would ignore this data.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-23 02:10:39 +00:00
root 786c55bc01 fix: replace variable bind mounts with hardcoded paths/named volumes
Coolify converts ${VAR}:/path bind mounts to named Docker volumes when
the variable is not resolved. Fixed per stack:

- adguard: -> named volumes (data already in Coolify-created volumes)
- authentik: -> named volumes (data already in Coolify-created volumes)
- gitea: -> /opt/gitea/{postgres,data,runner}
- mail-relay: -> /opt/mail-relay/{queue,opendkim,secrets/...}
- media-server: COMMON_PATH -> /opt/media (hardcoded)
- trilium: -> /opt/trilium/data
- wireguard: -> /opt/wg-easy + /lib/modules

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-23 02:09:08 +00:00
root 01699a132c docs: add operational gotchas to Coolify template
- Gotcha 1: dynamic config dir is /opt/traefik/dynamic, NOT /data/coolify/proxy/dynamic
- Gotcha 2: entrypoints are http/https (not web/websecure); coolify.yaml fix location
- Gotcha 3: env vars in bind mount paths become named volumes in Coolify
- Gotcha 4: SSH MaxSessions must be >= 10 for parallel deploy sessions

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-23 02:02:16 +00:00
root 57eb7248ec fix: n8n use hardcoded bind mounts to preserve Portainer data
- n8n app data: /opt/n8n/data → /home/node/.n8n
- postgres data: /opt/n8n/postgres → /var/lib/postgresql/data
  (was using ${N8N_DB_DATA_PATH} which Coolify converts to a named volume)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-23 01:54:07 +00:00
root eb6715ccc0 feat: migrate all stacks to Coolify (proxy network, clean labels, pull_policy)
- Remove traefik.enable, traefik.docker.network, traefik.http.routers.* from all services
- Keep traefik.http.services.<name>.loadbalancer.server.port labels
- Keep all middleware definitions (forwardauth, headers, redirects)
- Add pull_policy: always to main/frontend services
- Add proxy network + label to gitea and karakeep (previously missing)
- Add COOLIFY-TEMPLATE.md reference guide

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-23 01:51:55 +00:00
root c938c02742 fix: add proxy network to n8n so Coolify Traefik can reach it 2026-03-23 01:42:58 +00:00
root 8f55ddd1c8 refactor: replace dockerfile_inline with pull_policy: always 2026-03-23 01:38:02 +00:00
root 5191a4d211 fix: add Traefik port label 5678 to n8n service 2026-03-23 01:36:34 +00:00
root 0025270491 fix: n8n use SERVICE_FQDN_N8N for N8N_HOST and WEBHOOK_URL 2026-03-23 01:27:47 +00:00
root e062983a1d fix: adapt n8n compose for Coolify (remove Traefik/proxy/mail_internal, add dockerfile_inline) 2026-03-23 01:16:09 +00:00
root 7b67adbf2b fix: adapt gitea and karakeep compose for Coolify (remove Traefik, add dockerfile_inline) 2026-03-23 00:58:01 +00:00
Eduardo David Paredes Vara f5aa4b2674 karakeep 2026-03-23 00:55:48 +00:00
Eduardo David Paredes Vara f24284a27f karakeep 2026-03-23 00:49:02 +00:00
Eduardo David Paredes Vara 9f4ff93a29 coolify 2026-03-23 00:46:03 +00:00
Eduardo David Paredes Vara 0f8111ccdc coolify gitea 2026-03-23 00:34:56 +00:00
Eduardo David Paredes Vara 3c254b68ce mail server n8n 2026-03-20 23:39:52 +00:00
Eduardo David Paredes Vara 0e4225ae66 mail server paperless 2026-03-20 23:30:44 +00:00
Eduardo David Paredes Vara 1f99d7b8e7 nextcloud mail 2026-03-20 23:07:26 +00:00
Eduardo David Paredes Vara b1151e7f0e Mail 2026-03-20 22:35:42 +00:00