https://github.com/migbertweb/mi_traefik_deploy
Personal Traefik deploy
https://github.com/migbertweb/mi_traefik_deploy
configuration docker docker-compose server yml
Last synced: about 2 months ago
JSON representation
Personal Traefik deploy
- Host: GitHub
- URL: https://github.com/migbertweb/mi_traefik_deploy
- Owner: migbertweb
- Created: 2025-02-20T16:42:21.000Z (over 1 year ago)
- Default Branch: master
- Last Pushed: 2025-02-22T19:56:30.000Z (over 1 year ago)
- Last Synced: 2025-02-22T20:29:14.478Z (over 1 year ago)
- Topics: configuration, docker, docker-compose, server, yml
- Homepage:
- Size: 94.7 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Mi Traefik Deploy
Despliegue completo de Traefik como reverse proxy con Docker Compose, incluyendo configuración de certificados SSL automáticos, autenticación básica, middlewares de seguridad y logging avanzado.
## 📋 Descripción
Este proyecto proporciona una configuración lista para usar de Traefik v3 como reverse proxy y load balancer. Incluye:
- **Certificados SSL automáticos** con Let's Encrypt (TLS Challenge y DNS Challenge con Cloudflare)
- **Dashboard de Traefik** protegido con autenticación básica
- **Middlewares de seguridad** (rate limiting, headers de seguridad, etc.)
- **Logging configurado** con formato JSON
- **Métricas de Prometheus** habilitadas
- **Redirección automática** de HTTP a HTTPS
## 🚀 Características
- ✅ Certificados SSL/TLS automáticos con Let's Encrypt
- ✅ Soporte para DNS Challenge con Cloudflare
- ✅ Dashboard protegido con autenticación básica
- ✅ Rate limiting configurado
- ✅ Headers de seguridad implementados
- ✅ Logs estructurados en formato JSON
- ✅ Métricas de Prometheus habilitadas
- ✅ Redirección automática HTTP → HTTPS
## 📁 Estructura del Proyecto
```
mi_traefik_deploy/
├── docker-compose.yml # Configuración principal de Docker Compose
├── env_example # Plantilla de variables de entorno
├── LICENSE # Licencia MIT
├── README.md # Este archivo
└── datos/
├── traefik.yaml # Configuración estática de Traefik
├── acme.json # Almacenamiento de certificados TLS Challenge
├── acme-cloudflare.json # Almacenamiento de certificados DNS Challenge
└── dynamic_conf/
└── dynamic.yaml # Configuración dinámica (middlewares, TLS)
```
## 🔧 Requisitos Previos
- Docker y Docker Compose instalados
- Dominio configurado apuntando a tu servidor
- Token de API de Cloudflare (si usas DNS Challenge)
- Acceso root/sudo para crear la red de Docker
## 📦 Instalación
### 1. Clonar el Repositorio
```bash
git clone https://github.com/migbertweb/mi_traefik_deploy.git
cd mi_traefik_deploy
```
### 2. Configurar Variables de Entorno
```bash
cp env_example .env
```
Edita el archivo `.env` con tus valores:
```env
# Token Cloudflare
CLOUDFLARE_API_TOKEN=tu_token_aqui
# Email
EMAIL=tu_email@ejemplo.com
# Dominio base
DOMAIN=ejemplo.com
# Zona horaria
TIMEZONE=America/Sao_Paulo
```
### 3. Crear la Red de Docker
```bash
docker network create traefik-servicenet
```
### 4. Crear Archivos de Certificados
```bash
touch ./datos/acme-cloudflare.json
touch ./datos/acme.json
chmod 600 ./datos/*.json
```
### 5. Crear Credenciales de Autenticación Básica
```bash
sudo apt update
sudo apt install apache2-utils
htpasswd -cB basic_auth_credentials usuario
```
Reemplaza `usuario` por el nombre de usuario que desees usar.
### 6. Iniciar el Servicio
```bash
docker compose up -d
```
## 🔐 Acceso al Dashboard
Una vez iniciado el servicio, puedes acceder al dashboard de Traefik en:
```
https://traefik.tu-dominio.com
```
Usa las credenciales creadas con `htpasswd` para autenticarte.
## 📝 Configuración
### Certificados SSL
El proyecto está configurado con dos resolvers de certificados:
1. **tlschallenge**: Usa el desafío TLS de Let's Encrypt (requiere que el puerto 443 sea accesible)
2. **cloudflare**: Usa DNS Challenge con Cloudflare (útil cuando el puerto 443 no es accesible directamente)
Para usar certificados con Cloudflare, agrega esta etiqueta a tus servicios:
```yaml
- "traefik.http.routers.mi-servicio.tls.certresolver=cloudflare"
```
### Middlewares Disponibles
- **chain-basic**: Rate limiting + Headers de seguridad + Auto-detección de content type
- **chain-basic-auth**: Lo anterior + Autenticación básica
- **rate-limit**: Limita a 100 solicitudes promedio con burst de 50
- **secure-Headers**: Headers de seguridad (HSTS, XSS Protection, etc.)
### Logs
Los logs se almacenan en:
- **Access logs**: `datos/logs/access.log` (formato JSON)
- **Traefik logs**: `datos/logs/traefik.log` (formato JSON)
## 🔗 Conectar Servicios
Para conectar otros servicios a Traefik, agrega estas etiquetas a tu `docker-compose.yml`:
```yaml
services:
mi-servicio:
labels:
- "traefik.enable=true"
- "traefik.http.routers.mi-servicio.rule=Host(`servicio.tu-dominio.com`)"
- "traefik.http.routers.mi-servicio.tls.certresolver=cloudflare"
- "traefik.http.routers.mi-servicio.entrypoints=web-secure"
- "traefik.http.services.mi-servicio.loadbalancer.server.port=8080"
networks:
- traefik-servicenet
```
## 📊 Métricas
Las métricas de Prometheus están disponibles en:
```
http://tu-servidor:8080/metrics
```
## 🛠️ Mantenimiento
### Ver Logs
```bash
docker compose logs -f traefik
```
### Reiniciar el Servicio
```bash
docker compose restart traefik
```
### Detener el Servicio
```bash
docker compose down
```
## ⚠️ Notas de Seguridad
- El archivo `acme.json` y `acme-cloudflare.json` deben tener permisos 600
- El dashboard está protegido con autenticación básica
- Se recomienda usar DNS Challenge si estás detrás de un proxy o firewall
- El socket de Docker está montado como solo lectura (`:ro`)
## 📄 Licencia
Este proyecto está licenciado bajo la Licencia MIT - ver el archivo [LICENSE](LICENSE) para más detalles.
**Recomendación Opcional para Proyectos Educativos:**
Se recomienda encarecidamente, aunque no es obligatorio, que las obras derivadas mantengan este mismo espíritu de código libre y abierto, especialmente cuando se utilicen con fines educativos o de investigación.
## 👤 Autor
**Migbertweb**
- GitHub: [@migbertweb](https://github.com/migbertweb)
- Repositorio: https://github.com/migbertweb/mi_traefik_deploy
## 🤝 Contribuciones
Las contribuciones son bienvenidas. Por favor:
1. Fork el proyecto
2. Crea una rama para tu feature (`git checkout -b feature/AmazingFeature`)
3. Commit tus cambios (`git commit -m 'Add some AmazingFeature'`)
4. Push a la rama (`git push origin feature/AmazingFeature`)
5. Abre un Pull Request
## 📚 Recursos Adicionales
- [Documentación oficial de Traefik](https://doc.traefik.io/traefik/)
- [Guía de migración Traefik v2 a v3](https://doc.traefik.io/traefik/v3.0/migration/v2-to-v3/)
- [Let's Encrypt](https://letsencrypt.org/)
- [Cloudflare API](https://developers.cloudflare.com/api/)
## 🐛 Reportar Problemas
Si encuentras algún problema, por favor abre un issue en el repositorio de GitHub.
---
**Nota**: Este proyecto usa Licencia MIT. Se recomienda (no obliga) mantener derivados como código libre, especialmente para fines educativos.