Skip to content

lulivi/bot-calendario-telegram

Repository files navigation

Bot Calendario de Telegram

Build Status codecov

Índice

  1. Descripción
  2. Servicios
  3. Despliegue en Heroku
    1. Configuración de la aplicación
    2. Creación de la aplicación en heroku
    3. Configuración de la aplicación
    4. Desplegado de la aplicación
  4. Despliegue con Docker en Zeit
  5. Despliegue con una máqina virtual en Azure
  6. Licencia

Descripción

Este proyecto consiste en la creación y desplegado de un bot de telegram multiuso, especialmente centrado en el manejo de un calendario de eventos añadidos por el usuario. Su principal misión será notificar las fechas de entregas de prácticas o exámenes. Un posible borrador de las acciones que podrá llevar a cabo el bot podría ser:

  • Añadir nuevos eventos
  • Modificar eventos
  • Eliminar eventos
  • Configurar cuándo deben notificar de los eventos

Servicios

Los posibles servicios en los que se basará este bot serán:

  • Bot API: python-elegram-bot API
  • Lenguaje: Python será el principal lenguaje del proyecto.
  • Cloud: Será desplegado en Heroku por su facilidad de uso y existencia de versión gratuita.
  • Base de datos: PostgreSQL se utilizará como base de datos por su integración con heroku y versatilidad.

Despliegue en Heroku

Para el despliegue de la aplicación he utilizado heroku como ya he comentado en la sección anterior. Los pasos a seguir son los siguientes:

Configuración de la aplicación

Antes de crear la aplicación en heroku, tenemos que configurar algunas opciones para que el desplegado se realiza automáticamente.

  • app.json: Este archivo (aunque no es totalmente necesario para este despliegue simple) definirá las características de nuestra aplicación a la hora del despliegue (por ejemplo, ejecución de scripts para la creación de la base de datos).
  • Procfile: El archivo que le dice a heroku qué debe ejecutar cuando se llega a la etapa de desplegado. Está compuesto por una o varias lineas indicándo qué servicios se desplegaran en la aplicación.

Creación de la aplicación en heroku

Una vez nos hemos hecho cuenta en heroku:

Posteriormente, creamos una nueva app en nuestro panel de aplicaciones:

Introducimos el nombre y la región en la que queremos que se ejecute:

Configuración de la aplicación

Después de crear la aplicación, configuramos su conexión con github y le indicamos que queremos desplegado automático despues de pasar los tests:

Desplegado de la aplicación

Clicamos en el boton de desplegar de la imagen anterior y... ¡configuración terminada!

En el siguiente enlace podemos encontrar el despliegue:

Despliegue https://bot-calendario-telegram.herokuapp.com/

Si quieres desplegar tu propia aplicación con este código:

Deploy

Despliegue con Docker en Zeit

Una vez nos hemos registrado en Zeit hay dos maneras de desplegar la aplicación.

  1. Forma lenta: Crear un Dockerfile en tu proyecto con la configuración pertinente
  2. Forma rápida: Crear un Dockerfile con una snapshot de tu proyecto ya subida a DockerHub

Y finalmente utilizar la herramienta de Zeit (now).

$ now --public
> Deploying ~/git/bot-calendario-telegram under lulivi
> Ready! https://bot-calendario-telegram-xfalnttusx.now.sh [9s]
> Synced 26 files (269.08KB) [0ms]
> Initializing…
> Building
> ▲ docker build
Sending build context to Docker daemon 344.1 kBkB
> Step 1 : FROM python:3.6
> 3.6: Pulling from library/python
...
> Successfully built 265dc9f7110a
> ▲ Storing image
> ▲ Deploying image
> ▲ Container started
> Deployment complete!

El despliegue del contenedor se puede encontrar en la siguiente URL de Zeit:

Contenedor: https://bot-calendario-telegram-xfalnttusx.now.sh

La snapshot se puede encontrar en DockerHub:

DockerHub snapshot: https://hub.docker.com/r/lulivi/bot-calendario-telegram/

Despliegue con una máqina virtual en Azure

La cuenta de azure la he obtenido de una clave que me proporcionó el profesor. Una vez registrados en Azure, instalamos un cliente de azure (yo he elegido el de python):

sudo npm install -g azure-cli

