Categorías
Nas Synology Recursos Servidores

Ouroboros, actualizar contenedores Docker automáticamente + notificaciones por Telegram

Ouroboros es una imagen para Docker que comprueba cada X tiempo (un intervalo que podemos configurar) todas las imágenes de nuestros contenedores que están corriendo para ver si hay alguno que tenga alguna actualización pendiente, y si la tiene, la actualiza. De esta manera tendremos siempre las imágenes de nuestros contenedores actualizados.

Para los que tenemos servidores personales o NAS con muchos servicios self-hosted en Docker, podemos apreciar este tipo de herramientas ya que tener que llevar la cuenta de todos los contenedores que tenemos con todas sus imágenes y sus versiones puede ser una labor muy tediosa. Y además podemos configurarlo para que nos avise por Telegram cuando haya actualizado algún contenedor.

Antes de ir directamente a la línea de comandos a instalar la herramienta, vamos a crear primero nuestro Bot de Telegram.

Crear un Bot de Telegram

Crear el bot

  1. Abrimos Telegram
  2. Buscamos la herramienta que tiene Telegram para gestionar nuestros bots: @BotFather
  3. Si nunca antes hemos hecho esto, le tenemos que dar a Iniciar
  4. Luego escribir /newbot para crear un nuevo bot
  5. Le damos un nombre a nuestro bot y lo enviamos
  6. Luegos nos pedirá el nombre de usuario del Bot
  7. Por último ya lo tendremos creado y nos enviará un código token que nos lo tenemos que guardar por ahí porque lo vamos a necesitar en los próximos pasos.

Obtener el chat_id de nuestra cuenta de Telegram

Necesitaremos esto para que el bot nos pueda hablar a nosotros por privado y así no se entere todo el mundo de nuestras actualizaciones.

  1. Buscamos @get_id_bot en Telegram
  2. Le damos a Iniciar igual que antes
  3. Escribimos /my_id
  4. El bot nos responderá con algo como Your Chat ID = XXXXXXXXXX, guardamos este ID también para más adelante

Instalar Ouroboros

Opción 1: terminal

sudo docker run -d --name ouroboros -e INTERVAL=86400 -e LOGLEVEL=info -e SELF_UPDATE=true -e RUNONCE=false -e CLEANUP=true  -e NOTIFIERS=tgram://ID_OBTENIDA_DE_BOT_FATHER/NUESTRO_CHAT_ID -e TZ=Europe/Madrid -v /var/run/docker.sock:/var/run/docker.sock --restart always pyouroboros/ouroboros

Opción 2: Docker compose

---
version: "2.1"
services:
  ouroboros:
    image: pyouroboros/ouroboros
    container_name: ouroboros
    environment:
      - INTERVAL=86400 # look for update every 24h
      - LOGLEVEL=info
      - SELF_UPDATE=true
      - RUNONCE=false
      - CLEANUP=true
      - TZ=Europe/Madrid
      - NOTIFIERS=tgram://ID_OBTENIDA_DE_BOT_FATHER/NUESTRO_CHAT_ID
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    restart: unless-stopped

Explicando un poco los valores de arriba:

  • INTERVAL: Cada cuanto tiempo en segundos queremos que Ouroboros compruebe por nuevas actualizaciones, tal cual está, lo hará cada 24h
  • SELF_UPDATE: Deja que Ouroboros se actualice a sí mismo además de tus otros contenedores. Las auto-actualizaciones requieren que el contenedor se llame ouroboros o ouroboros-updated y alternará los nombres para las actualizaciones.
  • RUNONCE: tenerlo a `true` le indicará a Ouroboros que tiene que hacer las comprobaciones de todos los contenedores de una pasada en vez de una manera granular.
  • CLEANUP: Elimina las antiguas imágenes después de la actualizaciones. Si tiene varios contenedores que utilizan la misma imagen, se asegurará de que todos los contenedores se actualicen antes de eliminar la imagen.
  • NOTIFIERS: como queremos que Ouroboros nos notifique de las actualizaciones que ha hecho, ya que esto es bastante personalizable y con diferentes servicios, os dejo el enlace a la documentación para que lo miréis por vuestra cuenta, en mi caso lo configuré con Telegram.

Después de instalar el contenedor, si lo hemos hecho todo bien, nos llegará un mensaje parecido a este en Telegram, indicandonos cuantos contenedores corriendo tenemos, las que monitorea y cuales han sido actualizadas de qué versión a que versión.

Esto es todo, espero que os sea de ayuda!

Por Deniz M.

Desarrollador a tiempo completo, amante del buen rol y los juegos de plataforma. Mi tiempo libre me gusta invertirlo para ver series y malas peliculas