/docker-controller-bot

Bot de telegram para controlar los contenedores docker de tu servidor

Primary LanguagePythonGNU General Public License v3.0GPL-3.0

docker-controller-bot

Docker Pulls Docker Stars Docker Image Size Github stars Github forks Github last-commit Github last-commit alt text

Lleva el control de tus contenedores docker desde un único lugar.

  • ✅ Listar contenedores
  • ✅ Arrancar, parar y eliminar contenedores
  • ✅ Obtener los logs tanto de manera directa como a través de fichero
  • ✅ Extraer el docker-compose de tus contenedores
  • ✅ Notificaciones cuando un contenedor se cae o se inicia
  • ✅ Notificaciones cuando un contenedor tiene una actualización pendiente
  • ✅ Actualizaciones de los contenedores
  • ✅ Cambiar el tag (rollback o actualización)
  • ✅ Soporte de idiomas (Spanish, English, Dutch)

¿Lo buscas en docker?

Configuración en config.py

CLAVE OBLIGATORIO VALOR
TELEGRAM_TOKEN Token del bot
TELEGRAM_ADMIN ChatId del administrador (se puede obtener hablándole al bot Rose escribiendo /id)
TELEGRAM_GROUP ChatId del grupo. Si este bot va a formar parte de un grupo, es necesario especificar el chatId de dicho grupo
TELEGRAM_THREAD Thread del tema dentro de un supergrupo; valor numérico (2,3,4..). Por defecto 1
CONTAINER_NAME Nombre del contenedor, lo que se le ponga en container_name en el docker-compose ha de ir aquí también
CHECK_UPDATES Si se desea que compruebe actualizaciones. 0 no - 1 sí. Por defecto 1
CHECK_UPDATE_EVERY_HOURS Tiempo de espera en horas entre chequeo de actualizaciones (4 horas por defecto)
BUTTON_COLUMNS Numero de columnas de botones en las listas de contenedores (2 columnas por defecto)
LANGUAGE Idioma, puede ser ES / EN / NL. Por defecto es ES (Spanish)
EXTENDED_MESSAGES Si se desea que muestre más mensajes de información. 0 no - 1 sí. Por defecto 0

Anotaciones

La función de extracción de docker-compose se encuentra en una fase temprana de desarrollo y puede contener errores.

Ejemplo de Docker-Compose para su ejecución normal

version: '3.3'
services:
    docker-controller-bot:
        environment:
            - TELEGRAM_TOKEN=
            - TELEGRAM_ADMIN=
            - CONTAINER_NAME=docker-controller-bot
            #- TELEGRAM_GROUP=
            #- TELEGRAM_THREAD=1
            #- CHECK_UPDATES=1
            #- CHECK_UPDATE_EVERY_HOURS=4
            #- BUTTON_COLUMNS=2
            #- LANGUAGE=ES
            #- EXTENDED_MESSAGES=0
        volumes:
            - /var/run/docker.sock:/var/run/docker.sock
            - /etc/localtime:/etc/localtime:ro
        image: dgongut/docker-controller-bot:latest
        container_name: docker-controller-bot
        restart: always
        network_mode: host
        tty: true

Funciones Extra mediante Labels/Etiquetas en otros contenedores

  • Añadiendo la etiqueta DCB-Ignore-Check-Updates a un contenedor, no se comprobarán actualizaciones para él.
  • Añadiendo la etiqueta DCB-Ignore-Status a un contenedor, no se notificará cuando se para o arranca excepto si se hace manualmente desde el bot.
  • Añadiendo la etiqueta DCB-Auto-Update a un contenedor, se actualizará automáticamente sin preguntar.

Agradecimientos

Traducción al neerlandés: ManCaveMedia

Como ejecutarlo en local (solo para desarrolladores)

Para su ejecución en local y probar nuevos cambios de código, se necesitan crear 2 ficheros llamados respectivamente Dockerfile_local y docker-compose.yaml

La estructura de carpetas debe quedar:

docker-controller-bot/
├── Dockerfile_local
├── docker-compose.yaml
└── src
    ├── LICENSE
    ├── README.md
    ├── config.py
    ├── docker-controller-bot.py
    └── locale
        ├── en.json
        ├── es.json
        └── nl.json

Dockerfile_local

FROM alpine:3.18.6

ENV TELEGRAM_TOKEN abc
ENV TELEGRAM_ADMIN abc
ENV TELEGRAM_GROUP abc
ENV TELEGRAM_THREAD 1
ENV CHECK_UPDATES 1
ENV CHECK_UPDATE_EVERY_HOURS 4
ENV CONTAINER_NAME abc
ENV BUTTON_COLUMNS 2
ENV LANGUAGE ES
ENV EXTENDED_MESSAGES 0

WORKDIR /app
COPY src/ .

RUN apk add --no-cache python3 py3-pip
RUN pip3 install pyTelegramBotAPI
RUN pip3 install docker
RUN pip install PyYAML

ENTRYPOINT ["python3", "docker-controller-bot.py"]

docker-compose.yaml

version: '3.3'
services:
    TEST-docker-controller-bot:
        container_name: TEST-docker-controller-bot
        environment:
            - TELEGRAM_TOKEN=
            - TELEGRAM_ADMIN=
            - CONTAINER_NAME=TEST-docker-controller-bot
            #- TELEGRAM_GROUP=
            #- TELEGRAM_THREAD=1
            #- CHECK_UPDATES=1
            #- CHECK_UPDATE_EVERY_HOURS=4
            #- BUTTON_COLUMNS=2
            #- LANGUAGE=ES
            #- EXTENDED_MESSAGES=0
        volumes:
            - /var/run/docker.sock:/var/run/docker.sock:ro
            - /etc/localtime:/etc/localtime:ro
        build:
          context: .
          dockerfile: ./Dockerfile_local
        tty: true

Es necesario establecer un TELEGRAM_TOKEN y un TELEGRAM_ADMIN correctos y diferentes al de la ejecución normal.

Para levantarlo habría que ejecutar en esa ruta: docker compose up -d

Para detenerlo y probar nuevos cambios habría que ejecutar en esa ruta: docker compose down --rmi