Una vez instalada la herramienta debemos reiniciar el equipo para que podamos usarla. Una vez reiniciado, ejecutamos:

azure login

Y nos mandará abrir un enlace y pegar el código de inicio de sesión con el cliente:

Para aprovisionar las máquinas de azure, utilizaré vagrant con su plugin de vagrant-azure que veremos más adelante. Ahora, realizamos la configuración de credenciales para conectarnos con azure siguiendo la siguiente guía configuración de credenciales con azure.

Entramosen modo asm (service management):

azure config mode asm

Ejecutamos el comando siguiente para poder crear nuestras credenciales:

azure account download

E importamos las credenciales descargadas (si no se nos lanza el buscador, copiamos y pegamos la url que aparece con el comando anterior en el), las importamos con:

azure account import /path/to/download/*.publishsettings

Una vez importadas las credenciales, las borramos y ejecutamos los siguientes comandos para su configuración:

openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout ~/.ssh/azurevagrant.key -out ~/.ssh/azurevagrant.key

chmod 600 ~/.ssh/azurevagrant.key

openssl x509 -inform pem -in ~/.ssh/azurevagrant.key -outform der -out ~/.ssh/azurevagrant.cer

Una vez configuradas, subimos el archivo .cert a Azure (Suscriptions > <Suscripción activa> > Management certificates > Upload). Ahora, creamos la aplicación y le damos permisos de colaborador (nos ahorrará muchos quebraderos de cabeza).

Nos dirigimos a Azure Active Directory > App registrations > New Application registration

Despues en Subscriptions > <Active Azure Pass> > Access control (IAM) > Add añadimos a nuestra aplicación y a nosotros como colaboradores

Vamos a utilizar Vagrant para la creación de la máquina virtual donde se encontrará nuestra aplicación. Para instalarlo, usamos los repositorios oficiales:

sudo pacman -S vagrant

Instalamos el plugin de azure para vagrant:

vagrant plugin install vagrant-azure

Tras la instalación, necesitamos las claves de nuestra aplicación para nuestro Vagrantfile. Se puede obtener como dice la guía de Azure:

  • El ID de la aplicación (AZURE_CLIENT_ID) en Azure Active Directory > App registrations > <Nombre de la aplicacion> > Application ID

  • La contraseña de la aplicación (AZURE_CLIENT_SECRET) en Azure Active Directory > App registrations > <Nombre de la aplicacion> > Settings > API ACCESS - Keys > Password creando una

  • La ID del directorio (AZURE_TENANT_ID) donde se encuentra la aplicación Azure Active Directory > Properties > Directory ID

  • La ID de la subscripción activa (AZURE_SUBSCRIPTION_ID) en Suscriptions > <Active Azure Pass> > Suscription ID

Para aprovisionar nuestra máquina, voy a usar un software que lo hace automáticamente tras la ejecución de vagrant. Éste es ansible. Se instala desde los repositorios oficiales, como vagrant:

sudo pacman -S ansible

Ahora creamos los archivos var.yml y playbook.yml necesarios para ansible.

Despues de completar el archivo Vagrantfile subimos la maquina:

vagrant up --provider=azure

Si se quisiera reaprovisionar la máquina virtual una vez ya se ha creado, se puede ejecutar el siguiente comando:

vagrant provision

Una vez se ha creada y aprovisionada la máquina con éxito, debemos abrir el puerto 80 de nuestra aplicación.

Nos dirigimos a Virtual machines > <nuestra máquina> > Networking > INBOUND PORT RULES > Add inbound

Finalmente, para poder desplegar nuestra aplicación con éxito, necesitamos una herramienta de despliegue. Yo voy a utilizar fabric y se instala desde pip:

pip install --user fabric3

Una vez creamos el archivo fabfile, lo ejecutamos con los siguientes comandos para realizar el despliegue/ejecución exitosamente:

fab -H vagrant@bot-calendario-telegram-vm.southcentralus.cloudapp.azure.com InstallApp
fab -H vagrant@bot-calendario-telegram-vm.southcentralus.cloudapp.azure.com StartApp

Para la comodidad de despliegue completo de la aplicación, se puede usar un script.

Despliegue final: bot-calendario-telegram-vm.southcentralus.cloudapp.azure.com

Licencia

Échale un vistazo a la Licencia

About

A telegram bot to keep every objective up to date.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published