Remove stacks no longer in use: ghost, ghost-me, changedetection, pdf (Stirling PDF), it (IT-Tools), finance (Actual Budget), bookstack, dozzle, beszel, memos, vikunja, onetimesecret and DEPRECATED-kasm. CrowdSec keeps only the engine (the Traefik bouncer is unchanged). Drop Grafana, Prometheus, crowdsec-postgres and metrics-export.sh, which only fed the local dashboard; CrowdSec itself uses SQLite. Also drop references to these services, THSCom, Scheduler and the SpinTools OpenProject from Kopia paths/dumps and ops-report endpoints, and replace the DEPRECATED- convention in the README with the removal procedure used here. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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
La infraestructura base se levanta en este orden:
Traefik/: reverse proxy y certificados TLS.authentik/: SSO y forward auth para apps privadas.crowdsec/: proteccion colaborativa y bouncer para Traefik.- 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:
docker network create proxy
Si ya existe, Docker devolvera un error inofensivo.
Despliegue
Cada servicio se despliega desde su carpeta con su .env local:
cd Traefik
docker compose --env-file .env up -d
Para actualizar un servicio:
cd <servicio>
docker compose --env-file .env pull
docker compose --env-file .env up -d
Para reiniciarlo:
cd <servicio>
docker compose --env-file .env restart
Para detenerlo:
cd <servicio>
docker compose --env-file .env down
Usa docker compose --env-file .env -f <ruta>/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 |
| Authentik | SSO y Forward Auth | authentik/ |
README |
| CrowdSec | IPS/IDS y bouncer | crowdsec/ |
README |
| Homepage | Dashboard principal | homepage/ |
README |
| Gitea | Git autoalojado | gitea/ |
README |
| n8n | Automatizacion de workflows | n8n/ |
README |
| Mail Relay | Relay SMTP interno | mail-relay/ |
README |
| AdGuard | DNS y bloqueo de anuncios | adguard/ |
README |
| Trilium | Notas jerarquicas | trilium/ |
README |
| Wireguard | VPN | wireguard/ |
README |
| Open WebUI | UI para modelos locales/remotos | openwebui/ |
README |
| OpenCode | Entorno OpenCode servido por Traefik | opencode/ |
README |
| Kopia | Backups | backups/kopia/ |
README |
Configuracion
Cada carpeta de servicio debe tener un .env con sus variables reales.
Reglas actuales:
- Despliega siempre con
.env. - No uses
stack.envpara 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:
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.
Uso
Ver contenedores:
docker ps -a
Ver logs de un servicio:
cd <servicio>
docker compose --env-file .env logs -f
Validar un compose:
cd <servicio>
docker compose --env-file .env config
Troubleshooting
Si Traefik no enruta:
- Verifica DNS:
dig <dominio> - Comprueba que Traefik esta corriendo:
docker ps | grep traefik - Revisa logs:
docker logs traefik - Valida labels del servicio publicado.
- Comprueba que el contenedor esta en la red
proxy.
Si Authentik redirige pero devuelve error:
- Verifica que existe el Proxy Provider.
- Verifica que existe la Application.
- Comprueba que la app esta asociada al Embedded Outpost.
- Revisa logs de
authentik-server.
Si un .env no se aplica:
- Ejecuta desde la carpeta del servicio o usa
--env-file <servicio>/.env. - Valida con
docker compose --env-file .env config. - 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.
Retirar un stack
Los stacks descartados se borran del repo (el historial de git conserva la config). Antes de borrar:
docker compose --env-file .env downdesde la carpeta del stack.- Backup en
/opt/backups/removal-<fecha>-<stack>/(chmod 600): datos de/opt/<stack>, la carpeta del repo con su.envy los ficheros de/opt/traefik/dynamic/que se toquen. - Quitar su ruta en
/opt/traefik/dynamic/(renombrar a.bak-<ts>-removed) y su middleware ensablier.ymlsi lo tenía. - Quitar su entrada de Homepage (labels en el compose o
services.yaml). - Borrar sus registros DNS con
cloudflared/cloudflare_dns.py delete <nombre>. - Quitar referencias en
backups/kopia/yn8n-observability/scripts/ops-report. - Borrar los datos en
/opt/<stack>ygit rm -r <stack>.