146 lines
4.3 KiB
Markdown
146 lines
4.3 KiB
Markdown
# Watchtower — Actualización automática de contenedores
|
|
|
|
## Qué es
|
|
[Watchtower](https://containrrr.dev/watchtower/) monitoriza imágenes y actualiza contenedores automáticamente cuando hay nuevas versiones.
|
|
|
|
## Características
|
|
- Actualiza solo contenedores etiquetados (flag `--label-enable`)
|
|
- Limpieza de imágenes antiguas (flag `--cleanup`)
|
|
- Programación vía cron con flag `--schedule`
|
|
- Tiempo de gracia en parada (`--stop-timeout`)
|
|
- Notificaciones (Shoutrrr: Telegram, Slack, Email, etc.)
|
|
|
|
## Despliegue
|
|
```bash
|
|
git clone https://git.ictiberia.com/groales/watchtower
|
|
cd watchtower
|
|
docker compose up -d
|
|
```
|
|
|
|
## Etiquetado de servicios
|
|
Para que un servicio se auto-actualice, añade la label:
|
|
```yaml
|
|
labels:
|
|
- "com.centurylinklabs.watchtower.enable=true"
|
|
```
|
|
Para excluir explícitamente:
|
|
```yaml
|
|
labels:
|
|
- "com.centurylinklabs.watchtower.enable=false"
|
|
```
|
|
|
|
## Configuración (flags usados)
|
|
El `docker-compose.yaml` utiliza flags en lugar de variables de entorno para mayor claridad:
|
|
```yaml
|
|
command:
|
|
- --label-enable # Solo contenedores con label enable=true
|
|
- --cleanup # Elimina imágenes antiguas tras actualizar
|
|
- --schedule=0 30 3 * * * # Ejecuta cada día a las 03:30 (TZ configurado)
|
|
- --stop-timeout=30s # Tiempo de gracia al parar contenedores
|
|
```
|
|
Si prefieres variables en vez de flags, puedes usar:
|
|
```yaml
|
|
environment:
|
|
- WATCHTOWER_LABEL_ENABLE=true
|
|
- WATCHTOWER_CLEANUP=true
|
|
- WATCHTOWER_SCHEDULE=0 30 3 * * *
|
|
- WATCHTOWER_TIMEOUT=30s
|
|
```
|
|
|
|
## Buenas prácticas
|
|
- Etiqueta solo servicios que quieras actualizar
|
|
- Usa horarios de baja actividad (madrugada)
|
|
- Revisa logs tras cambios de versiones críticas
|
|
- Mantén backups si actualizas servicios con datos persistentes
|
|
- Excluye servicios que gestionas manualmente (`enable=false`)
|
|
|
|
## Notificaciones
|
|
|
|
Watchtower usa **env_file** para cargar variables desde `.env`, simplificando la configuración.
|
|
|
|
### Configuración básica
|
|
|
|
1. Copia el archivo de ejemplo:
|
|
```bash
|
|
cp .env.example .env
|
|
```
|
|
|
|
2. Edita `.env` con tu configuración:
|
|
```env
|
|
WATCHTOWER_NOTIFICATIONS=shoutrrr
|
|
WATCHTOWER_NOTIFICATION_URL=smtp://tu-servidor-smtp:25/?from=noreply@midominio.com&to=admin@midominio.com&subject=Watchtower%20-%20Actualizaciones
|
|
WATCHTOWER_NOTIFIER_LEVEL=info
|
|
WATCHTOWER_NOTIFICATIONS_REPORT=true
|
|
```
|
|
|
|
3. Reinicia Watchtower:
|
|
```bash
|
|
docker compose up -d
|
|
```
|
|
|
|
### SMTP sin autenticación (puerto 25)
|
|
|
|
Ideal para servidores relay internos o Microsoft 365 Mail Protection:
|
|
|
|
```env
|
|
# Microsoft 365 Mail Protection (sin autenticación)
|
|
WATCHTOWER_NOTIFICATION_URL=smtp://midominio-com.mail.protection.outlook.com:25/?from=noreply@midominio.com&to=admin@midominio.com&subject=Watchtower%20-%20Actualizaciones
|
|
```
|
|
|
|
**Nota sobre Microsoft 365 Mail Protection:**
|
|
- Endpoint format: `tudominio-com.mail.protection.outlook.com` (reemplaza `.` del dominio por `-`)
|
|
- Puerto 25, sin autenticación ni TLS
|
|
- Requiere configuración previa de conector de entrada en Microsoft 365
|
|
- Solo acepta correos desde IPs autorizadas (configura en Exchange Admin Center)
|
|
|
|
### SMTP con autenticación (puerto 587)
|
|
|
|
Para servidores que requieren credenciales:
|
|
|
|
```env
|
|
WATCHTOWER_NOTIFICATION_URL=smtp://USUARIO:PASS@smtp.example.com:587/?from=watchtower@midominio.com&to=ops@midominio.com&subject=Watchtower%20Actualizaciones&starttls=Yes
|
|
```
|
|
|
|
**Nota:** Escapa caracteres especiales en usuario/contraseña si es necesario.
|
|
|
|
### Múltiples destinatarios
|
|
|
|
Separa direcciones con comas:
|
|
```env
|
|
WATCHTOWER_NOTIFICATION_URL=smtp://servidor:25/?from=noreply@midominio.com&to=admin@midominio.com,devops@midominio.com&subject=Watchtower%20-%20Actualizaciones
|
|
```
|
|
|
|
### Múltiples canales
|
|
|
|
Separa URLs con punto y coma:
|
|
```env
|
|
WATCHTOWER_NOTIFICATION_URL=smtp://servidor:25/?from=noreply@midominio.com&to=admin@midominio.com;telegram://TOKEN@telegram?channels=CHAT_ID
|
|
```
|
|
|
|
## Troubleshooting
|
|
```bash
|
|
docker logs watchtower --tail=200
|
|
```
|
|
|
|
---
|
|
Última actualización: Nov 2025 (compose con flags)
|
|
|
|
## Ejemplos de etiquetas
|
|
|
|
### Portainer (actualizable)
|
|
```yaml
|
|
labels:
|
|
- "com.centurylinklabs.watchtower.enable=true"
|
|
```
|
|
|
|
### NGINX Proxy Manager (excluir)
|
|
```yaml
|
|
labels:
|
|
- "com.centurylinklabs.watchtower.enable=false"
|
|
```
|
|
|
|
### Servicios críticos (actualizar manualmente)
|
|
- Programa ventanas con `--schedule`
|
|
- Opcional: parar primero y usar `WATCHTOWER_INCLUDE_STOPPED=true`
|
|
|