configuracion actual
This commit is contained in:
353
README.md
Executable file
353
README.md
Executable file
@@ -0,0 +1,353 @@
|
||||
# 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
|
||||
Reference in New Issue
Block a user