# Compose Services Repository Este repositorio contiene servicios autoalojados gestionados directamente con Docker Compose. Portainer ya no es el gestor de despliegue de este repo. Los despliegues se hacen desde CLI con `docker compose` y variables en archivos `.env` locales. No uses `stack.env` como fuente de despliegue. ## Contenido - [Arquitectura](#arquitectura) - [Prerequisitos](#prerequisitos) - [Despliegue](#despliegue) - [Servicios](#servicios) - [Configuracion](#configuracion) - [Uso](#uso) - [Anadir una nueva app](NUEVA-APP.md) ## Arquitectura La infraestructura base se levanta en este orden: 1. `Traefik/`: reverse proxy y certificados TLS. 2. `authentik/`: SSO y forward auth para apps privadas. 3. `crowdsec/`: proteccion colaborativa y bouncer para Traefik. 4. Resto de servicios: cada uno desde su propia carpeta. Los servicios publicados comparten la red Docker externa `proxy`, que Traefik usa para alcanzarlos. Configura DNS antes de desplegar servicios expuestos. Los certificados de Let's Encrypt dependen de que los dominios resuelvan correctamente. ## Prerequisitos - Docker Engine - Docker Compose v2 - Red Docker externa `proxy` - Dominios apuntando al servidor o al Cloudflare Tunnel correspondiente - Puertos 80/443 disponibles para Traefik si aplica Crear la red compartida: ```bash docker network create proxy ``` Si ya existe, Docker devolvera un error inofensivo. ## Despliegue Cada servicio se despliega desde su carpeta con su `.env` local: ```bash cd Traefik docker compose --env-file .env up -d ``` Para actualizar un servicio: ```bash cd docker compose --env-file .env pull docker compose --env-file .env up -d ``` Para reiniciarlo: ```bash cd docker compose --env-file .env restart ``` Para detenerlo: ```bash cd docker compose --env-file .env down ``` Usa `docker compose --env-file .env -f /docker-compose.yml up -d` si prefieres ejecutar desde la raiz del repo. ## Servicios | Servicio | Descripcion | Carpeta | Documentacion | |---|---|---|---| | Traefik | Reverse proxy con TLS automatico | `Traefik/` | [README](Traefik/README.md) | | Authentik | SSO y Forward Auth | `authentik/` | [README](authentik/README.md) | | CrowdSec | IPS/IDS, bouncer y Grafana | `crowdsec/` | [README](crowdsec/README.md) | | Homepage | Dashboard principal | `homepage/` | [README](homepage/README.md) | | Dozzle | Visor de logs Docker | `dozzle/` | [README](dozzle/README.md) | | Beszel | Monitorizacion ligera | `beszel/` | [README](beszel/README.md) | | Gitea | Git autoalojado | `gitea/` | [README](gitea/README.md) | | n8n | Automatizacion de workflows | `n8n/` | [README](n8n/README.md) | | Mail Relay | Relay SMTP interno | `mail-relay/` | [README](mail-relay/README.md) | | AdGuard | DNS y bloqueo de anuncios | `adguard/` | [README](adguard/README.md) | | Trilium | Notas jerarquicas | `trilium/` | [README](trilium/README.md) | | Wireguard | VPN | `wireguard/` | [README](wireguard/README.md) | | Open WebUI | UI para modelos locales/remotos | `openwebui/` | [README](openwebui/README.md) | | OpenCode | Entorno OpenCode servido por Traefik | `opencode/` | [README](opencode/README.md) | | Kopia | Backups | `backups/kopia/` | [README](backups/kopia/README.md) | ## Configuracion Cada carpeta de servicio debe tener un `.env` con sus variables reales. Reglas actuales: - Despliega siempre con `.env`. - No uses `stack.env` para desplegar. - No documentes flujos nuevos basados en Portainer. - Mantén secretos reales fuera de Git. - Para apps expuestas por Traefik, el servicio publicado debe estar en la red `proxy`. - Las bases de datos y dependencias internas deben quedarse en redes internas salvo que Traefik deba alcanzarlas. Variables comunes de Traefik: ```env TRAEFIK_DOCKER_NETWORK=proxy TRAEFIK_ENTRYPOINT_SECURE=websecure TRAEFIK_CERTRESOLVER=letsencrypt TRAEFIK_AUTH_MIDDLEWARE=ths-authentik@docker ``` Para crear una app nueva, sigue [NUEVA-APP.md](NUEVA-APP.md). ## Uso Ver contenedores: ```bash docker ps -a ``` Ver logs de un servicio: ```bash cd docker compose --env-file .env logs -f ``` Validar un compose: ```bash cd docker compose --env-file .env config ``` ## Troubleshooting Si Traefik no enruta: 1. Verifica DNS: `dig ` 2. Comprueba que Traefik esta corriendo: `docker ps | grep traefik` 3. Revisa logs: `docker logs traefik` 4. Valida labels del servicio publicado. 5. Comprueba que el contenedor esta en la red `proxy`. Si Authentik redirige pero devuelve error: 1. Verifica que existe el Proxy Provider. 2. Verifica que existe la Application. 3. Comprueba que la app esta asociada al Embedded Outpost. 4. Revisa logs de `authentik-server`. Si un `.env` no se aplica: 1. Ejecuta desde la carpeta del servicio o usa `--env-file /.env`. 2. Valida con `docker compose --env-file .env config`. 3. Recuerda que Traefik no expande variables; Docker Compose las expande antes de crear labels. ## Notas - Orden recomendado: Traefik -> Authentik -> CrowdSec -> servicios. - CrowdSec debe ir antes de Authentik en la cadena de middlewares cuando ambos se usen. - Las instrucciones antiguas de Portainer se consideran obsoletas. ## Stacks deprecados Los stacks descartados de la infra (ya no se despliegan) se prefijan con `DEPRECATED-` (ej. `DEPRECATED-kasm/`) en vez de borrarse, para conservar la config por si hace falta consultarla. Antes de renombrar: 1. Confirmar que no queden contenedores corriendo (`docker ps -a --filter name=`). 2. Quitar/inhabilitar su ruta en `/opt/traefik/dynamic/` si tenía una. 3. Quitar su entrada de Homepage (labels en el compose o `services.yaml`). 4. `git mv DEPRECATED-` (preserva historial).