354 lines
8.1 KiB
Markdown
Executable File
354 lines
8.1 KiB
Markdown
Executable File
# Traefik Nucleo - Reverse Proxy Configuration
|
|
|
|
Configuración de Traefik v3.5 para el servidor Nucleo002.
|
|
|
|
## 📁 Estructura del Proyecto
|
|
|
|
```
|
|
traefikNucleo/
|
|
├── docker-compose.yml # Configuración principal de Traefik
|
|
├── traefik/
|
|
│ └── traefik.yml # Configuración estática
|
|
├── dynamic/
|
|
│ └── middlewares.yml # Middlewares (security, cors, etc.)
|
|
├── examples/
|
|
│ ├── whoami-service.yml # Ejemplo de servicio nuevo
|
|
│ └── existing-service.yml # Ejemplo para servicios existentes
|
|
└── README.md # Este archivo
|
|
```
|
|
|
|
## 🚀 Inicio Rápido
|
|
|
|
### 1. Configuración inicial
|
|
|
|
Antes de iniciar, **DEBES CAMBIAR**:
|
|
|
|
1. **Email en `traefik/traefik.yml`** (línea 43):
|
|
```yaml
|
|
email: TU-EMAIL@AQUI.com # Para Let's Encrypt
|
|
```
|
|
|
|
2. **Dominio del dashboard en `docker-compose.yml`** (línea 47):
|
|
```yaml
|
|
- "traefik.http.routers.dashboard.rule=Host(`traefik.TU-DOMINIO.com`)"
|
|
```
|
|
|
|
3. **Contraseña del dashboard** (línea 54):
|
|
```bash
|
|
# Generar hash de contraseña:
|
|
htpasswd -nb admin tu-password-seguro
|
|
|
|
# Reemplazar en docker-compose.yml:
|
|
- "traefik.http.middlewares.dashboard-auth.basicauth.users=HASH-AQUI"
|
|
```
|
|
|
|
### 2. Iniciar Traefik
|
|
|
|
```bash
|
|
# Desde el directorio traefikNucleo/
|
|
docker compose up -d
|
|
|
|
# Ver logs
|
|
docker compose logs -f traefik
|
|
|
|
# Verificar que está corriendo
|
|
docker ps | grep traefik
|
|
```
|
|
|
|
### 3. Acceder al Dashboard
|
|
|
|
Después de configurar el DNS de tu dominio:
|
|
|
|
```
|
|
https://traefik.TU-DOMINIO.com
|
|
```
|
|
|
|
Usuario: `admin`
|
|
Password: la que configuraste
|
|
|
|
## 📋 Conectar Servicios Existentes a Traefik
|
|
|
|
### Opción A: Via labels en docker-compose.yml
|
|
|
|
Edita el `docker-compose.yml` de tu servicio y agrega:
|
|
|
|
```yaml
|
|
services:
|
|
tu-servicio:
|
|
# ... configuración existente ...
|
|
|
|
networks:
|
|
- tu-red-original
|
|
- traefik-network # ← AGREGAR ESTO
|
|
|
|
labels:
|
|
- "traefik.enable=true"
|
|
- "traefik.http.routers.NOMBRE.rule=Host(`DOMINIO.com`)"
|
|
- "traefik.http.routers.NOMBRE.entrypoints=websecure"
|
|
- "traefik.http.routers.NOMBRE.tls.certresolver=letsencrypt"
|
|
- "traefik.http.services.NOMBRE.loadbalancer.server.port=PUERTO"
|
|
|
|
networks:
|
|
traefik-network:
|
|
external: true
|
|
```
|
|
|
|
Luego:
|
|
```bash
|
|
docker compose up -d
|
|
```
|
|
|
|
### Opción B: Conectar contenedor corriendo (sin reiniciar)
|
|
|
|
```bash
|
|
# 1. Conectar a la red de Traefik
|
|
docker network connect traefik-network nombre-del-contenedor
|
|
|
|
# 2. Agregar labels dinámicamente
|
|
docker update \
|
|
--label traefik.enable=true \
|
|
--label traefik.http.routers.NOMBRE.rule='Host(`DOMINIO.com`)' \
|
|
--label traefik.http.routers.NOMBRE.entrypoints=websecure \
|
|
--label traefik.http.routers.NOMBRE.tls.certresolver=letsencrypt \
|
|
--label traefik.http.services.NOMBRE.loadbalancer.server.port=PUERTO \
|
|
nombre-del-contenedor
|
|
|
|
# 3. Reiniciar el contenedor para aplicar labels
|
|
docker restart nombre-del-contenedor
|
|
```
|
|
|
|
## 🔧 Comandos Útiles
|
|
|
|
### Gestión de Traefik
|
|
|
|
```bash
|
|
# Ver logs en tiempo real
|
|
docker compose logs -f traefik
|
|
|
|
# Reiniciar Traefik (recargar configuración)
|
|
docker compose restart traefik
|
|
|
|
# Detener Traefik
|
|
docker compose down
|
|
|
|
# Detener y eliminar volúmenes (CUIDADO: borra certificados SSL)
|
|
docker compose down -v
|
|
```
|
|
|
|
### Ver configuración activa
|
|
|
|
```bash
|
|
# Ver todos los routers activos
|
|
docker exec traefik traefik healthcheck
|
|
|
|
# Inspeccionar contenedor de Traefik
|
|
docker inspect traefik
|
|
```
|
|
|
|
### Gestión de certificados
|
|
|
|
```bash
|
|
# Ver certificados almacenados
|
|
docker volume inspect traefik-letsencrypt
|
|
|
|
# Backup de certificados
|
|
docker run --rm -v traefik-letsencrypt:/data -v $(pwd):/backup \
|
|
alpine tar czf /backup/letsencrypt-backup.tar.gz /data
|
|
```
|
|
|
|
## 🌐 Ejemplos de Servicios
|
|
|
|
### Servicio de prueba (whoami)
|
|
|
|
```bash
|
|
cd examples/
|
|
docker compose -f whoami-service.yml up -d
|
|
```
|
|
|
|
Accede a: `https://whoami.TU-DOMINIO.com`
|
|
|
|
### Tus servicios existentes
|
|
|
|
Ver archivo `examples/existing-service.yml` para plantilla.
|
|
|
|
Servicios actuales que puedes migrar:
|
|
- ✅ gitea (puerto 3000)
|
|
- ✅ portainer (puerto 9443)
|
|
- ✅ authentik (puertos 9100, 9444)
|
|
- ✅ openwebui (puerto 3020)
|
|
- ✅ snatchgame-client (puerto 3010)
|
|
- ✅ planilla-ui (puerto 3008)
|
|
- Y más...
|
|
|
|
## 🔐 SSL/TLS Automático
|
|
|
|
Traefik solicita automáticamente certificados SSL de Let's Encrypt cuando:
|
|
|
|
1. El dominio apunta a tu IP pública
|
|
2. Los puertos 80 y 443 están accesibles desde internet
|
|
3. El contenedor tiene `tls.certresolver=letsencrypt` en sus labels
|
|
|
|
### Troubleshooting SSL
|
|
|
|
Si los certificados no se generan:
|
|
|
|
```bash
|
|
# Ver logs de ACME (Let's Encrypt)
|
|
docker compose logs traefik | grep acme
|
|
|
|
# Verificar que el dominio apunta a tu IP
|
|
dig TU-DOMINIO.com
|
|
|
|
# Verificar conectividad externa
|
|
curl -I http://TU-DOMINIO.com
|
|
```
|
|
|
|
## 📊 Middlewares Disponibles
|
|
|
|
Los middlewares procesan las peticiones antes de llegar al servicio.
|
|
|
|
Usa los middlewares agregándolos a tus labels:
|
|
|
|
```yaml
|
|
labels:
|
|
- "traefik.http.routers.NOMBRE.middlewares=compress,security-headers,rate-limit"
|
|
```
|
|
|
|
### Middlewares configurados:
|
|
|
|
- `compress`: Compresión gzip
|
|
- `security-headers`: Headers de seguridad HTTP
|
|
- `cors`: Configuración CORS
|
|
- `rate-limit`: Límite de peticiones (100/s)
|
|
- `redirect-https`: Redirección forzada a HTTPS
|
|
- `basic-auth-example`: Autenticación básica
|
|
- `strip-prefix-api`: Remover `/api` del path
|
|
|
|
Ver `dynamic/middlewares.yml` para detalles.
|
|
|
|
## 🛠️ Personalización Avanzada
|
|
|
|
### Agregar más entry points
|
|
|
|
Edita `traefik/traefik.yml`:
|
|
|
|
```yaml
|
|
entryPoints:
|
|
custom-port:
|
|
address: ":9000"
|
|
```
|
|
|
|
Expón el puerto en `docker-compose.yml`:
|
|
|
|
```yaml
|
|
ports:
|
|
- "9000:9000"
|
|
```
|
|
|
|
### Configuración TCP/UDP
|
|
|
|
Para servicios que no son HTTP (como bases de datos, SSH, etc.):
|
|
|
|
Edita `traefik/traefik.yml` y agrega entry points TCP:
|
|
|
|
```yaml
|
|
entryPoints:
|
|
postgres:
|
|
address: ":5432"
|
|
```
|
|
|
|
Y configura routers TCP en `dynamic/tcp.yml` (crear archivo nuevo).
|
|
|
|
## 📈 Monitoreo
|
|
|
|
### Métricas Prometheus
|
|
|
|
Traefik expone métricas en:
|
|
|
|
```
|
|
http://IP-SERVIDOR:8082/metrics
|
|
```
|
|
|
|
### Dashboard
|
|
|
|
Acceso web completo a:
|
|
- Routers activos
|
|
- Services
|
|
- Middlewares
|
|
- Certificados TLS
|
|
- Estadísticas en tiempo real
|
|
|
|
## ⚠️ Notas Importantes
|
|
|
|
1. **Puertos 80 y 443 deben estar libres** antes de iniciar Traefik
|
|
2. **Firewall**: Asegúrate de que los puertos están abiertos en tu firewall
|
|
3. **DNS**: Los dominios deben apuntar a la IP de tu servidor
|
|
4. **Backup**: Haz backup regular del volumen `traefik-letsencrypt`
|
|
5. **Let's Encrypt rate limits**: Máximo 5 certificados duplicados por semana
|
|
|
|
## 🆘 Solución de Problemas
|
|
|
|
### Traefik no inicia
|
|
|
|
```bash
|
|
# Ver logs detallados
|
|
docker compose logs traefik
|
|
|
|
# Verificar puertos ocupados
|
|
ss -tuln | grep ':80\|:443'
|
|
|
|
# Verificar permisos del socket de Docker
|
|
ls -la /var/run/docker.sock
|
|
```
|
|
|
|
### Servicio no aparece en el dashboard
|
|
|
|
```bash
|
|
# Verificar que el contenedor está en la red correcta
|
|
docker inspect CONTENEDOR | grep -A 10 Networks
|
|
|
|
# Verificar labels
|
|
docker inspect CONTENEDOR | grep -A 20 Labels
|
|
|
|
# Ver logs de Traefik para errores
|
|
docker compose logs traefik | grep error
|
|
```
|
|
|
|
### Certificado SSL no se genera
|
|
|
|
1. Verifica que el dominio resuelve: `dig TU-DOMINIO.com`
|
|
2. Verifica conectividad: `curl http://TU-DOMINIO.com`
|
|
3. Revisa logs de ACME: `docker compose logs traefik | grep acme`
|
|
4. Espera unos minutos (Let's Encrypt puede tardar)
|
|
|
|
## 📚 Recursos
|
|
|
|
- [Documentación oficial de Traefik](https://doc.traefik.io/traefik/)
|
|
- [Traefik en GitHub](https://github.com/traefik/traefik)
|
|
- [Let's Encrypt](https://letsencrypt.org/)
|
|
|
|
## 🔄 Migración desde Nginx Proxy Manager
|
|
|
|
Si vienes de NPM:
|
|
|
|
1. Exporta/documenta tus configuraciones de NPM
|
|
2. Detén NPM: `docker stop npm npm-db`
|
|
3. Inicia Traefik: `docker compose up -d`
|
|
4. Migra servicios uno por uno usando los ejemplos
|
|
5. Cuando todo funcione, elimina NPM si quieres
|
|
|
|
## 🎯 Próximos Pasos
|
|
|
|
1. [ ] Cambiar email, dominio y password en la configuración
|
|
2. [ ] Iniciar Traefik
|
|
3. [ ] Probar con servicio whoami
|
|
4. [ ] Migrar un servicio existente
|
|
5. [ ] Configurar backups de certificados SSL
|
|
6. [ ] Conectar métricas a Prometheus/Grafana (opcional)
|
|
|
|
---
|
|
|
|
**Creado para**: Servidor Nucleo002
|
|
**Fecha**: Octubre 2025
|
|
**Versión de Traefik**: v3.5
|