184 lines
5.6 KiB
Markdown
184 lines
5.6 KiB
Markdown
# 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 <servicio>
|
|
docker compose --env-file .env pull
|
|
docker compose --env-file .env up -d
|
|
```
|
|
|
|
Para reiniciarlo:
|
|
|
|
```bash
|
|
cd <servicio>
|
|
docker compose --env-file .env restart
|
|
```
|
|
|
|
Para detenerlo:
|
|
|
|
```bash
|
|
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](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 <servicio>
|
|
docker compose --env-file .env logs -f
|
|
```
|
|
|
|
Validar un compose:
|
|
|
|
```bash
|
|
cd <servicio>
|
|
docker compose --env-file .env config
|
|
```
|
|
|
|
## Troubleshooting
|
|
|
|
Si Traefik no enruta:
|
|
|
|
1. Verifica DNS: `dig <dominio>`
|
|
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 <servicio>/.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=<stack>`).
|
|
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 <stack> DEPRECATED-<stack>` (preserva historial).
|